在網(wǎng)站的架構(gòu)設(shè)計(jì)時(shí)就要考慮穩(wěn)定性:考慮到網(wǎng)絡(luò)光纖有可能被挖斷,如果只有一個(gè)機(jī)房那就悲劇了,100%的流量都沒(méi)了,甚至要考慮自然災(zāi)害的影響而多地建設(shè)機(jī)房。
穩(wěn)定性的建設(shè)中有兩個(gè)重要因素:一是思想上重視,開(kāi)發(fā)人員對(duì)穩(wěn)定性的重視(也就是敬畏之心)可以避免70%~80%6的故障;二是規(guī)范和工具的建設(shè),用以保障穩(wěn)定性。
(1)架構(gòu)階段的穩(wěn)定性建設(shè)項(xiàng)目
一個(gè)網(wǎng)站要有好的穩(wěn)定性,必須在架構(gòu)設(shè)計(jì)階段就做長(zhǎng)遠(yuǎn)考慮,就像建房子要先打好地基一樣,否則樓建得越高越危險(xiǎn)。建設(shè)高穩(wěn)定性的架構(gòu)必須注意以下幾點(diǎn)。
避免單點(diǎn)。高可用架構(gòu)設(shè)計(jì)的第一條就是要避免單點(diǎn),從概率出發(fā)來(lái)看,無(wú)論是機(jī)器還是人,沒(méi)有什么東西是不會(huì)犯錯(cuò)的,盡量避免某個(gè)完整的環(huán)節(jié)成為單點(diǎn)是架構(gòu)設(shè)計(jì)的原則。但是,在某些場(chǎng)景中,有些功能必須放在同一個(gè)應(yīng)用中,例如統(tǒng)一登錄、網(wǎng)關(guān)、安全過(guò)濾等,此時(shí)要保證盡量按照人群來(lái)劃分,不要在邏輯上出現(xiàn)單點(diǎn);或者盡量把服務(wù)拆成組件遷到不同的端上執(zhí)行,例如,可以把安全服務(wù)作為一個(gè)模塊集成到 Nginx或者應(yīng)用機(jī)器中,而不是把它做成一個(gè)遠(yuǎn)程服務(wù)接口。
分組隔離。把應(yīng)用拆得更細(xì)一點(diǎn),不同的功能模塊做成單獨(dú)的分組,每個(gè)分組占用一部分機(jī)器集群,這樣可以做到服務(wù)分組隔離,避免不太重要的分組對(duì)重要分組的影響。現(xiàn)在非常流行的微服務(wù)就是一種非常好的分組隔離的實(shí)踐。異步化。在系統(tǒng)設(shè)計(jì)中要讓盡可能多的遠(yuǎn)程調(diào)用異步化,這也是一項(xiàng)重要原則。很多時(shí)候會(huì)因?yàn)橐粋€(gè)不太重要的功能的強(qiáng)依賴拖垮了整個(gè)應(yīng)用,所以要盡量把不太重要的依賴改成異步調(diào)用,避免影響主調(diào)用鏈路的穩(wěn)定性。
異地容災(zāi)。考慮到很多不可抗力因素的影響,我們需要設(shè)計(jì)網(wǎng)站的異地容災(zāi)甚至全球部署策略,這些不可抗力的事件往往會(huì)影響網(wǎng)站的整個(gè)架構(gòu),必須做長(zhǎng)遠(yuǎn)打算
(2)編碼階段的穩(wěn)定性建設(shè)
編程階段的穩(wěn)定性建設(shè)尤其重要,一個(gè)好的程序在編碼階段就決定了整個(gè)應(yīng)用系統(tǒng)的質(zhì)量,所以在編碼階段要注意下面一些規(guī)則。
錯(cuò)誤捕獲。一個(gè)優(yōu)雅的系統(tǒng)必然有一套優(yōu)雅的異常處理機(jī)制,在適當(dāng)?shù)牡胤饺?O處理、遠(yuǎn)程調(diào)用、多線程等關(guān)鍵處捕獲異常非常重要,防御性編程可以更好地保證系統(tǒng)的健壯性。
異步線程。在一些批處理調(diào)用的地方采用異步線程可以保證主請(qǐng)求的正常返回,同樣也可以做到部分的隔離,防止部分請(qǐng)求掛起整個(gè)應(yīng)用。
超時(shí)處理。在遠(yuǎn)程調(diào)用或者調(diào)用外圍設(shè)備時(shí),非常有必要設(shè)定超時(shí)時(shí)間,這樣可以保證所有的請(qǐng)求都有一個(gè)可預(yù)知的返回結(jié)果。
。限流保護(hù)。每個(gè)應(yīng)用都有一個(gè)承載極限,超過(guò)這個(gè)極限就會(huì)帶來(lái)很大的不確定性,因此,設(shè)置自我保護(hù)機(jī)制可以保證程序的健壯性。
(3)測(cè)試階段的穩(wěn)定性建設(shè)
測(cè)試是程序上線前的最后一道保障,測(cè)試也是驗(yàn)證程序是否達(dá)到預(yù)期功能的手段,在本階段要注意以下事項(xiàng)。
自動(dòng)化對(duì)比測(cè)試。對(duì)比測(cè)試就是用線上真實(shí)的環(huán)境和數(shù)據(jù)與預(yù)發(fā)環(huán)境對(duì)相同的業(yè)務(wù)接口做返回值的比較,以此判斷新上線的代碼是否符合預(yù)期。Beta測(cè)試。在線上的真頭壞境中遠(yuǎn)取著個(gè)言機(jī)器上的數(shù)據(jù),以此驗(yàn)證程序是否正確。
(4)發(fā)布階段的穩(wěn)定性建設(shè)
發(fā)布階段穩(wěn)定性建設(shè)應(yīng)留意以下事項(xiàng)。
分批發(fā)布。分批發(fā)布可以降低發(fā)布風(fēng)險(xiǎn),不僅可以減少系統(tǒng)部署重啟引起的RT抖動(dòng),也可以在發(fā)現(xiàn)問(wèn)題時(shí)立即終止發(fā)布。
多版本發(fā)布。合并部署是將多個(gè)應(yīng)用系統(tǒng)同時(shí)部署在同一個(gè)Web容器實(shí)例中、共享同一個(gè)進(jìn)程,每個(gè)應(yīng)用之間相互隔離,但是應(yīng)用之間的RPC是通過(guò)本地調(diào)用而不通過(guò)網(wǎng)絡(luò)調(diào)用。
(5)運(yùn)行階段的穩(wěn)定性建設(shè)項(xiàng)目
運(yùn)行階段穩(wěn)定性建設(shè)要做好幾件事:實(shí)時(shí)監(jiān)控報(bào)警、過(guò)載保護(hù)和自動(dòng)降級(jí)、實(shí)時(shí)數(shù)據(jù)對(duì)賬,核心原則是實(shí)時(shí)發(fā)現(xiàn)問(wèn)題,提供必要的保護(hù)措施。
實(shí)時(shí)監(jiān)控報(bào)警。線上監(jiān)控必須包含系統(tǒng)監(jiān)控,主要是監(jiān)控服務(wù)器的CPU、Load磁盤、內(nèi)存等一些系統(tǒng)指標(biāo)的異常情況;應(yīng)用監(jiān)控主要是監(jiān)控響應(yīng)時(shí)間、QPS異常錯(cuò)誤等;業(yè)務(wù)監(jiān)控主要是監(jiān)控一些業(yè)務(wù)指標(biāo)是否有異常(如實(shí)時(shí)的下單量、司機(jī)和乘客的在線數(shù)量業(yè)務(wù)指標(biāo))。
過(guò)載保護(hù)和自動(dòng)降級(jí)。線上運(yùn)行中的系統(tǒng)需要有一些保護(hù)措施,如系統(tǒng)的某些指標(biāo)達(dá)到瓶頸時(shí)要有必要的保護(hù);當(dāng)Load達(dá)到系統(tǒng)的最高瓶頸時(shí)需要拒絕些請(qǐng)求,以防止系統(tǒng)被壓垮;涉及一些遠(yuǎn)程調(diào)用時(shí)可以設(shè)置最大并發(fā)數(shù),一旦超過(guò)該閥值就自動(dòng) fast fail以保護(hù)系統(tǒng)。
實(shí)時(shí)數(shù)據(jù)對(duì)賬。這屬于業(yè)務(wù)監(jiān)控范圍。在涉及一些敏感信息時(shí),為了確保正確性,需要有實(shí)時(shí)的對(duì)賬校驗(yàn),最典型的就是資金數(shù)據(jù),以及涉及跨單元數(shù)據(jù)復(fù)制時(shí)對(duì)數(shù)據(jù)一致性的對(duì)賬檢查。(6)故障發(fā)生時(shí)的穩(wěn)定性建設(shè)
一旦發(fā)生故障,最重要的就是快速止損、定位故障并快速恢復(fù)。按照經(jīng)驗(yàn),當(dāng)故障發(fā)生時(shí),第一反應(yīng)就是快速回滾了解故障現(xiàn)象,根據(jù)故障現(xiàn)象判讀故障原因,進(jìn)而找出解決辦法。
減少故障的定位時(shí)間和快速恢復(fù)策略在故障發(fā)生時(shí)是至關(guān)重要的。
快速定位障可以縮短故障的復(fù)時(shí)間。如何定位故障?據(jù)統(tǒng)計(jì),90%6的故障都是由變更所致,所以快速收集變更信息和線上機(jī)器的異常數(shù)據(jù)非常重要,但難點(diǎn)在于這些數(shù)據(jù)往往散落在各個(gè)地方,并且格式多樣。
快速恢復(fù)。影響故障恢復(fù)時(shí)間的一是故障定位時(shí)間,二是所采用的快速恢復(fù)的手段。例如在多版本部署出現(xiàn)故障時(shí),可以通過(guò)快速網(wǎng)站建設(shè)切換版本來(lái)恢復(fù);在異地多活的情況下可以把流量切換到不同的單元來(lái)止損。
本文地址:http://123beaconmarketing.com//article/4547.html