如何保證服務(wù)的高可用性 HA(High Availability)?
高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指赖晶,通過(guò)設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間律适。方法論上,高可用是通過(guò)冗余+自動(dòng)故障轉(zhuǎn)移來(lái)實(shí)現(xiàn)的遏插。
我們都知道捂贿,單點(diǎn)是系統(tǒng)高可用的大敵,單點(diǎn)往往是系統(tǒng)高可用最大的風(fēng)險(xiǎn)和敵人胳嘲,應(yīng)該盡量在系統(tǒng)設(shè)計(jì)的過(guò)程中避免單點(diǎn)厂僧。
方法論上,高可用保證的原則是“集群化”了牛,或者叫“冗余”:只有一個(gè)單點(diǎn)颜屠,掛了服務(wù)會(huì)受影響;如果有冗余備份鹰祸,掛了還有其他backup能夠頂上甫窟。
保證系統(tǒng)高可用,架構(gòu)設(shè)計(jì)的核心準(zhǔn)則是:冗余蛙婴。有了冗余之后粗井,還不夠,每次出現(xiàn)故障需要人工介入恢復(fù)勢(shì)必會(huì)增加系統(tǒng)的不可服務(wù)實(shí)踐街图。所以浇衬,又往往是通過(guò)“自動(dòng)故障轉(zhuǎn)移”來(lái)實(shí)現(xiàn)系統(tǒng)的高可用。
互聯(lián)網(wǎng)架構(gòu)中台夺,通常是通過(guò)冗余+自動(dòng)故障轉(zhuǎn)移來(lái)保證系統(tǒng)的高可用特性径玖。
從實(shí)戰(zhàn)經(jīng)驗(yàn)來(lái)看如何保證服務(wù)的高可用性:
一:服務(wù)架構(gòu)層面
(1)根據(jù)服務(wù)對(duì)象地區(qū),考慮節(jié)點(diǎn)分布
(2)避免服務(wù)單點(diǎn)颤介,至少雙機(jī)
(3)防止代碼之間干擾梳星,避免穩(wěn)定代碼和迭代頻繁代碼放在一起赞赖,可以按照業(yè)務(wù)或者功能做服務(wù)分離。
(4)防止服務(wù)之間干擾冤灾,重要服務(wù)最好做隔離前域,單獨(dú)部署
(5)防止數(shù)據(jù)庫(kù)壓力過(guò)大,不然韵吨,可能產(chǎn)生雪崩效應(yīng)匿垄,可以根據(jù)業(yè)務(wù)特點(diǎn)做分庫(kù)分表,加緩存等處理.
(6)保證服務(wù)能力buffer, 盡量有冗余處理能力.
二:運(yùn)維層面
(1)服務(wù)監(jiān)控归粉。比如磁盤椿疗、CPU、網(wǎng)絡(luò)
(2)監(jiān)控多級(jí)別糠悼,到達(dá)不同級(jí)別給出不同警告
三:代碼層面
(1)保證代碼異常不會(huì)導(dǎo)致服務(wù)掛掉
(2)保證服務(wù)是無(wú)狀態(tài)的届榄,可以支持水平擴(kuò)展
數(shù)據(jù)的水平擴(kuò)展
分層高可用架構(gòu)實(shí)踐
常見互聯(lián)網(wǎng)分布式架構(gòu)如上,分為:
(1)客戶端層:典型調(diào)用方是瀏覽器browser或者手機(jī)應(yīng)用APP
(2)反向代理層:系統(tǒng)入口倔喂,反向代理
(3)站點(diǎn)應(yīng)用層:實(shí)現(xiàn)核心應(yīng)用邏輯铝条,返回html或者json
(4)服務(wù)層:如果實(shí)現(xiàn)了服務(wù)化,就有這一層
(5)數(shù)據(jù)-緩存層:緩存加速訪問(wèn)存儲(chǔ)
(6)數(shù)據(jù)-數(shù)據(jù)庫(kù)層:數(shù)據(jù)庫(kù)固化數(shù)據(jù)存儲(chǔ)
整個(gè)系統(tǒng)的高可用席噩,又是通過(guò)每一層的冗余+自動(dòng)故障轉(zhuǎn)移來(lái)綜合實(shí)現(xiàn)的班缰。
1. 客戶端層->反向代理層的高可用
客戶端層到反向代理層的高可用,是通過(guò)反向代理層的冗余來(lái)實(shí)現(xiàn)的悼枢。以nginx為例:有兩臺(tái)nginx埠忘,一臺(tái)對(duì)線上提供服務(wù),另一臺(tái)冗余以保證高可用萧芙,常見的實(shí)踐是keepalived存活探測(cè)给梅,相同virtual IP提供服務(wù)。
自動(dòng)故障轉(zhuǎn)移:當(dāng)nginx掛了的時(shí)候双揪,keepalived能夠探測(cè)到动羽,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到shadow-nginx渔期,由于使用的是相同的virtual IP运吓,這個(gè)切換過(guò)程對(duì)調(diào)用方是透明的。
2. 反向代理層->站點(diǎn)層的高可用
反向代理層到站點(diǎn)層的高可用疯趟,是通過(guò)站點(diǎn)層的冗余來(lái)實(shí)現(xiàn)的拘哨。假設(shè)反向代理層是nginx,nginx.conf里能夠配置多個(gè)web后端信峻,并且nginx能夠探測(cè)到多個(gè)后端的存活性倦青。
自動(dòng)故障轉(zhuǎn)移:當(dāng)web-server掛了的時(shí)候,nginx能夠探測(cè)到盹舞,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移产镐,將流量自動(dòng)遷移到其他的web-server隘庄,整個(gè)過(guò)程由nginx自動(dòng)完成,對(duì)調(diào)用方是透明的癣亚。
3. 站點(diǎn)層->服務(wù)層的高可用
站點(diǎn)層到服務(wù)層的高可用丑掺,是通過(guò)服務(wù)層的冗余來(lái)實(shí)現(xiàn)的∈鑫恚“服務(wù)連接池”會(huì)建立與下游服務(wù)多個(gè)連接街州,每次請(qǐng)求會(huì)“隨機(jī)”選取連接來(lái)訪問(wèn)下游服務(wù)。
自動(dòng)故障轉(zhuǎn)移:當(dāng)service掛了的時(shí)候玻孟,service-connection-pool能夠探測(cè)到唆缴,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到其他的service取募,整個(gè)過(guò)程由連接池自動(dòng)完成琐谤,對(duì)調(diào)用方是透明的(所以說(shuō)RPC-client中的服務(wù)連接池是很重要的基礎(chǔ)組件)。
4. 服務(wù)層>緩存層的高可用
服務(wù)層到緩存層的高可用玩敏,是通過(guò)緩存數(shù)據(jù)的冗余來(lái)實(shí)現(xiàn)的。 緩存層的數(shù)據(jù)冗余又有幾種方式:第一種是利用客戶端的封裝质礼,service對(duì)cache進(jìn)行雙讀或者雙寫旺聚。
緩存層也可以通過(guò)支持主從同步的緩存集群來(lái)解決緩存層的高可用問(wèn)題。
以redis為例眶蕉,redis天然支持主從同步砰粹,redis官方也有sentinel哨兵機(jī)制,來(lái)做redis的存活性檢測(cè)造挽。
自動(dòng)故障轉(zhuǎn)移:當(dāng)redis主掛了的時(shí)候碱璃,sentinel能夠探測(cè)到,會(huì)通知調(diào)用方訪問(wèn)新的redis饭入,整個(gè)過(guò)程由sentinel和redis集群配合完成嵌器,對(duì)調(diào)用方是透明的。
說(shuō)完緩存的高可用谐丢,這里要多說(shuō)一句爽航,業(yè)務(wù)對(duì)緩存并不一定有“高可用”要求,更多的對(duì)緩存的使用場(chǎng)景乾忱,是用來(lái)“加速數(shù)據(jù)訪問(wèn)”:把一部分?jǐn)?shù)據(jù)放到緩存里讥珍,如果緩存掛了或者緩存沒有命中,是可以去后端的數(shù)據(jù)庫(kù)中再取數(shù)據(jù)的窄瘟。
這類允許“cache miss”的業(yè)務(wù)場(chǎng)景衷佃,緩存架構(gòu)的建議是:
將kv緩存封裝成服務(wù)集群,上游設(shè)置一個(gè)代理(代理可以用集群的方式保證高可用)蹄葱,代理的后端根據(jù)緩存訪問(wèn)的key水平切分成若干個(gè)實(shí)例氏义,每個(gè)實(shí)例的訪問(wèn)并不做高可用衰腌。
緩存實(shí)例掛了屏蔽:當(dāng)有水平切分的實(shí)例掛掉時(shí),代理層直接返回cache miss觅赊,此時(shí)緩存掛掉對(duì)調(diào)用方也是透明的右蕊。key水平切分實(shí)例減少,不建議做re-hash吮螺,這樣容易引發(fā)緩存數(shù)據(jù)的不一致饶囚。
5. 服務(wù)層>數(shù)據(jù)庫(kù)層的高可用
大部分互聯(lián)網(wǎng)技術(shù),數(shù)據(jù)庫(kù)層都用了“主從同步鸠补,讀寫分離”架構(gòu)萝风,所以數(shù)據(jù)庫(kù)層的高可用,又分為“讀庫(kù)高可用”與“寫庫(kù)高可用”兩類紫岩。
服務(wù)層>數(shù)據(jù)庫(kù)層“讀”的高可用
服務(wù)層到數(shù)據(jù)庫(kù)讀的高可用规惰,是通過(guò)讀庫(kù)的冗余來(lái)實(shí)現(xiàn)的。
既然冗余了讀庫(kù)泉蝌,一般來(lái)說(shuō)就至少有2個(gè)從庫(kù)歇万,“數(shù)據(jù)庫(kù)連接池”會(huì)建立與讀庫(kù)多個(gè)連接,每次請(qǐng)求會(huì)路由到這些讀庫(kù)勋陪。
自動(dòng)故障轉(zhuǎn)移:當(dāng)讀庫(kù)掛了的時(shí)候贪磺,db-connection-pool能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移诅愚,將流量自動(dòng)遷移到其他的讀庫(kù)寒锚,整個(gè)過(guò)程由連接池自動(dòng)完成,對(duì)調(diào)用方是透明的(所以說(shuō)DAO中的數(shù)據(jù)庫(kù)連接池是很重要的基礎(chǔ)組件)违孝。
服務(wù)層>數(shù)據(jù)庫(kù)層“寫”的高可用
服務(wù)層到數(shù)據(jù)庫(kù)寫的高可用刹前,是通過(guò)寫庫(kù)的冗余來(lái)實(shí)現(xiàn)的。
以mysql為例雌桑,可以設(shè)置兩個(gè)mysql雙主同步喇喉,一臺(tái)對(duì)線上提供服務(wù),另一臺(tái)冗余以保證高可用筹燕,常見的實(shí)踐是keepalived存活探測(cè)轧飞,相同virtual IP提供服務(wù)。
自動(dòng)故障轉(zhuǎn)移:
當(dāng)寫庫(kù)掛了的時(shí)候撒踪,keepalived能夠探測(cè)到过咬,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到shadow-db-master制妄,由于使用的是相同的virtual IP掸绞,這個(gè)切換過(guò)程對(duì)調(diào)用方是透明的。
小結(jié):
整個(gè)互聯(lián)網(wǎng)分層系統(tǒng)架構(gòu)的高可用,又是通過(guò)每一層的冗余+自動(dòng)故障轉(zhuǎn)移來(lái)綜合實(shí)現(xiàn)的衔掸,具體的:
(1)客戶端層到反向代理層的高可用烫幕,是通過(guò)反向代理層的冗余實(shí)現(xiàn)的,常見實(shí)踐是keepalived + virtual IP自動(dòng)故障轉(zhuǎn)移敞映。
(2)反向代理層到站點(diǎn)層的高可用较曼,是通過(guò)站點(diǎn)層的冗余實(shí)現(xiàn)的,常見實(shí)踐是nginx與web-server之間的存活性探測(cè)與自動(dòng)故障轉(zhuǎn)移振愿。
(3)站點(diǎn)層到服務(wù)層的高可用捷犹,是通過(guò)服務(wù)層的冗余實(shí)現(xiàn)的,常見實(shí)踐是通過(guò)service-connection-pool來(lái)保證自動(dòng)故障轉(zhuǎn)移冕末。
(4)服務(wù)層到緩存層的高可用萍歉,是通過(guò)緩存數(shù)據(jù)的冗余實(shí)現(xiàn)的,常見實(shí)踐是緩存客戶端雙讀雙寫档桃,或者利用緩存集群的主從數(shù)據(jù)同步與sentinel彼浠活與自動(dòng)故障轉(zhuǎn)移撒犀;更多的業(yè)務(wù)場(chǎng)景创千,對(duì)緩存沒有高可用要求间学,可以使用緩存服務(wù)化來(lái)對(duì)調(diào)用方屏蔽底層復(fù)雜性。
(5)服務(wù)層到數(shù)據(jù)庫(kù)“讀”的高可用仅炊,是通過(guò)讀庫(kù)的冗余實(shí)現(xiàn)的斗幼,常見實(shí)踐是通過(guò)db-connection-pool來(lái)保證自動(dòng)故障轉(zhuǎn)移。
(6)服務(wù)層到數(shù)據(jù)庫(kù)“寫”的高可用抚垄,是通過(guò)寫庫(kù)的冗余實(shí)現(xiàn)的,常見實(shí)踐是keepalived + virtual IP自動(dòng)故障轉(zhuǎn)移谋逻。
SLA 是什么?
SLA:服務(wù)等級(jí)協(xié)議(簡(jiǎn)稱:SLA呆馁,全稱:service level agreement)。是在一定開銷下為保障服務(wù)的性能和可用性毁兆,服務(wù)提供商與用戶間定義的一種雙方認(rèn)可的協(xié)定浙滤。通常這個(gè)開銷是驅(qū)動(dòng)提供服務(wù)質(zhì)量的主要因素。
SLA的定義來(lái)源百度气堕,這到底是什么意思呢纺腊?
我們平常經(jīng)常看到互聯(lián)網(wǎng)公司喊口號(hào)茎芭,我們今年一定要做到3個(gè)9揖膜、4個(gè)9,即99.9%梅桩、99.99%壹粟,甚至還有5個(gè)9,即99.999%宿百。
這么多9代表什么意思呢趁仙?
首先洪添,SLA的概念,對(duì)互聯(lián)網(wǎng)公司來(lái)說(shuō)就是網(wǎng)站服務(wù)可用性的一個(gè)保證雀费。9越多代表全年服務(wù)可用時(shí)間越長(zhǎng)服務(wù)更可靠干奢,停機(jī)時(shí)間越短,反之亦然盏袄。
這么多9是怎么計(jì)算的呢忿峻?
全年拿365天做計(jì)算吧,看看幾個(gè)9要停機(jī)多久時(shí)間做能才能達(dá)到貌矿!
1年 = 365天 = 8760小時(shí)
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小時(shí)
99.99 = 8760 * 0.0001 = 0.876小時(shí) = 0.876 * 60 = 52.6分鐘
99.999 = 8760 * 0.00001 = 0.0876小時(shí) = 0.0876 * 60 = 5.26分鐘
從以上看來(lái)炭菌,全年停機(jī)5.26分鐘才能做到99.999%,即5個(gè)9逛漫。依此類推黑低,要達(dá)到6個(gè)9及更多9,可說(shuō)是非常難了吧酌毡。
怎么做到更多的9?
每個(gè)公司對(duì)幾個(gè)9的定義都不一樣克握,互聯(lián)網(wǎng)公司至少都是99.99吧。像一些政府網(wǎng)站枷踏,如社保公積金等菩暗,經(jīng)常故障服務(wù)不可用,能做到99.9就不錯(cuò)了旭蠕。
如果我們提供的服務(wù)可用性越低停团,意味著造成的損失也越大,別的不說(shuō)掏熬,如果是特別重要的時(shí)刻佑稠,或許就在某一分鐘,你可能就會(huì)因服務(wù)不可用而丟掉一筆大的訂單旗芬,這都是始料未及的舌胶。所以,只要盡可能的提升SLA可用性才能最大化的提高企業(yè)生產(chǎn)力疮丛。
要做到更多的9幔嫂,就要不斷的監(jiān)控自己的服務(wù),服務(wù)掛掉能及時(shí)恢復(fù)服務(wù)誊薄。就像開車出遠(yuǎn)門履恩,首先得檢查輪胎,同時(shí)還得準(zhǔn)備一個(gè)備胎一樣的道理∠疚荩現(xiàn)在的產(chǎn)品和系統(tǒng)都非常的復(fù)雜似袁,彼此連接依賴越來(lái)越復(fù)雜,為了整體的高速運(yùn)轉(zhuǎn),對(duì)每個(gè)部件的穩(wěn)定性越來(lái)越高昙衅,越來(lái)越精密扬霜,發(fā)展到一定程度,人力已經(jīng)無(wú)法掌控而涉,任何一個(gè)組件出異常都有可能牽一發(fā)而動(dòng)全身著瓶,影響全局。每個(gè)部件的穩(wěn)定性和精密程度決定了整體的工程質(zhì)量啼县,也決定了整體的發(fā)展速度材原。
定義SLI
SLI, Service Level Indicator 關(guān)鍵量化指標(biāo).
SLI關(guān)注下面五點(diǎn):
要測(cè)量的指標(biāo)是什么?
測(cè)量時(shí)的系統(tǒng)狀態(tài)季眷?
如何匯總處理測(cè)量的指標(biāo)余蟹?
測(cè)量指標(biāo)能否準(zhǔn)確描述服務(wù)質(zhì)量?
測(cè)量指標(biāo)的可靠度(trust worthy)子刮?
SLO,Service-Level Objective 服務(wù)等級(jí)目標(biāo),指定了服務(wù)所提供功能的一種期望狀態(tài)威酒。
一個(gè)有明確SLA的服務(wù)最理想的運(yùn)行狀態(tài)是: 增加額外資源來(lái)改進(jìn)系統(tǒng)所帶來(lái)的收益小于把該資源投給其他服務(wù)所帶來(lái)的收益。
一個(gè)簡(jiǎn)單的例子就是某服務(wù)可用性從99.9%提高到99.99%所需要的資源和帶來(lái)的收益之比挺峡,是決定該服務(wù)是否應(yīng)該提供4個(gè)9的重要依據(jù)葵孤。
SLA的計(jì)算方式,是使用正常運(yùn)行時(shí)間/(正常運(yùn)行時(shí)間+故障時(shí)間)橱赠,當(dāng)指標(biāo)為99.99的時(shí)候尤仍,每年的停機(jī)時(shí)間只有52.26分鐘。狭姨。宰啦。停機(jī)時(shí)間又分為兩種,一種是計(jì)劃內(nèi)停機(jī)時(shí)間饼拍,一種是計(jì)劃外停機(jī)時(shí)間绑莺,而運(yùn)維則主要關(guān)注計(jì)劃外停機(jī)時(shí)間。
在分布式系統(tǒng)中用時(shí)間指標(biāo)來(lái)衡量系統(tǒng)的可用性惕耕,簡(jiǎn)直就是無(wú)效的。分布式系統(tǒng)中诫肠,部分可用的情況太多了司澎,例如后端有兩個(gè)rs,而一個(gè)rs壞了栋豫,那么就會(huì)有百分之五十的請(qǐng)求失敗挤安。這種情況SLA怎么來(lái)計(jì)算?扣時(shí)間還是不扣呢丧鸯?
在分布式系統(tǒng)中蛤铜,一般使用請(qǐng)求的成功率來(lái)計(jì)算SLA,也就是
SLA=請(qǐng)求成功/(請(qǐng)求成功+請(qǐng)求失敗)
在使用這種計(jì)算方式的時(shí)候围肥,無(wú)論你是前端的web服務(wù)剿干,還是后端的存儲(chǔ)服務(wù),還是離線服務(wù)穆刻,都是可以很好的計(jì)算置尔。畢竟是一個(gè)可以量化的數(shù)據(jù)。在定義SLA的時(shí)候氢伟,順便可以定義出監(jiān)控的主要指標(biāo)榜轿,例如請(qǐng)求的延遲,吞吐量等朵锣。
在進(jìn)行定義這些關(guān)鍵性指標(biāo)的時(shí)候谬盐,也就是定義哪些請(qǐng)求成功,哪些請(qǐng)求失敗诚些,是有很大關(guān)系的飞傀,例如支付寶的核心功能是支付,如果支付功能可以泣刹,那么就滿足了大多數(shù)的高可用助析,而所謂的其他的一些附加功能,例如城市服務(wù)椅您,也影響不了多少人外冀,當(dāng)然, 也要看基數(shù)。
在提供服務(wù)的時(shí)候掀泳,服務(wù)可以分為兩種類型雪隧,一種類型是面對(duì)消費(fèi)者的服務(wù),一種是基礎(chǔ)設(shè)施服務(wù)员舵,例如微信就是面對(duì)消費(fèi)者的服務(wù)脑沿,而各種云平臺(tái)則是基礎(chǔ)設(shè)施服務(wù)。
當(dāng)面對(duì)消費(fèi)者服務(wù)的時(shí)候马僻,一般會(huì)有對(duì)應(yīng)的產(chǎn)品經(jīng)理庄拇,那么可以由產(chǎn)品經(jīng)理定義各種關(guān)鍵性的指標(biāo)來(lái)衡量一個(gè)服務(wù)的可用性,例如微信在定義的時(shí)候韭邓,可以使用發(fā)送消息的成功率措近;消費(fèi)者服務(wù),可以參考競(jìng)爭(zhēng)對(duì)手的可用性水平女淑;免費(fèi)的還是收費(fèi)的瞭郑;有沒有替代產(chǎn)品可以使用。在這個(gè)時(shí)候鸭你,其實(shí)還可以定義服務(wù)降級(jí)屈张,例如微信最常用的功能是發(fā)送消息和朋友圈擒权,這兩個(gè)服務(wù)的可用性可以定義為四個(gè)9,而對(duì)于所謂的搖一搖阁谆,附近等服務(wù)碳抄,可以定義低等級(jí)的可用性,例如兩個(gè)9笛厦,這種構(gòu)建方式纳鼎,可以很大程度上節(jié)省成本,畢竟物理服務(wù)器冗余才是提高可用性的唯一方式裳凸。
在消費(fèi)者服務(wù)類型中贱鄙,還需要注意每個(gè)請(qǐng)求的成敗后果是不一樣的,例如系統(tǒng)注冊(cè)姨谷,或者是一個(gè)信息發(fā)送失敗逗宁,系統(tǒng)注冊(cè)失敗,可能就不用這個(gè)系統(tǒng)了梦湘,而一個(gè)信息發(fā)送失敗瞎颗,用戶可能認(rèn)為是自己的網(wǎng)絡(luò)有問(wèn)題。捌议。哼拔。
在提供基礎(chǔ)設(shè)施服務(wù)的時(shí)候,一般分為兩個(gè)部分瓣颅,一個(gè)部分是直接提供給用戶使用的功能倦逐,例如提供VM訪問(wèn)服務(wù);一個(gè)部分是平臺(tái)的管控功能宫补,例如云平臺(tái)里面創(chuàng)建虛擬機(jī)檬姥,創(chuàng)建SLB等。這兩個(gè)的失敗是完全不一樣的粉怕,用戶的功能出了問(wèn)題健民,那么就是故障了,但是管控服務(wù)出現(xiàn)問(wèn)題贫贝,只要及時(shí)修好就行了秉犹,這種一般使用的評(píng)率很少,所以請(qǐng)求數(shù)量也不多稚晚。
亞馬遜的S3服務(wù)水平協(xié)議
可用性保證(Service Commitment )
保證“每月99.9%的正常運(yùn)行時(shí)間”凤优。S3 SLA保證一個(gè)月里所有以5分鐘為單位的時(shí)間片中,平均有99.9%是可用的蜈彼。SLA容許的最遭情況等于每月有40分鐘不可用。
服務(wù)補(bǔ)償
如果達(dá)不到SLA的承諾俺驶,Amazon會(huì)提供服務(wù)補(bǔ)償幸逆,如果達(dá)不到 99.9%的服務(wù)水平棍辕,那么Amazon將減免下個(gè)月10%的費(fèi)用。如果可用性下降到99.0%以下还绘,換算后相當(dāng)于一個(gè)月內(nèi)至少有將近7個(gè)小時(shí)無(wú)法服務(wù)楚昭, 那么Amazon將減免25%的費(fèi)用。
假設(shè)一個(gè)用戶存放了500G的數(shù)據(jù)拍顷。把500G數(shù)據(jù)放進(jìn)S3并且在一個(gè)月內(nèi)全部數(shù)據(jù)都使用10次的話抚太,總共的費(fèi)用大約是 $1000
。
如果發(fā)生5小時(shí)的故障昔案,那么該用戶將得到 $100
的退款尿贫。如果故障時(shí)間從7個(gè)小時(shí)到一整個(gè)月的話, 該用戶將得到 $250
的補(bǔ)償踏揣。
附:支付寶高可用性架構(gòu)演進(jìn)
應(yīng)用中間件技術(shù)架構(gòu)應(yīng)用:
展現(xiàn) SOFA-MVC (full stack)分布式 session安全框架 security SOFA-Mashup (component) A/B Test組件
協(xié)調(diào)/調(diào)度中心 (scheduler)
服務(wù)容器 組件集合(rule,jbpm,xts,cache,schedule) SOFA3 (SCA:bundle,service/reference,pub/sub,extension,sla) CloudEngine (servlet 3.0,drm,management,osgi) web Tomcat Datasource zds drm webservice jetty Apache/nginx (spdy,https)
配置中心 (confreg2.0)
應(yīng)用中間件平臺(tái)
協(xié)調(diào)中心 (zdipper,zookeeper)
分布式鎖 (dlslock)
JVM (JVMTI,JNI)
超時(shí)調(diào)度中心 (timeout)
參考資料
https://blog.csdn.net/daiyudong2020/article/details/50550471
https://blog.csdn.net/chdhust/article/details/74086776
https://blog.csdn.net/tm6znf87mdg7bo/article/details/83663392
https://blog.csdn.net/chenyong19870904/article/details/52986784
https://wenku.baidu.com/view/444baa0ace2f0066f433221e.html
Kotlin開發(fā)者社區(qū)
專注分享 Java庆亡、 Kotlin、Spring/Spring Boot捞稿、MySQL又谋、redis、neo4j娱局、NoSQL彰亥、Android、JavaScript衰齐、React任斋、Node、函數(shù)式編程娇斩、編程思想仁卷、"高可用,高性能犬第,高實(shí)時(shí)"大型分布式系統(tǒng)架構(gòu)設(shè)計(jì)主題锦积。
High availability, high performance, high real-time large-scale distributed system architecture design。
分布式框架:Zookeeper歉嗓、分布式中間件框架等
分布式存儲(chǔ):GridFS丰介、FastDFS、TFS鉴分、MemCache哮幢、redis等
分布式數(shù)據(jù)庫(kù):Cobar、tddl志珍、Amoeba橙垢、Mycat
云計(jì)算、大數(shù)據(jù)伦糯、AI算法
虛擬化柜某、云原生技術(shù)
分布式計(jì)算框架:MapReduce嗽元、Hadoop、Storm喂击、Flink等
分布式通信機(jī)制:Dubbo剂癌、RPC調(diào)用、共享遠(yuǎn)程數(shù)據(jù)翰绊、消息隊(duì)列等
消息隊(duì)列MQ:Kafka佩谷、MetaQ,RocketMQ
怎樣打造高可用系統(tǒng):基于硬件监嗜、軟件中間件谐檀、系統(tǒng)架構(gòu)等一些典型方案的實(shí)現(xiàn):HAProxy、基于Corosync+Pacemaker的高可用集群套件中間件系統(tǒng)
Mycat架構(gòu)分布式演進(jìn)
大數(shù)據(jù)Join背后的難題:數(shù)據(jù)秤茅、網(wǎng)絡(luò)稚补、內(nèi)存和計(jì)算能力的矛盾和調(diào)和
Java分布式系統(tǒng)中的高性能難題:AIO,NIO框喳,Netty還是自己開發(fā)框架课幕?
高性能事件派發(fā)機(jī)制:線程池模型、Disruptor模型等等五垮。乍惊。。
合抱之木放仗,生于毫末润绎;九層之臺(tái),起于壘土诞挨;千里之行莉撇,始于足下。不積跬步惶傻,無(wú)以至千里棍郎;不積小流,無(wú)以成江河银室。