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