????CP - Consistency/Partition Tolerance
????AP - Availability/Partition Tolerance
CAP定理
對于一個分布式計算系統(tǒng),不可能同時滿足一致性(Consistence)、可用性(Availability)、分區(qū)容錯性(Partition Tolerance)三個設(shè)計約束请垛。
在一個分布式系統(tǒng)(指互相連接并共享數(shù)據(jù)的節(jié)點的集合)中褪迟,當(dāng)涉及讀寫操作時寇甸,只能保證一致性(Consistence)、可用性(Availability)蔬咬、分區(qū)容錯性(Partition Tolerance)三者中的兩個粤咪,另外一個必須被犧牲谚中。
分布式環(huán)境下來思考渴杆,我們會發(fā)現(xiàn)必須選擇 P(分區(qū)容忍)要素寥枝,因為網(wǎng)絡(luò)本身無法做到 100% 可靠磁奖,有可能出故障囊拜,所以分區(qū)是一個必然的現(xiàn)象。如果我們選擇了 CA 而放棄了 P比搭,那么當(dāng)發(fā)生分區(qū)現(xiàn)象時冠跷,為了保證 C,系統(tǒng)需要禁止寫入身诺,當(dāng)有寫入請求時蜜托,系統(tǒng)返回 error(例如,當(dāng)前系統(tǒng)不允許寫入)霉赡,這又和 A 沖突了橄务,因為 A 要求返回 no error 和 no timeout。因此穴亏,分布式系統(tǒng)理論上不可能選擇 CA 架構(gòu)蜂挪,只能選擇 CP 或者 AP 架構(gòu)重挑。
CP - Consistency/Partition Tolerance
為了保證一致性,當(dāng)發(fā)生分區(qū)現(xiàn)象后棠涮,N1 節(jié)點上的數(shù)據(jù)已經(jīng)更新到 y谬哀,但由于 N1 和 N2 之間的復(fù)制通道中斷,數(shù)據(jù) y 無法同步到 N2严肪,N2 節(jié)點上的數(shù)據(jù)還是 x史煎。這時客戶端 C 訪問 N2 時,N2 需要返回 Error驳糯,提示客戶端 C“系統(tǒng)現(xiàn)在發(fā)生了錯誤”劲室,這種處理方式違背了可用性(Availability)的要求,因此 CAP 三者只能滿足 CP结窘。
AP - Availability/Partition Tolerance
為了保證可用性很洋,當(dāng)發(fā)生分區(qū)現(xiàn)象后,N1 節(jié)點上的數(shù)據(jù)已經(jīng)更新到 y隧枫,但由于 N1 和 N2 之間的復(fù)制通道中斷喉磁,數(shù)據(jù) y 無法同步到 N2,N2 節(jié)點上的數(shù)據(jù)還是 x官脓。這時客戶端 C 訪問 N2 時协怒,N2 將當(dāng)前自己擁有的數(shù)據(jù) x 返回給客戶端 C 了,而實際上當(dāng)前最新的數(shù)據(jù)已經(jīng)是 y 了卑笨,這就不滿足一致性(Consistency)的要求了孕暇,因此 CAP 三者只能滿足 AP。
CAP關(guān)鍵細(xì)節(jié)點
CAP 關(guān)注的粒度是數(shù)據(jù)赤兴,而不是整個系統(tǒng)妖滔。CAP 理論落地實踐時,我們需要將系統(tǒng)內(nèi)的數(shù)據(jù)按照不同的應(yīng)用場景和要求進(jìn)行分類桶良,每類數(shù)據(jù)選擇不同的策略(CP 還是 AP)座舍,而不是直接限定整個系統(tǒng)所有數(shù)據(jù)都是同一策略。
CAP 是忽略網(wǎng)絡(luò)延遲的陨帆。
正常運行情況下曲秉,不存在 CP 和 AP 的選擇,可以同時滿足 CA疲牵。既要考慮分區(qū)發(fā)生時選擇 CP 還是 AP承二,也要考慮分區(qū)沒有發(fā)生時如何保證 CA。
放棄并不等于什么都不做纲爸,需要為分區(qū)恢復(fù)后做準(zhǔn)備亥鸠。CAP 理論的“犧牲”只是說在分區(qū)過程中我們無法保證 C 或者 A,但并不意味著什么都不做缩焦。因為在系統(tǒng)整個運行周期中读虏,大部分時間都是正常的责静,發(fā)生分區(qū)現(xiàn)象的時間并不長
ACID
ACID 是數(shù)據(jù)庫管理系統(tǒng)為了保證事務(wù)的正確性而提出來的一個理論,ACID 包含四個約束
1.Atomicity(原子性)
2.Consistency(一致性)
3.Isolation(隔離性)
4.Durability(持久性)
BASE
BASE 是指基本可用(Basically Available)盖桥、軟狀態(tài)( Soft State)灾螃、最終一致性( Eventual Consistency),核心思想是即使無法做到強一致性(CAP 的一致性就是強一致性)揩徊,但應(yīng)用可以采用適合的方式達(dá)到最終一致性腰鬼。
1. 基本可用(Basically Available)分布式系統(tǒng)在出現(xiàn)故障時,允許損失部分可用性塑荒,即保證核心可用熄赡。
2. 軟狀態(tài)(Soft State)允許系統(tǒng)存在中間狀態(tài),而該中間狀態(tài)不會影響系統(tǒng)整體可用性齿税。這里的中間狀態(tài)就是 CAP 理論中的數(shù)據(jù)不一致彼硫。
3. 最終一致性(Eventual Consistency)系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過一定時間后,最終能夠達(dá)到一致的狀態(tài)凌箕。
FMEA方法
FMEA(Failure mode and effects analysis拧篮,故障模式與影響分析)又稱為失效模式與后果分析、失效模式與效應(yīng)分析牵舱、故障模式與后果分析等串绩。
在架構(gòu)設(shè)計領(lǐng)域,F(xiàn)MEA 的具體分析方法是:
a芜壁、給出初始的架構(gòu)設(shè)計圖礁凡。
b、假設(shè)架構(gòu)中某個部件發(fā)生故障慧妄。
c顷牌、分析此故障對系統(tǒng)功能造成的影響。
d腰涧、根據(jù)分析結(jié)果韧掩,判斷架構(gòu)是否需要進(jìn)行優(yōu)化。
FMEA 分析的方法其實很簡單窖铡,就是一個 FMEA 分析表,常見的 FMEA 分析表格包含下面部分坊谁。
1 功能點:注意這里的“功能點”指的是從用戶角度來看的
2 故障模式:故障模式指的是系統(tǒng)會出現(xiàn)什么樣的故障费彼,包括故障點和故障形式。需要特別注意的是口芍,這里的故障模式并不需要給出真正的故障原因箍铲,我們只需要假設(shè)出現(xiàn)某種故障現(xiàn)象即可,例如 MySQL 響應(yīng)時間達(dá)到 3 秒鬓椭。
3 故障影響:當(dāng)發(fā)生故障模式中描述的故障時颠猴,功能點具體會受到什么影響关划。常見的影響有:功能點偶爾不可用、功能點完全不可用翘瓮、部分用戶功能點不可用贮折、功能點響應(yīng)緩慢、功能點出錯等资盅。
4 嚴(yán)重程度:嚴(yán)重程度指站在業(yè)務(wù)的角度故障的影響程度调榄,一般分為“致命 / 高 / 中 / 低 / 無”五個檔次。嚴(yán)重程度按照這個公式進(jìn)行評估:嚴(yán)重程度 = 功能點重要程度 × 故障影響范圍 × 功能點受損程度呵扛。同樣以用戶管理系統(tǒng)為例:登錄功能比修改用戶資料要重要得多每庆,80% 的用戶比 20% 的用戶范圍更大,完全無法登錄比登錄緩慢要更嚴(yán)重
5 故障原因:“故障模式”中只描述了故障的現(xiàn)象今穿,并沒有單獨列出故障原因缤灵。主要原因在于不管什么故障原因,故障現(xiàn)象相同蓝晒,對功能點的影響就相同
6 故障概率:這里的概率就是指某個具體故障原因發(fā)生的概率凤价。例如,磁盤壞道的概率拔创、MySQL bug 的概率利诺、沒有索引的概率。
7 風(fēng)險程度:風(fēng)險程度就是綜合嚴(yán)重程度和故障概率來一起判斷某個故障的最終等級剩燥,風(fēng)險程度 = 嚴(yán)重程度 × 故障概率慢逾。因此可能出現(xiàn)某個故障影響非常嚴(yán)重,但其概率很低灭红,最終來看風(fēng)險程度就低侣滩。
8 已有措施:針對具體的故障原因,系統(tǒng)現(xiàn)在是否提供了某些措施來應(yīng)對变擒,包括:檢測告警君珠、容錯、自恢復(fù)等娇斑。
9 規(guī)避措施:規(guī)避措施指為了降低故障發(fā)生概率而做的一些事情策添,可以是技術(shù)手段,也可以是管理手段毫缆。
10 解決措施:解決措施指為了能夠解決問題而做的一些事情唯竹,一般都是技術(shù)手段
11 后續(xù)規(guī)劃:綜合前面的分析,就可以看出哪些故障我們目前還缺乏對應(yīng)的措施苦丁,哪些已有措施還不夠浸颓,針對這些不足的地方,再結(jié)合風(fēng)險程度進(jìn)行排序,給出后續(xù)的改進(jìn)規(guī)劃产上。這些規(guī)劃既可以是技術(shù)手段棵磷,也可以是管理手段;可以是規(guī)避措施晋涣,也可以是解決措施仪媒。同時需要考慮資源的投入情況,優(yōu)先將風(fēng)險程度高的系統(tǒng)隱患解決姻僧。
舉例
雙機架構(gòu)
存儲高可用方案的本質(zhì)都是通過將數(shù)據(jù)復(fù)制到多個存儲設(shè)備规丽,通過數(shù)據(jù)冗余的方式來實現(xiàn)高可用,其復(fù)雜性主要體現(xiàn)在如何應(yīng)對復(fù)制延遲和中斷導(dǎo)致的數(shù)據(jù)不一致問題撇贺。
主備復(fù)制
其整體架構(gòu)比較簡單赌莺,主備架構(gòu)中的“備機”主要還是起到一個備份作用,并不承擔(dān)實際的業(yè)務(wù)讀寫操作松嘶,如果要把備機改為主機艘狭,需要人工操作。
簡單翠订,易操作巢音。但是浪費備機資源,人工切換時間久尽超。綜合主備復(fù)制架構(gòu)的優(yōu)缺點官撼,內(nèi)部的后臺管理系統(tǒng)使用主備復(fù)制架構(gòu)的情況會比較多,例如學(xué)生管理系統(tǒng)似谁、員工管理系統(tǒng)傲绣、假期管理系統(tǒng)等,因為這類系統(tǒng)的數(shù)據(jù)變更頻率低巩踏,即使在某些場景下丟失數(shù)據(jù)秃诵,也可以通過人工的方式補全。
主從復(fù)制
主機負(fù)責(zé)讀寫操作塞琼,從機只負(fù)責(zé)讀操作菠净,不負(fù)責(zé)寫操作。
主從復(fù)制可能導(dǎo)致數(shù)據(jù)不一致彪杉,客戶端需要辨認(rèn)主從毅往。綜合主從復(fù)制的優(yōu)缺點,一般情況下在讶,寫少讀多的業(yè)務(wù)使用主從復(fù)制的存儲架構(gòu)比較多煞抬。例如,論壇构哺、BBS、新聞網(wǎng)站這類業(yè)務(wù),此類業(yè)務(wù)的讀操作數(shù)量是寫操作數(shù)量的 10 倍甚至 100 倍以上曙强。
雙機切換
主備復(fù)制和主從復(fù)制方案存在兩個共性的問題:主機故障后残拐,無法進(jìn)行寫操作。如果主機無法恢復(fù)碟嘴,需要人工指定新的主機角色溪食。
雙機切換就是為了解決這兩個問題而產(chǎn)生的,包括主備切換和主從切換兩種方案娜扇。簡單來說错沃,這兩個方案就是在原有方案的基礎(chǔ)上增加“切換”功能,即系統(tǒng)自動決定主機角色雀瓢,并完成角色切換枢析。
設(shè)計要點:
1、主備間狀態(tài)判斷:狀態(tài)傳遞的渠道刃麸,以及狀態(tài)檢測的內(nèi)容醒叁。
2、切換決策:切換時機泊业、切換策略把沼、自動程度。
3吁伺、數(shù)據(jù)沖突解決:當(dāng)原有故障的主機恢復(fù)后饮睬,新舊主機之間可能存在數(shù)據(jù)沖突。
常見架構(gòu):
1篮奄、互連式:指主備機直接建立狀態(tài)傳遞的渠道
2捆愁、中介式:在主備兩者之外引入第三方中介,主備機之間不直接連接宦搬,而都去連接中介牙瓢,并且通過中介來傳遞狀態(tài)信息.雖然中介式架構(gòu)在狀態(tài)傳遞和狀態(tài)決策上更加簡單,但并不意味著這種優(yōu)點是沒有代價的间校,其關(guān)鍵代價就在于如何實現(xiàn)中介本身的高可用矾克。如果中介自己宕機了,整個系統(tǒng)就進(jìn)入了雙備的狀態(tài)憔足,寫操作相關(guān)的業(yè)務(wù)就不可用了胁附。
3、模擬式:指主備機之間并不傳遞任何狀態(tài)數(shù)據(jù)滓彰,而是備機模擬成一個客戶端控妻,向主機發(fā)起模擬的讀寫操作,根據(jù)讀寫操作的響應(yīng)情況來判斷主機的狀態(tài)揭绑。
4弓候、主主復(fù)制:指的是兩臺機器都是主機郎哭,互相將數(shù)據(jù)復(fù)制給對方,客戶端可以任意挑選其中一臺機器進(jìn)行讀寫操作菇存。主復(fù)制架構(gòu)對數(shù)據(jù)的設(shè)計有嚴(yán)格的要求夸研,一般適合于那些臨時性、可丟失依鸥、可覆蓋的數(shù)據(jù)場景亥至。
數(shù)據(jù)集群
主備、主從贱迟、主主架構(gòu)本質(zhì)上都有一個隱含的假設(shè):主機能夠存儲所有數(shù)據(jù)姐扮,但主機本身的存儲和處理能力肯定是有極限的。
數(shù)據(jù)集中集群
數(shù)據(jù)集中集群與主備衣吠、主從這類架構(gòu)相似茶敏,我們也可以稱數(shù)據(jù)集中集群為 1 主多備或者 1 主多從。需要考慮:主機如何將數(shù)據(jù)復(fù)制給備機蒸播;備機如何檢測主機狀態(tài)睡榆;主機故障后,如何決定新的主機袍榆。
目前開源的數(shù)據(jù)集中集群以 ZooKeeper 為典型胀屿,ZooKeeper 通過 ZAB 算法來解決上述提到的幾個問題,但 ZAB 算法的復(fù)雜度是很高的包雀。
數(shù)據(jù)分散集群
多個服務(wù)器組成一個集群宿崭,每臺服務(wù)器都會負(fù)責(zé)存儲一部分?jǐn)?shù)據(jù);同時才写,為了提升硬件利用率葡兑,每臺服務(wù)器又會備份一部分?jǐn)?shù)據(jù)赞草。數(shù)據(jù)分散集群的復(fù)雜點在于如何將數(shù)據(jù)分配到不同的服務(wù)器上讹堤,算法需要考慮均衡性、容錯性厨疙、可伸縮性洲守。
數(shù)據(jù)分散集群中的每臺服務(wù)器都可以處理讀寫請求,因此不存在數(shù)據(jù)集中集群中負(fù)責(zé)寫的主機那樣的角色沾凄。但在數(shù)據(jù)分散集群中梗醇,必須有一個角色來負(fù)責(zé)執(zhí)行數(shù)據(jù)分配算法,這個角色可以是獨立的一臺服務(wù)器撒蟀,也可以是集群自己選舉出的一臺服務(wù)器叙谨。
Hadoop 的實現(xiàn)就是獨立的服務(wù)器負(fù)責(zé)數(shù)據(jù)分區(qū)的分配,這臺服務(wù)器叫作 Namenode保屯。Elasticsearch 集群通過選舉一臺服務(wù)器來做數(shù)據(jù)分區(qū)的分配手负,叫作 master node
數(shù)據(jù)分區(qū)
數(shù)據(jù)分區(qū)指將數(shù)據(jù)按照一定的規(guī)則進(jìn)行分區(qū)涤垫,不同分區(qū)分布在不同的地理位置上,每個分區(qū)存儲一部分?jǐn)?shù)據(jù)虫溜,通過這種方式來規(guī)避地理級別的故障所造成的巨大影響雹姊。
需要考慮:數(shù)據(jù)量股缸;分區(qū)規(guī)則衡楞;復(fù)制規(guī)則。常見的分區(qū)復(fù)制規(guī)則有三種:集中式敦姻、互備式和獨立式瘾境。
集中式備份指存在一個總的備份中心,所有的分區(qū)都將數(shù)據(jù)備份到備份中心
互備式備份指每個分區(qū)備份另外一個分區(qū)的數(shù)據(jù)
獨立式備份指每個分區(qū)自己有獨立的備份中心
設(shè)計高可用架構(gòu)
計算高可用的主要設(shè)計目標(biāo)是當(dāng)出現(xiàn)部分硬件損壞時镰惦,計算任務(wù)能夠繼續(xù)正常運行迷守。因此計算高可用的本質(zhì)是通過冗余來規(guī)避部分故障的風(fēng)險.計算高可用架構(gòu)的設(shè)計復(fù)雜度主要體現(xiàn)在任務(wù)管理方面,即當(dāng)任務(wù)在某臺服務(wù)器上執(zhí)行失敗后旺入,如何將任務(wù)重新分配到新的服務(wù)器進(jìn)行執(zhí)行兑凿。
設(shè)計關(guān)鍵點:
1. 哪些服務(wù)器可以執(zhí)行任務(wù);第一種方式和計算高性能中的集群類似茵瘾,每個服務(wù)器都可以執(zhí)行任務(wù)礼华。第二種方式和存儲高可用中的集群類似,只有特定服務(wù)器(通常叫“主機”)可以執(zhí)行任務(wù)拗秘。
2. 任務(wù)如何重新執(zhí)行圣絮。第一種策略是對于已經(jīng)分配的任務(wù)即使執(zhí)行失敗也不做任何處理,系統(tǒng)只需要保證新的任務(wù)能夠分配到其他非故障服務(wù)器上執(zhí)行即可雕旨。第二種策略是設(shè)計一個任務(wù)管理器來管理需要執(zhí)行的計算任務(wù)扮匠,服務(wù)器執(zhí)行完任務(wù)后,需要向任務(wù)管理器反饋任務(wù)執(zhí)行結(jié)果凡涩,任務(wù)管理器根據(jù)任務(wù)執(zhí)行結(jié)果來決定是否需要將任務(wù)重新分配到另外的服務(wù)器上執(zhí)行棒搜。
常見高可用架構(gòu):主備、主從和集群活箕。
計算高可用無狀態(tài)力麸,存儲高考應(yīng)用有狀態(tài)。
異地多活架構(gòu)
異地多活架構(gòu)的關(guān)鍵點就是異地讹蘑、多活末盔,其中異地就是指地理位置上不同的地方,類似于“不要把雞蛋都放在同一籃子里”座慰;多活就是指不同地理位置上的系統(tǒng)都能夠提供業(yè)務(wù)服務(wù)陨舱,這里的“活”是活動、活躍的意思版仔。
架構(gòu)模式
1. 同城異區(qū):指的是將業(yè)務(wù)部署在同一個城市不同區(qū)的多個機房游盲。結(jié)合復(fù)雜度误墓、成本、故障發(fā)生概率來綜合考慮益缎,同城異區(qū)是應(yīng)對機房級別故障的最優(yōu)架構(gòu)谜慌。
2. 跨城異地:指的是業(yè)務(wù)部署在不同城市的多個機房,而且距離最好要遠(yuǎn)一些莺奔⌒婪叮跨城異地距離較遠(yuǎn)帶來的網(wǎng)絡(luò)傳輸延遲問題,給異地多活架構(gòu)設(shè)計帶來了復(fù)雜性令哟,如果要做到真正意義上的多活恼琼,業(yè)務(wù)系統(tǒng)需要考慮部署在不同地點的兩個機房,在數(shù)據(jù)短時間不一致的情況下屏富,還能夠正常提供業(yè)務(wù)晴竞。這就引入了一個看似矛盾的地方:數(shù)據(jù)不一致業(yè)務(wù)肯定不會正常,但跨城異地肯定會導(dǎo)致數(shù)據(jù)不一致狠半。根據(jù)數(shù)據(jù)的特性來做不同的架構(gòu)噩死。如果是強一致性要求的數(shù)據(jù),例如銀行存款余額神年、支付寶余額等已维,這類數(shù)據(jù)實際上是無法做到跨城異地多活的。
3. 跨國異地:指的是業(yè)務(wù)部署在不同國家的多個機房
設(shè)計技巧
技巧 1:保證核心業(yè)務(wù)的異地多活瘤袖。
技巧 2:保證核心數(shù)據(jù)最終一致性衣摩。盡量減少異地多活機房的距離,搭建高速網(wǎng)絡(luò)捂敌;盡量減少數(shù)據(jù)同步艾扮,只同步核心業(yè)務(wù)相關(guān)的數(shù)據(jù);保證最終一致性占婉,不保證實時一致性
技巧 3:采用多種手段同步數(shù)據(jù)泡嘴。拓開思路,避免只使用存儲系統(tǒng)的同步功能逆济,可以將多種手段配合存儲系統(tǒng)的同步來使用酌予,甚至可以不采用存儲系統(tǒng)的同步方案,改用自己的同步方案奖慌。比如消息隊列方式抛虫、二次讀取方式、存儲系統(tǒng)同步方式简僧、回源讀取方式建椰、重新生成數(shù)據(jù)方式
技巧 4:只保證絕大部分用戶的異地多活
異地多活設(shè)計的理念可以總結(jié)為一句話:采用多種手段,保證絕大部分用戶的核心業(yè)務(wù)異地多活岛马!
設(shè)計步驟
第 1 步:業(yè)務(wù)分級:按照一定的標(biāo)準(zhǔn)將業(yè)務(wù)進(jìn)行分級棉姐,挑選出核心的業(yè)務(wù)屠列,只為核心業(yè)務(wù)設(shè)計異地多活,降低方案整體復(fù)雜度和實現(xiàn)成本伞矩。比如訪問量大的業(yè)務(wù)笛洛、核心業(yè)務(wù)、產(chǎn)生大量收入的業(yè)務(wù)
第 2 步:數(shù)據(jù)分類:乃坤,目的在于識別所有的數(shù)據(jù)及數(shù)據(jù)特征苛让,這些數(shù)據(jù)特征會影響后面的方案設(shè)計。分析維度有數(shù)據(jù)量侥袜、唯一性蝌诡、實時性、可丟失性枫吧、可恢復(fù)性
第 3 步:數(shù)據(jù)同步。存儲系統(tǒng)同步宇色、消息隊列同步九杂、重復(fù)生成。
第 4 步:異常處理:異常處理就是假設(shè)在出現(xiàn)這些問題時宣蠕,系統(tǒng)將采取什么措施來應(yīng)對例隆,措施:1. 多通道同步,采取多種方式來進(jìn)行數(shù)據(jù)同步抢蚀;2. 同步和訪問結(jié)合镀层,指異地機房通過系統(tǒng)的接口來進(jìn)行數(shù)據(jù)訪問;3. 日志記錄:要用于用戶故障恢復(fù)后對數(shù)據(jù)進(jìn)行恢復(fù)皿曲,其主要方式是每個關(guān)鍵操作前后都記錄相關(guān)一條日志唱逢,然后將日志保存在一個獨立的地方,當(dāng)故障恢復(fù)后屋休,拿出日志跟數(shù)據(jù)進(jìn)行對比坞古,對數(shù)據(jù)進(jìn)行修復(fù);4. 用戶補償
接口級故障應(yīng)對
接口級故障的典型表現(xiàn)就是系統(tǒng)并沒有宕機劫樟,網(wǎng)絡(luò)也沒有中斷痪枫,但業(yè)務(wù)卻出現(xiàn)問題了。
導(dǎo)致接口級故障的原因一般有下面幾種:
內(nèi)部原因:程序 bug 導(dǎo)致死循環(huán)叠艳,某個接口導(dǎo)致數(shù)據(jù)庫慢查詢奶陈,程序邏輯不完善導(dǎo)致耗盡內(nèi)存等。
外部原因:黑客攻擊附较、促銷或者搶購引入了超出平時幾倍甚至幾十倍的用戶吃粒,第三方系統(tǒng)大量請求,第三方系統(tǒng)響應(yīng)緩慢等翅睛。
解決接口級故障的核心思想和異地多活基本類似:優(yōu)先保證核心業(yè)務(wù)和優(yōu)先保證絕大部分用戶声搁。
1黑竞、降級:指系統(tǒng)將某些業(yè)務(wù)或者接口的功能降低,可以是只提供部分功能疏旨,也可以是完全停掉所有功能很魂。降級的核心思想就是丟車保帥,優(yōu)先保證核心業(yè)務(wù)檐涝。降級方式一般有系統(tǒng)后門降級和獨立降級系統(tǒng)遏匆。
2、熔斷:降級的目的是應(yīng)對系統(tǒng)自身的故障谁榜,而熔斷的目的是應(yīng)對依賴的外部系統(tǒng)故障的情況幅聘。熔斷機制實現(xiàn)的關(guān)鍵是需要有一個統(tǒng)一的 API 調(diào)用層,由 API 調(diào)用層來進(jìn)行采樣或者統(tǒng)計窃植,如果接口調(diào)用散落在代碼各處就沒法進(jìn)行統(tǒng)一處理了帝蒿。斷機制實現(xiàn)的另外一個關(guān)鍵是閾值的設(shè)計。
3巷怜、限流葛超。指只允許系統(tǒng)能夠承受的訪問量進(jìn)來,超出系統(tǒng)訪問能力的請求將被丟棄延塑。限流一般都是系統(tǒng)內(nèi)實現(xiàn)的绣张,常見的限流方式可以分為兩類:基于請求限流和基于資源限流。
4关带、排隊侥涵。排隊實際上是限流的一個變種,限流是直接拒絕用戶宋雏,排隊是讓用戶等待一段時間芜飘,全世界最有名的排隊當(dāng)屬 12306 網(wǎng)站排隊了。