高可用性

高可用性概述

什么是高可用性

高可用性 =? 高 + 可用性??捎眯裕ˋvailability)表示系統(tǒng)能在客戶需要的時(shí)候提供服務(wù)的能力,而高則表示系統(tǒng)具有相當(dāng)高的可靠性。高可用性中的"高"針對不同的系統(tǒng)的含義是不同的,而不是簡簡單單的7x24。比如,上交所和深交所的股票交易系統(tǒng)的高可用性只的是股票交易日交易時(shí)段的服務(wù)可靠性,在非交易時(shí)段系統(tǒng)不提供服務(wù)不影響該系統(tǒng)的高可用性。下圖是一個(gè)以7x24無間斷服務(wù)可用性標(biāo)準(zhǔn)示意圖。

上圖的數(shù)據(jù)讓我們直觀地看到實(shí)現(xiàn)7x24的高可用性是多么的難。

數(shù)據(jù)化定義

A = MTBF / MTBF + MTTR

其中MTBF表示mean time between failures,而MTTR表示maximum time to repair or resolve。

由這個(gè)定義我們可以看出我們有兩種方法提高系統(tǒng)的可用性:

提高M(jìn)TBF;

降低MTTR。

事實(shí)上,大量公司和企業(yè)均把大量的精力花費(fèi)在提高M(jìn)TBF,卻忽視了降低MTTR。要提高可用性,我們在這兩點(diǎn)上需要同樣出色。

高可用性是一個(gè)商業(yè)策略

下圖是投入和可用性的關(guān)系圖。

從上圖可以看出,可用性和投資花費(fèi)之間的關(guān)系圖。隨著可用性要求的提高,投入所產(chǎn)出的可用性邊際效益相當(dāng)?shù)脑絹碓叫?。任何時(shí)候我們都要清楚的意識到我們系統(tǒng)所需要的可用性,以做出滿足公司可用性要求,有最高性價(jià)比的方案設(shè)計(jì)決策??傊呖捎眯允且粋€(gè)商業(yè)策略。

高可用性是一個(gè)Teamwork

高可用性是有多個(gè)層次組件共同決定的,一個(gè)系統(tǒng)的最終可用性計(jì)算如下:

A(x) = A_Hardware(x) * A_DB(x) * A_NETWORK(x) * A_APPSERVER(x) * ...

由上面的公司我們可以看出,高可用性是一個(gè)Teamwork,需要大家共同協(xié)調(diào)來提高。

可靠的硬件,OS,系統(tǒng)架構(gòu),高可用性的編程實(shí)踐,系統(tǒng)的監(jiān)控統(tǒng)計(jì),故障轉(zhuǎn)移和恢復(fù)預(yù)案的實(shí)戰(zhàn)演練共同構(gòu)成了高可用性的保障。

硬件相關(guān)

需要機(jī)械移動(dòng)的設(shè)備更容易出錯(cuò):磁盤、風(fēng)扇、光盤等等。在大多數(shù)時(shí)候我們盡量使用更加可靠的設(shè)備來響應(yīng)服務(wù)。內(nèi)存的可靠性遠(yuǎn)遠(yuǎn)高于磁盤就是我們使用緩存的一個(gè)重要原因。無論是硬件還是軟件架構(gòu),提高可靠性的一個(gè)基本做法就是冗余。另一個(gè)重要的原則是冗余組件的獨(dú)立性。無論是跨硬盤、跨主機(jī)、跨機(jī)柜、跨機(jī)房等等最根本的原則都是冗余組件的獨(dú)立性。當(dāng)然冗余組件的獨(dú)立性也帶來了系統(tǒng)并行的可能性,從而也會(huì)提高系統(tǒng)的性能。

存儲

磁帶/光盤 :主要用來備份(backup)大規(guī)模數(shù)據(jù)。

冗余磁盤陣列(RAID),常用的包括RAID1,RAID5,RAID10等。

Storage Area Network(SAN):使用本地高速網(wǎng)絡(luò)將各種存儲硬件(比如磁盤,磁盤陣列等)連接起來,提供一個(gè)大容量,高速的塊設(shè)備抽象。

Network Attached Storage(NAS):使用本地高速網(wǎng)絡(luò)將各種存儲硬件(比如磁盤,磁盤陣列等)連接起來,提供一個(gè)大容量,高速的文件系統(tǒng)抽象。SAN和NAS提供的抽象層次不一樣。

網(wǎng)絡(luò)

冗余路由

電源/風(fēng)扇

系統(tǒng)架構(gòu)

無狀態(tài)架構(gòu)

無狀態(tài)架構(gòu)是系統(tǒng)水平可擴(kuò)展的重要前提。無狀態(tài)意味當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí)無須狀態(tài)轉(zhuǎn)移,可以快速增加,減少,替換節(jié)點(diǎn)。Map Reduce就是一個(gè)典型的無狀態(tài)架構(gòu),Erlang則從語言層面實(shí)現(xiàn)了無狀態(tài)架構(gòu)。

