高可用架構(gòu),是近年來(lái)構(gòu)建大中型網(wǎng)站很時(shí)髦的詞,是大數(shù)據(jù),大并發(fā),高負(fù)載后出現(xiàn)的產(chǎn)品。但是根據(jù)實(shí)際情況真正能做到,可伸縮,可擴(kuò)展,可維護(hù),確是不容易的事。
高可用架構(gòu)的話題擴(kuò)展開(kāi)來(lái),可以寫(xiě)一本書(shū),21CTO平臺(tái)也會(huì)持續(xù)登載相關(guān)文章,這些文章會(huì)匯聚和總結(jié)為這本書(shū)的主要內(nèi)容。
從Livedoor,再?gòu)内s集網(wǎng),從一兩臺(tái)機(jī)器到十幾臺(tái)。再到后來(lái)的YY平臺(tái),后來(lái)的今日頭條的特賣(mài)架構(gòu),再到云架構(gòu),隨著技術(shù)的演進(jìn),有些異同,但也有共通之處。根據(jù)產(chǎn)品特性,成本,團(tuán)隊(duì)技術(shù)等的綜合體現(xiàn),并沒(méi)有固定的標(biāo)準(zhǔn)。
什么是高可用
高可用(High Availability)實(shí)際上是構(gòu)建分布式系統(tǒng)的一個(gè)標(biāo)準(zhǔn),特別是互聯(lián)網(wǎng)的分布式系統(tǒng)架構(gòu)要達(dá)到高性能,高擴(kuò)展,以及高可用可伸縮等特征,高可用是分布式系統(tǒng)架構(gòu)中首重考慮的因素。
高可用指通過(guò)系統(tǒng)架構(gòu)來(lái)減少和避免系統(tǒng)不能提供可用服務(wù)的時(shí)間。馬上快過(guò)年了,我們都要用12306網(wǎng)站來(lái)訂票,這個(gè)最牛網(wǎng)站還是每天晚上10點(diǎn)到第二天7點(diǎn)關(guān)機(jī)不營(yíng)業(yè),這屬于另一種不提供服務(wù),另當(dāng)別論。
假設(shè)系統(tǒng)一直能夠提供服務(wù),我們說(shuō)系統(tǒng)的可用性是100%。如果系統(tǒng)每運(yùn)行100個(gè)時(shí)間單位,會(huì)有1小時(shí)間單位無(wú)法提供服務(wù),我們說(shuō)系統(tǒng)的可用性是99%。很多公司的高可用目標(biāo)是4個(gè)9,也就是99.99%,這就意味著,系統(tǒng)的年停機(jī)時(shí)間為8.8個(gè)小時(shí)。
使用公式 x = (n – y) * 100/n 來(lái)計(jì)算可用性百分比。
x代表百分比
n代表給定歷月(30 天)中的總分鐘數(shù)
y代表系統(tǒng)或服務(wù)不可用時(shí)的總分鐘數(shù)
可以在下表(該表使可用性百分比與日歷時(shí)間等價(jià)值相關(guān)聯(lián))中看到,很難實(shí)現(xiàn)五個(gè)九的可用性。
請(qǐng)見(jiàn)下表:
說(shuō)明
通俗叫法
可用性級(jí)別
年/停機(jī)時(shí)間
基本可用性
2個(gè)9
99%
87.6小時(shí)
較高可用性
3個(gè)9
99.9%
8.8小時(shí)
具有故障自動(dòng)恢復(fù)能力的可用性
4個(gè)9
99.99%
53分鐘
最高可用性
5個(gè)9
99.999%
5分鐘
網(wǎng)站或后端系統(tǒng)可用性標(biāo)準(zhǔn)
關(guān)于可用性服務(wù)標(biāo)準(zhǔn),在一些正規(guī)的數(shù)據(jù)中心IDC或提供CDN的公司,它們IT 服務(wù)級(jí)別協(xié)議 (SLA)能夠達(dá)到4個(gè)9標(biāo)準(zhǔn)的。
當(dāng)然,可用性是有一個(gè)平衡點(diǎn),達(dá)到4個(gè)9就是不錯(cuò)的公司,還有一些關(guān)鍵特性,比如容錯(cuò),容災(zāi),備份和恢復(fù)等。
舉個(gè)栗子,一些網(wǎng)站在人們心目中是一直不宕機(jī)的。比如百度,它在若干年的頁(yè)面只有十幾K。不管是不是互聯(lián)網(wǎng)公司,人們會(huì)通過(guò)ping baidu.com來(lái)檢測(cè)網(wǎng)絡(luò)的連通性。它的高可用服務(wù),達(dá)到了常說(shuō)的『簡(jiǎn)單,可依賴』,『如果百度都打不開(kāi),應(yīng)該網(wǎng)絡(luò)斷了』,人們會(huì)常這樣確定。
另外還有163.com等都成為業(yè)內(nèi)公認(rèn)高可用保障非常出色的系統(tǒng),這是對(duì)這些技術(shù)團(tuán)隊(duì)的至高榮譽(yù)。
如何保障系統(tǒng)高可用
我們都知道,單點(diǎn)故障是系統(tǒng)高可用的大敵,即一臺(tái)機(jī)器出現(xiàn)問(wèn)題,導(dǎo)至整個(gè)系統(tǒng)的不可用。因此在架構(gòu)設(shè)計(jì)上應(yīng)該盡量避免單點(diǎn)。在理論方法上,保證高可用的方法就是『負(fù)載均衡』,即『分布式』『集群化』式設(shè)計(jì)。假如說(shuō)只有一臺(tái)服務(wù)器,如果它掛掉了,整體服務(wù)都受到了影響。
現(xiàn)實(shí)中,一臺(tái)機(jī)器來(lái)支撐應(yīng)用的場(chǎng)景也有,需要我們做到可用性也可以達(dá)成,但思想也有多臺(tái)機(jī)器思維,以及異常的處理,后面我會(huì)持續(xù)大家談?dòng)憽?/span>
很顯而易見(jiàn)的是,當(dāng)有了多臺(tái)服務(wù)器后,流量負(fù)載會(huì)分?jǐn)偟竭@些機(jī)器上,即使有一臺(tái)掛了還有其它機(jī)器能夠頂?shù)蒙稀?/span>
保證系統(tǒng)高可用,架構(gòu)設(shè)計(jì)的核心準(zhǔn)則就是:系統(tǒng)冗余。加了冗余后,還不夠,當(dāng)每次出現(xiàn)故障后,如果需要人工來(lái)介入以恢復(fù)服務(wù),這樣也會(huì)增加系統(tǒng)的不可服務(wù)實(shí)踐。
所以,我們是通過(guò)『故障自動(dòng)轉(zhuǎn)移』來(lái)實(shí)現(xiàn)系統(tǒng)的高可用。接下來(lái),我們一起看典型的互聯(lián)網(wǎng)架構(gòu)中,如果通過(guò)冗余+自動(dòng)故障轉(zhuǎn)移來(lái)保證系統(tǒng)的高可用特性。
圖1 互聯(lián)網(wǎng)基礎(chǔ)架構(gòu)概覽
我們常見(jiàn)的互聯(lián)網(wǎng)分布式基本架構(gòu)就是上面的圖示。
這些分層簡(jiǎn)介如下:
1、客戶端層:也稱前端,調(diào)用方為瀏覽器或手機(jī)APP
2、CDN為內(nèi)容分發(fā)網(wǎng)絡(luò),相當(dāng)于內(nèi)容的分布式緩存
3、站點(diǎn)應(yīng)用層:實(shí)現(xiàn)核心應(yīng)用邏輯,返回HTML/Java或JSON數(shù)據(jù)
4、服務(wù)層:如果架構(gòu)已經(jīng)實(shí)現(xiàn)了SOA,RPC或Web Service
5、數(shù)據(jù)-緩存層:緩存加速訪問(wèn)存儲(chǔ),包括NoSQL等相關(guān)
6、數(shù)據(jù)庫(kù)層:數(shù)據(jù)持久化
整個(gè)系統(tǒng)的高可用,是通過(guò)第一層的均衡+冗余與自動(dòng)故障轉(zhuǎn)移來(lái)綜合實(shí)現(xiàn)的。