高可用系統(tǒng)穩(wěn)定性保障

如何衡量系統(tǒng)穩(wěn)定性的高與低呢娃属?一個常用的指標(biāo)就是服務(wù)可用時長占比,占比越高說明系統(tǒng)穩(wěn)定性也越高护姆,如果我們拿一整年的數(shù)據(jù)來看矾端,常見的 4 個 9(99.99%)意味著我們系統(tǒng)提供的服務(wù)全年的不可用時長只有 52 分鐘!

系統(tǒng)的故障源一般可以分為兩大類卵皂,一類是人為因素秩铆,另一類是自然因素。常見人為因素導(dǎo)致的故障如下:

image.png

常見的自然因素導(dǎo)致的故障如下:

image.png

穩(wěn)定性建設(shè)主要圍繞以下四個方面展開:

  • 系統(tǒng)應(yīng)用測
  • 運維測
  • 支撐側(cè)(公司基礎(chǔ)設(shè)施平臺)
  • 項目管理測

1、應(yīng)用測(系統(tǒng)架構(gòu))

高可用的設(shè)計原則

2殴玛、運維測

系統(tǒng)要考慮持續(xù)迭代發(fā)布變更以及線上運維的訴求捅膘,做到可灰度、可回滾滚粟、可擴展寻仗。

2.1 可灰度保障

及時在小流量情況,發(fā)現(xiàn)問題凡壤,避免引發(fā)大范圍故障愧沟。因此在做系統(tǒng)任何變更時,要考慮灰度方案鲤遥,特別是大用戶流量系統(tǒng)沐寺。灰度方式可能有白名單用戶盖奈、按用戶Id固定劃分后不同流量比例混坞、機器分批發(fā)布、業(yè)務(wù)概念相關(guān)分組分比例(例如某個行業(yè)钢坦、某個商品究孕、某類商品)等,灰度周期要和結(jié)合系統(tǒng)風(fēng)險和流量做合適設(shè)計爹凹,重要系統(tǒng)灰度周期可能持續(xù)超過一周或更多厨诸。

2.2 可回滾

新增功能增加配置開關(guān),當(dāng)線上出現(xiàn)問題時禾酱,可通過關(guān)閉功能開關(guān)微酬,快速下線最新升級 或部分有問題功能。針對不同出錯場景颤陶,有配置驅(qū)動一些預(yù)案颗管,例如降級對某個服務(wù)的依賴、提供合適功能維護(hù)中公告滓走、切換到備用服務(wù)等預(yù)案垦江,在特定問題出現(xiàn)時,可以快速做線上止損和恢復(fù)搅方。發(fā)布功能注意提前考慮出現(xiàn)問題時快速回滾步驟比吭,部分經(jīng)常發(fā)布注意對回滾步驟做演練。

2.3 可擴展

服務(wù)無狀態(tài)姨涡,支持動態(tài)擴容衩藤。

3、支撐側(cè)(或稱基礎(chǔ)設(shè)施平臺)

3.1 可監(jiān)控

要系統(tǒng)性確認(rèn)是否完備以及保持更新绣溜,可能監(jiān)控項:錯誤日志前端js錯誤慷彤、用戶體驗到的性能和白屏率、接口成功率怖喻、依賴服務(wù)成功率底哗、機器基礎(chǔ)負(fù)載相關(guān)監(jiān)控(CPU利用率、cpu Load锚沸、內(nèi)存跋选、IO、網(wǎng)絡(luò)等)哗蜈、服務(wù)基礎(chǔ)監(jiān)控(端口前标、進(jìn)程、狀態(tài)探活距潘、JVM full gc炼列、OOM等)、數(shù)據(jù)庫負(fù)載監(jiān)控音比、數(shù)據(jù)庫慢請求俭尖、流量同比劇烈變化。

3.2 可預(yù)警

監(jiān)控項的報警策略也要根據(jù)業(yè)務(wù)系統(tǒng)特點以及監(jiān)控項的特點洞翩,做不同報警策略設(shè)計稽犁,例如秒級&分鐘級報警、錯誤率報警骚亿、錯誤日志次數(shù)報警已亥、連續(xù)出錯報警等。核心監(jiān)控可摘要一個監(jiān)控大盤来屠,一個大盤快速判斷服務(wù)穩(wěn)定性情況虑椎。

4、項目管理測

4.1 研發(fā)流程

穩(wěn)定性涉及團(tuán)隊所有不同水平同學(xué)俱笛、所有系統(tǒng)绣檬、研發(fā)所有環(huán)節(jié)、線上時時刻刻嫂粟,單個同學(xué)是無法保障好的娇未,必須建立團(tuán)隊流程機制來可持續(xù)保障。