需要存儲狀態(tài)的系統(tǒng)能使用無狀態(tài)架構(gòu)嗎?系統(tǒng)的關(guān)鍵是將狀態(tài)的管理從系統(tǒng)中分離出來,系統(tǒng)的核心部分則不再需要關(guān)心狀態(tài)相關(guān)的工作。

負(fù)載均衡

負(fù)載均衡的冗余模式:

1:Active-Standby;

2:Active-Active;

3:Virtual Router Redundancy Protocol(VRRP),請參考RFC2338。

負(fù)載均衡器(硬/軟):F5, ARRAY, DNS, LVS, nginx/apache

異步消息架構(gòu)

系統(tǒng)接收請求后,根據(jù)請求進(jìn)行必要的業(yè)務(wù)處理,然后產(chǎn)生相應(yīng)的消息(或事件),則服務(wù)返回成功響應(yīng)。系統(tǒng)后續(xù)再異步處理該消息來完成整個(gè)業(yè)務(wù)。在整個(gè)業(yè)務(wù)處理過程中可能會(huì)消費(fèi)消息,然后產(chǎn)生新的消息,整個(gè)系統(tǒng)的業(yè)務(wù)由消息來驅(qū)動(dòng)。基于消息的架構(gòu)系統(tǒng)的核心在于系統(tǒng)業(yè)務(wù)的分割,確定系統(tǒng)的業(yè)務(wù)關(guān)鍵點(diǎn)。如果系統(tǒng)的業(yè)務(wù)關(guān)鍵點(diǎn)執(zhí)行成功,則可以保證整個(gè)請求業(yè)務(wù)最終的成功和一致性。消息的架構(gòu)可能會(huì)導(dǎo)致系統(tǒng)的暫時(shí)不一致性,但是能保證系統(tǒng)業(yè)務(wù)的最終一致性。BASE原則(Base Availability / Soft State / Eventually Consistent)就是基于消息的架構(gòu)的一個(gè)重要原則方法。

使用緩存

使用緩存的依據(jù)是存儲的局部性訪問原理。緩存能增快系統(tǒng)的訪問速度,同時(shí)能增加系統(tǒng)的可用性。增加系統(tǒng)的可用性的原因是內(nèi)存的可靠性遠(yuǎn)遠(yuǎn)大于磁盤等機(jī)械設(shè)備。使用緩存能有效避免磁盤的損耗,增加磁盤的使用時(shí)間。

緩存是多層次的,既有靜態(tài)資源的緩存,也有服務(wù)端業(yè)務(wù)數(shù)據(jù)的緩存,還有OS層的緩存。

緩存需要考慮:主存和緩存的一致性、緩存清除策略、鍵/值結(jié)構(gòu)設(shè)計(jì)、緩存的可用性、命中率。

目前流行的緩存包括:memorycache、redis等。其中memorycache是典型的KV型緩存,而redis則有更豐富的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。

題外話:如果未來Flash DISK的價(jià)格進(jìn)一步下降,容量增大的話,我們設(shè)計(jì)系統(tǒng)的方式可能會(huì)完全不同。

分布式系統(tǒng)

