一流的人生,就是看著別人犯錯誤,自己不犯錯誤,吸取經驗教訓;
二流的人生,是自己犯錯誤,自己吸取教訓;
三流的人生,是自己犯錯誤,自己還不吸取教訓。
網際網路工程師,特別是後台工程師,經常遇到線上出問題,引起事故。事故有大有小,影響不一,有些能自動恢復,有些影響巨大刻骨銘心。今天就來聊聊運營事故的處理及預防。
雖然發生運營事故是大家都不想看到的,但是真發生了,還是有處理的方法。
為什麼要同步給leader呢?自己弄好,誰也不說行嗎?肯定不行,紙包不住火。同步給leader只有好處,沒有壞處。
同步後,你可以專心處理事故,leader會幫你決策處理方法,通知相關人,評估事情的嚴重性,尋找經驗更豐富的人等。因為leader一般經驗豐富,能夠快速定位問題,幫你出主意,做決策。如果影響相關團隊,還能幫你協調外部資源。如果自己乙個人處理,處理不好會事情越來越嚴重,影響越來越大。處理好了,也違反了流程。按照流程辦,就不會出大問題。處理流程也是在眾多流血的事故中總結出來的。
例如:有的事故是發布新特性導致主流程出了問題,那麼即時回滾,比查問題更重要,先回滾恢復,再查為什麼。不要讓使用者的體驗一直在流血。
評估影響
看下都哪些使用者受影響,影響範圍,和嚴重程度怎麼樣?如果恢復要多長時間,能恢復在什麼程度?有沒有替代的方案來處理,即使沒有那麼完美。
安民告示
壯士斷臂
有時要作出決策,要考慮柔性,捨棄一些正常的功能來保證主功能。決策要砍脖子,到底是手旁邊的,還是腦袋旁邊的脖子?
事故發生後,要進行詳細的覆盤,分析原因整改,要記錄事故詳細過程,事故的原因,造成的影響,改進措施和排期。
事故發生的原因有很多,本質都是乙個「變更」。
發布導致變更
使用者行為變更
來的使用者多了,熱點事件導致使用者對某種操作變多了。引起系統過載等問題。一般還是容量管理沒有做好,不能應對大流量。
要對容量有個評估,能應對多少請求,當使用者行為變更時,能夠及時擴容,或柔性可用。
依賴變更導致
是另外乙個系統變更所為,到底是自己的防禦程式設計沒做好,還是依賴方的程式沒寫到位?
bug觸發
**中寫了「定時炸彈」,例如做系統初期分配的空間寫的太小了,隨著規模擴大,突破的分配。
有些**沒有用,卻放到那裡,陰差陽錯又被呼叫了。
既然有這麼多原因,如何預防呢?
每一次**變更,發布變更。都要謹慎,認真執行review和發布流程。要有柔性預案。要有防範事故的意識。例如:申請ip都是同一機房的,如果線路斷了怎麼辦,機房停電呢?能不能備份了資料,能不能快速搭建一套新的服務,有沒有備機?
但是事故發生的原因多種多樣,有防範意識很好,但是也難應對所有情況。
吾生也有涯,而知也無涯 。以有涯隨無涯,殆已!
為了不「殆已」,要抓住主要環節,最終的出口——監控。不管發生什麼問題,都能即使發現,盡早預警。對sla的指標監控。這是能夠做到的。很多事故不是發生了處理不了,而是沒發現。發現問題要比解決問題更難。
除此之外要能控制上限,例如發獎,總有個預算,萬一多發了,也不至於把錢都發出去。給使用者發簡訊,也不會一天發超過10條,如果超了就別發了。
事故的減少,本質還是人的意識提高。
按照流程規範開發和運維,就不會出大問題。
不要兩次被一塊石頭絆倒,從事故報告中吸取經驗教訓,減少事故。像聖鬥士一樣,不會被同一招打倒兩次。
運營事故的處理及預防
SQL 語句中特殊字元的處理及預防sql 注射
在sql語句中,有些特殊字元,是sql保留的。比如 等。我們可以先看看它們的用法。當需要查詢某資料時,加入條件語句,或著當你需要insert記錄時,我們用 來將字元型別的資料引起來。比如 select from customers where city london 當表的名字或列的名字中,含有空格...
亞穩態的危害及預防
上圖時序反應了時鐘雙觸發器的同步電路最終輸出乙個穩定的訊號。其實避免亞穩態的發生主要就是避免非同步訊號的時鐘,使用雙觸發器同步電路的精華就是將非同步訊號同步化操作。下面分情況討論怎麼避免亞穩態 1 非同步復位電路 非同步復位訊號相當於本地時鐘域是非同步訊號,同樣為了非同步訊號同步化,使用雙觸發器同步...
死鎖的產生條件和預防處理
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...