主要流程機制如下:

  • 設(shè)計Review:不同體量設(shè)計安排經(jīng)驗更加豐富同學(xué)Review星虹,架構(gòu)師零抬、主管、外部架構(gòu)師的Review宽涌、定期系統(tǒng)整體Review等平夜。
  • 代碼Code Review:建立規(guī)范和標(biāo)準(zhǔn),通過CR認(rèn)證合格同學(xué)執(zhí)行code review動作卸亮。
  • 單元測試:不同風(fēng)險的系統(tǒng)設(shè)定盡量高的行覆蓋 & 分支覆蓋率標(biāo)準(zhǔn)忽妒,復(fù)雜邏輯類追求100%分支覆蓋。
  • 回歸測試:持續(xù)積累回歸用例,在上線前和上線后執(zhí)行回歸動作段直;上線前線上引流測試也是一種模擬測試方式吃溅,端類型系統(tǒng)還可以用monkey工具做隨機化測試。
  • 發(fā)布機制:設(shè)計發(fā)布準(zhǔn)入和審批流程鸯檬,確保每次上線發(fā)布都是經(jīng)過精細(xì)設(shè)計和審核的决侈,上線過程要做到分批、灰度喧务、支持快速回滾赖歌、線上分批觀察(日志確認(rèn))、線上回歸等核心動作功茴。建立發(fā)布紅線等機制庐冯,不同系統(tǒng)設(shè)計合適發(fā)布時段以及發(fā)布灰度觀察周期。
  • 團(tuán)隊報警值班響應(yīng)機制 (報警群坎穿、短信展父、電話):確保報警有合適人員即時響應(yīng)處理,團(tuán)隊層面可定期做數(shù)據(jù)性統(tǒng)計通曬赁酝,同時建立主管或架構(gòu)師兜底機制犯祠。
  • 定期排查線上隱患:定期做線上走查和錯誤日志治理、告警治理酌呆,確保線上小的隱患機制化發(fā)現(xiàn)和修復(fù)衡载。例如在釘釘針對企業(yè)用戶早晚高峰的特點,設(shè)計早值班機制隙袁,用于高峰期第一時間應(yīng)急以及每天專人花一定時間走查線上痰娱,該機制在釘釘技術(shù)團(tuán)隊持續(xù)踐行多年,有效發(fā)現(xiàn)和治理了釘釘各個線上系統(tǒng)的隱患菩收。
  • 用戶問題處理機制:Voc日清梨睁、周清等。在釘釘也經(jīng)歷Voc周清到日清的持續(xù)機制精進(jìn)娜饵。
  • 線上問題復(fù)盤機制:天內(nèi)坡贺、周內(nèi)問題及時復(fù)盤,確保針對每個線上問題做系統(tǒng)和團(tuán)隊精進(jìn)箱舞。
  • 代碼質(zhì)量抽查通曬:定期抽查團(tuán)隊同學(xué)代碼遍坟,做評估和通曬,鼓勵好的代碼晴股,幫助不好代碼的改善愿伴。
  • 成立穩(wěn)定性治理專門topic:合適同學(xué)每周做好穩(wěn)定性過程和精進(jìn)。
  • 定期壓測機制:定期機制化執(zhí)行电湘,核查線上容量情況隔节。
  • 日常演練機制:預(yù)案演練鹅经,模擬線上故障的不通知的突襲演練提升團(tuán)隊線上問題應(yīng)對能力。

流程機制要和團(tuán)隊同學(xué)共創(chuàng)達(dá)成一致后怎诫,配合建立topic負(fù)責(zé)人機制瘾晃,對流程機制執(zhí)行度和執(zhí)行效果要做好過程監(jiān)測和通曬,建立明確數(shù)字化標(biāo)準(zhǔn)和衡量機制(例如釘釘技術(shù)團(tuán)隊針對線上問題設(shè)定1-5-10標(biāo)準(zhǔn)刽虹,1分鐘響應(yīng)5分鐘內(nèi)定位10分鐘內(nèi)恢復(fù))酗捌,同時建立對應(yīng)獎懲機制呢诬。流程機制也要根據(jù)系統(tǒng)狀態(tài)進(jìn)行精簡或精進(jìn)涌哲,確保流程機制可執(zhí)行性和生命力。

4.2 研發(fā)人員

每個報警不要放過尚镰,每個報警及時響應(yīng)處理