CAP定律(Brewer's theorem)

分布式系統(tǒng)無法同時(shí)保證以下三點(diǎn):

1:一致性(所有的節(jié)點(diǎn)在同一時(shí)刻數(shù)據(jù)完全相同);

2:可用性(任何請求無論成功與否,均會(huì)獲取相應(yīng));

3:分片容錯(cuò)(系統(tǒng)在強(qiáng)制消息丟失和系統(tǒng)部分失效的情況下仍然能繼續(xù)工作)

BASE方法

1:基本可用性(Basic Availability)

2:軟狀態(tài)(Soft State)

3:最終一致性(Final Consistency)

BASE方法本質(zhì)上是一個(gè)異步的方法,系統(tǒng)根據(jù)請求存儲足夠的能夠最終完成請求的狀態(tài)信息,這樣可以保證即使部分系統(tǒng)不可用的情況下,仍然能先相應(yīng)請求。然后根據(jù)狀態(tài)信息來最終完成業(yè)務(wù),保證一致性。

不要將BASE僅僅局限于狹隘的分布式系統(tǒng),此處的一致性不僅僅是數(shù)據(jù)節(jié)點(diǎn),更可以是廣義的業(yè)務(wù)。

分布式存儲數(shù)據(jù)庫

節(jié)點(diǎn)關(guān)系:主主模式(Master-Master),主從模式(Master-Read);

查詢支持:支持超大表的排序查詢、支持高速的KV查詢、支持范圍查詢、......;

事務(wù)支持:不支持事務(wù)、部分支持、完全支持;

任何時(shí)候,我們需要系統(tǒng)的需要,選擇最合適的存儲方法。

分布式文件系統(tǒng)

HFS、GFS

分布式協(xié)調(diào)系統(tǒng)

分布式協(xié)調(diào)系統(tǒng)通常作為一個(gè)完整的分布式系統(tǒng)的一部分,起到一個(gè)全局協(xié)調(diào)的作用。

Hadoop子項(xiàng)目Zookeeper主要有以下特點(diǎn):

1:開放存儲庫,樹形層次結(jié)構(gòu)主要存儲元數(shù)據(jù)信息;

2:保證部分節(jié)點(diǎn)失敗的高可用性,保證在一半以上節(jié)點(diǎn)正常的情況下就能繼續(xù)工作;

3:針對節(jié)點(diǎn)相關(guān)的監(jiān)聽機(jī)制。

集群概述

集群是一組協(xié)同工作的服務(wù)實(shí)體,用以提供比單一服務(wù)實(shí)體更具可用性、可擴(kuò)展性的服務(wù)平臺。

常見的分類有:

高可用性集群(HA - High Availability)。典型的有數(shù)據(jù)庫的主從集群。

負(fù)載均衡集群(LB - Load Balancing)。典型的有web server。負(fù)載均衡設(shè)備DNS、LVS或者F5等。

高性能計(jì)算集群(HPC - High Performance Computing)。典型的有hadoop。又有諸多特征:

分布式計(jì)算 (DC - Distributed Computing)。把計(jì)算任務(wù)分配到多個(gè)計(jì)算單元,如何拆分,如何合并。

并行計(jì)算 (PC - Parallel Computing)。松耦合的計(jì)算任務(wù)如何充分利用計(jì)算資源。大到進(jìn)程級并行,小到線程級并行。

目前,大多數(shù)集群是混合了其中幾種特征。

程序?qū)嵺`

契約式編程:邊界檢查/參數(shù)檢查/業(yè)務(wù)規(guī)則檢查

防御式編程:不但提供和遵循契約,對于客戶端不遵循契約的調(diào)用和服務(wù)端不遵循契約的實(shí)現(xiàn)提前進(jìn)行防范,并進(jìn)行妥善處理;

優(yōu)雅退出:系統(tǒng)退出前,應(yīng)該進(jìn)行系統(tǒng)申請資源的釋放等各種工作;

內(nèi)存泄漏檢查:系統(tǒng)應(yīng)該進(jìn)行代碼形式測試發(fā)現(xiàn)可能出現(xiàn)內(nèi)存泄漏的寫法和運(yùn)行內(nèi)存測試、對內(nèi)存使用狀況進(jìn)行監(jiān)控發(fā)現(xiàn)內(nèi)存泄漏;

檢查點(diǎn):系統(tǒng)可以設(shè)置檢查點(diǎn),進(jìn)行檢查點(diǎn)系統(tǒng)狀態(tài)的快照,系統(tǒng)通過檢查點(diǎn)可以進(jìn)行系統(tǒng)恢復(fù)還原;

異常捕獲處理:對于異常進(jìn)行合理的處理;

死鎖檢測:對于少于允許產(chǎn)生死鎖的系統(tǒng)或者非常重要的系統(tǒng)部件,需要提供相應(yīng)的死鎖發(fā)現(xiàn)機(jī)制,并在發(fā)現(xiàn)死鎖后進(jìn)行相應(yīng)的處理;

網(wǎng)絡(luò)超時(shí):對網(wǎng)絡(luò)操作進(jìn)行Retry等相應(yīng)處理;

監(jiān)控線程:監(jiān)控系統(tǒng)重要線程的生命狀態(tài),必要時(shí)進(jìn)行重要線程的重啟動(dòng);

通知機(jī)制:系統(tǒng)能夠通過郵件、短信等方式報(bào)告系統(tǒng)的情況;

日志規(guī)劃:合理地設(shè)計(jì)系統(tǒng)日志,有助于出現(xiàn)問題的準(zhǔn)確定位。

流程實(shí)踐

備份和故障轉(zhuǎn)移方案

編寫完善的Backup和故障轉(zhuǎn)移方案,并且要進(jìn)行實(shí)戰(zhàn)演練。保證Bakeup的實(shí)際可行性是減少M(fèi)TTR,來提高系統(tǒng)可用性的有效方法。

系統(tǒng)監(jiān)控

系統(tǒng)應(yīng)該進(jìn)行各個(gè)層次的監(jiān)控,包括底層硬件級別監(jiān)控、操作系統(tǒng)監(jiān)控、系統(tǒng)軟件監(jiān)控、系統(tǒng)內(nèi)部服務(wù)狀態(tài)的監(jiān)控,外部監(jiān)控。通過監(jiān)控及時(shí)發(fā)現(xiàn)系統(tǒng)的問題和隱患,從而會(huì)解決問題爭取時(shí)間。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容