我心中的服務(wù)保護
做服務(wù)保護已經(jīng)很長時間了顾画,記得來公司大概1個月后取劫,就去服務(wù)保護這個團隊進行開發(fā)了⊙新拢可以說服務(wù)保護伴隨了我的成長谱邪,也可以說我陪著服務(wù)保護這個項目走完了他的開始到結(jié)束。
服務(wù)保護項目是什么
簡答來說服務(wù)保護項目就是為了保證服務(wù)的穩(wěn)定性而出生的一套保護方案庶诡。包括降級惦银,限流,故障演練和預(yù)案等多重功能末誓。
為什么要做服務(wù)保護
簡單來說在線上環(huán)境任何依賴的中間系統(tǒng)我們都可以認為是不可靠的扯俱,例如數(shù)據(jù)庫有可能會down機。例如緩存有可能會down機喇澡,但是面對這些問題我們的系統(tǒng)需要有能力做到減少故障時長迅栅,快速降級。引用Hystrix框架
復(fù)雜分布式體系結(jié)構(gòu)中的應(yīng)用程序具有許多依賴關(guān)系晴玖,每個依賴關(guān)系在某些時候都不可避免地失敗读存。如果主機應(yīng)用程序不與這些外部故障隔離,則有可能被拆除窜醉。
例如宪萄,對于依賴30個服務(wù)的應(yīng)用程序,每個服務(wù)的正常運行時間為
99.99%榨惰,以下是您所期望的:
99.99 30 = 99.7%正常運行時間
10億次請求中的0.3%= 3,000,000次故障
即使所有依賴關(guān)系都具有出色的正常運行時間拜英,每次宕機時間仍然為> 2小時以上。
現(xiàn)實通常更糟糕琅催。
即使所有依賴性都能很好地發(fā)揮作用居凶,如果您沒有設(shè)計整個系統(tǒng)的彈性,那么幾十項服務(wù)中每項服務(wù)的停機時間甚至達到0.01%的總體影響等同于每月停機時間可能達到的小時數(shù)藤抡。
降級
面對非核心流程我們需要有能力快速的切換降級問題服務(wù)侠碧,例如緩存的tair有問題了,我們需要降級到redis缠黍。例如某個下游非核心服務(wù)有問題了弄兜,我們需要快速對其降級。
解決痛點:基于記錄瓷式,并操作ZK進行配置變更替饿,流程長,降級速度較慢贸典。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 痛點
限流
為什么要做限流呢视卢?主要是因為針對非核心流程我們可以進行降級的操作,但是針對核心流程廊驼,例如訂單創(chuàng)建這種寫入數(shù)據(jù)庫的流程或者交易相關(guān)記錄交易信息的流程据过,我們不可能進行降級操作惋砂。為了保證主流程的穩(wěn)定性,我們需要對其進行限流绳锅,保證系統(tǒng)的吞吐量在我們系統(tǒng)可以支撐的范圍只能西饵,防止超高流量把系統(tǒng)打垮。
解決痛點:瞬時高流量沖擊榨呆,瞬時超高流量對業(yè)務(wù)系統(tǒng)的沖擊太強罗标,RPC請求下游放大,造成系統(tǒng)雪崩积蜻。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 痛點
故障演練
現(xiàn)在我們的開發(fā)同學(xué)基本上大部分時間都在討論需求闯割,寫代碼,很少有時間去好好鍛煉自己線上排查問題的能力竿拆,而針對一個大型的系統(tǒng)來說宙拉,每次發(fā)生問題都可能是大問題,如果沒有處理線上問題的經(jīng)驗丙笋,就無法果斷的切換降級開關(guān)谢澈,那么線上問題就會越來越麻煩。所以針對這個痛點我們開發(fā)了故障演練模塊御板,模擬線上的故障锥忿,豐富開發(fā)同學(xué)處理線上問題的能力。
解決痛點:開發(fā)同學(xué)缺乏故障降級經(jīng)驗怠肋,線上重大故障較少敬鬓,開發(fā)同學(xué)缺乏針對重大故障降級的經(jīng)驗。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 痛點
降級預(yù)案
降級預(yù)案笙各,顧名思義這個是一個降級功能的組合钉答,為什么要有這個組合呢?這個主要是針對于某類故障的發(fā)生杈抢,快速降級某類故障数尿,例如在不同的服務(wù)中,都會對某一個tair集群進行訪問惶楼,那么如果這個Tair集群發(fā)生問題了右蹦,我們怎么辦呢?一個一個處理分布在不同服務(wù)中的開關(guān)歼捐?然后在過程中還不知道要設(shè)置什么值何陆。這個時候如果在故障發(fā)生前總結(jié)好預(yù)案,就可以在問題發(fā)生之前快速的進行處理問題了窥岩。
解決痛點:針對某類功能進行降級的時候,一個一個操作ZK會浪費很多時間宰缤。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 痛點
服務(wù)保護可以做什么
說到可以做什么颂翼,我認為服務(wù)保護的思想在任何一個互聯(lián)網(wǎng)公司都是需要具備的晃洒。
事故前
事故前我們需要做好準備,什么叫準備朦乏,就是我們要主動創(chuàng)造困難培養(yǎng)自己應(yīng)對線上問題的能力球及。
通過服務(wù)保護的故障演練模塊,主動制造故障呻疹,鍛煉開發(fā)同學(xué)解決線上問題的能力吃引,這樣當線上著火的時候我們就可以快速的切換開關(guān)執(zhí)行預(yù)案甚至進行限流了。
事故中
事故發(fā)生了刽锤,在不發(fā)版的情況下唯一可以改變線上運行狀態(tài)的就是開關(guān)了镊尺,通過扳動開關(guān)我們可以進行降級操作,操作預(yù)案完成對于整個功能的降級并思。通過執(zhí)行限流操作庐氮,抵抗大批量的流量,防止服務(wù)被大流量打掛宋彼。
事故后
通過事故后弄砍,總結(jié)故障演練場景,豐富預(yù)案的開關(guān)输涕,從而完成針對某一種類型故障的快速解決方案音婶,為線上穩(wěn)定性建設(shè)添磚加瓦。