快速定位和快速恢復(fù)是個人以及團(tuán)隊專業(yè)能力沉淀阀圾,但快速報警響應(yīng)是每個敬畏線上敬畏用戶體驗的技術(shù)同學(xué)可以做到的。

在監(jiān)控完備和持續(xù)前提下狗唉,每個報警及時處理即可以降低故障影響范圍初烘,也會持續(xù)減少小的隱患。報警一些小的實踐技巧:報警按照方向收斂報警群分俯,建立報警天級值班機制肾筐,報警短信手機設(shè)置為震動模式(不打擾同空間家人或朋友情況下,自己第一時間感知)缸剪,主管要訂閱報警作為團(tuán)隊報警兜底處理人,報警響應(yīng)好的同學(xué)和不好的同學(xué)要數(shù)據(jù)化表揚和批評杏节。

從團(tuán)隊角度唬渗,報警及時響應(yīng)必須配合報警治理進(jìn)行,否則過多無效報警也會讓有責(zé)任心的同學(xué)變得麻木奋渔。所以必須控制無效報警的數(shù)量镊逝,例如單應(yīng)用無效報警(不需要線上問題進(jìn)行定位以及修復(fù)處理的)不要超過5條,個人維度無效報警天級別不超過10條嫉鲸。

線上問題要復(fù)盤撑蒜,不論是否為定級故障,不論問題大小

小的線上問題也要復(fù)盤玄渗,復(fù)盤準(zhǔn)備度可以低于定級故障座菠,但都需要思考反思以及落實優(yōu)化Action。小的線上問題就是未來線上故障的前兆捻爷。我們團(tuán)隊周會上都會有一個環(huán)節(jié)辈灼,上周如有線上問題則會安排對觸發(fā)人做復(fù)盤。

錯誤日志要重視

要定期分析線上錯誤日志也榄,隱患的問題是藏在錯誤日志中的巡莹。我們現(xiàn)在技術(shù)團(tuán)隊會有早值班機制司志,每個方向每天都有一個技術(shù)同學(xué)走查線上,以發(fā)現(xiàn)線上隱患問題為導(dǎo)向降宅,走查監(jiān)控大盤骂远、錯誤日志、用戶反饋腰根,通過這個例行機制激才,很好地防微杜漸。

每個用戶反饋要重視额嘿,定位到根本原因

一個用戶反饋背后必然有多個實際線上問題瘸恼,只是這個用戶無法忍受,知道反饋路徑以及對這個產(chǎn)品有熱愛 或強依賴才選擇反饋的册养。徹底定位一個voc东帅,就是修復(fù)了一類線上問題。而且到用戶反饋的程度球拦,這個線上問題就已經(jīng)有一定程度用戶體驗影響了靠闭。我們現(xiàn)在技術(shù)團(tuán)隊有一個voc日清機制,針對線上voc問題對用戶做好日內(nèi)響應(yīng)答復(fù)坎炼,也是一個不錯對于這個意識的數(shù)字化衡量愧膀。

能力培養(yǎng)

單個技術(shù)同學(xué)個人技術(shù)以及穩(wěn)定性保障能力是團(tuán)隊在每個穩(wěn)定性任務(wù)上拿到結(jié)果的執(zhí)行者和基礎(chǔ),因此技術(shù)主管重視識別不同同學(xué)個人優(yōu)勢和不足谣光,針對性做工作安排以及培養(yǎng)鍛煉檩淋。只要線上意識上足夠重視,能力對于大部門技術(shù)同學(xué)是可以培養(yǎng)的抢肛。

團(tuán)隊內(nèi)同學(xué)由于入行時間狼钮、歷史經(jīng)驗等各方面原因,對于當(dāng)前系統(tǒng)穩(wěn)定性保障能力是有強弱的差異的捡絮,對于個人是正常情況熬芜,但對于團(tuán)隊而言,不能因為團(tuán)隊個別同學(xué)能力上存在不足而引入團(tuán)隊層面穩(wěn)定性保障風(fēng)險福稳。需要主管很好熟悉以及判斷同學(xué)能力段位涎拉,在負(fù)責(zé)系統(tǒng)和模塊、流程機制約束的圆、輔導(dǎo)人等方面做好差異化安排鼓拧。例如校招同學(xué)X個月不做線上發(fā)布,前X個月發(fā)布有師兄協(xié)同發(fā)布機制越妈,并發(fā)高 或資金交易等等風(fēng)險高的系統(tǒng)讓更加有經(jīng)驗的負(fù)責(zé)季俩。同時設(shè)計培養(yǎng)機制,能力當(dāng)前不足但有潛力的同學(xué)梅掠,可以安排由經(jīng)驗豐富的同學(xué)指導(dǎo)以及提供一些進(jìn)階實操路徑酌住,按照節(jié)奏從易到難逐漸承擔(dān)更高風(fēng)險的系統(tǒng)職責(zé)店归。

能力培養(yǎng)方式有技術(shù)Review、代碼CR和輔導(dǎo)酪我、參與團(tuán)隊穩(wěn)定性保障機制消痛、安排合適師兄指導(dǎo)、過程中主管指導(dǎo)都哭、逐漸承擔(dān)更高職責(zé)等秩伞。代碼層面,對于Java同學(xué)來說欺矫, 《Java開發(fā)手冊》是一個很好的實踐性指南纱新,超出代碼風(fēng)格,提供了日志汇陆、異常處理怒炸、集合等庫使用带饱、數(shù)據(jù)庫設(shè)計毡代、分層設(shè)計等多個提升代碼質(zhì)量的實踐做法,我們自己團(tuán)隊所有Java研發(fā)同學(xué)都會100%通過阿里云上阿里巴巴代碼認(rèn)證考試勺疼,同時團(tuán)隊有一個團(tuán)隊內(nèi)新人品碼機制教寂,同時釘釘大技術(shù)團(tuán)隊層面有一個品碼會機制,這些都是不錯地培養(yǎng)同學(xué)寫出好代碼的培養(yǎng)方式执庐。

好多小團(tuán)隊酪耕、大團(tuán)隊、公司都有很多不錯提升穩(wěn)定性機制和案例轨淌,積極主動參考學(xué)習(xí)以及結(jié)合自己業(yè)務(wù)系統(tǒng)思考踐行迂烁,是自己提升重要路徑。架構(gòu)上高可用以及架構(gòu)相關(guān)經(jīng)典書籍自我學(xué)習(xí)递鹉,從理論上做系統(tǒng)性認(rèn)知也是有必要盟步,相關(guān)書籍網(wǎng)上有很多推薦,例如《高性能網(wǎng)站建設(shè)》躏结、《大型網(wǎng)站系統(tǒng)與Java中間件實踐》等却盘。

少量的同學(xué)在主管和團(tuán)隊盡可能幫助和輔導(dǎo)后在穩(wěn)定性性保障的意識和能力上持續(xù)不能達(dá)標(biāo),這類同學(xué)要做好階段性高風(fēng)險系統(tǒng)隔離以及堅定做汰換媳拴。對業(yè)務(wù)黄橘、客戶體驗、團(tuán)隊內(nèi)其他同學(xué)負(fù)責(zé)屈溉,及時汰換他以降低這一塊穩(wěn)定性風(fēng)險塞关。

參考:

穩(wěn)定性全系列(一):如何做好系統(tǒng)穩(wěn)定性建設(shè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市子巾,隨后出現(xiàn)的幾起案子帆赢,更是在濱河造成了極大的恐慌驶睦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匿醒,死亡現(xiàn)場離奇詭異场航,居然都是意外死亡,警方通過查閱死者的電腦和手機廉羔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門溉痢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憋他,你說我怎么就攤上這事孩饼。” “怎么了竹挡?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵镀娶,是天一觀的道長。 經(jīng)常有香客問我揪罕,道長梯码,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任好啰,我火速辦了婚禮轩娶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘框往。我一直安慰自己鳄抒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布椰弊。 她就那樣靜靜地躺著许溅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秉版。 梳的紋絲不亂的頭發(fā)上贤重,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音沐飘,去河邊找鬼游桩。 笑死,一個胖子當(dāng)著我的面吹牛耐朴,可吹牛的內(nèi)容都是我干的借卧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼筛峭,長吁一口氣:“原來是場噩夢啊……” “哼铐刘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起影晓,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤镰吵,失蹤者是張志新(化名)和其女友劉穎檩禾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疤祭,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡盼产,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勺馆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戏售。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖草穆,靈堂內(nèi)的尸體忽然破棺而出灌灾,到底是詐尸還是另有隱情,我是刑警寧澤悲柱,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布锋喜,位于F島的核電站,受9級特大地震影響豌鸡,放射性物質(zhì)發(fā)生泄漏嘿般。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一直颅、第九天 我趴在偏房一處隱蔽的房頂上張望博个。 院中可真熱鬧,春花似錦功偿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虑灰,卻和暖如春吨瞎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穆咐。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工颤诀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人对湃。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓崖叫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拍柒。 傳聞我的和親對象是個殘疾皇子心傀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容