reference:
系統的⾼可⽤建設,它其實是⼀個系統⼯程,需要考慮到系統建設的各個階段,也就是說它其實貫穿了系統建設的整個⽣命週期,如下圖所⽰:
具體來說,系統的⾼可⽤建設涉及架構階段、編碼階段、測試階段、發布階段、運⾏階段,以及故障發⽣時。
1. 架構階段:架構階段主要考慮系統的可擴充套件性和容錯性,要避免系統出現單點問題。例如多機房單元化部署,即使某個城市的某個機房出現整體故障,仍然不會影響整體⽹站的運轉。
2. 編碼階段:編碼最重要的是保證**的健壯性,例如涉及遠端調⽤問題時,要設定合理的超時退出機制,防⽌被其他系統拖垮,也要對調⽤的返回結果集有預期,防⽌返回的結果超出程式處理範圍,最常見的做法就是對錯誤異常進⾏捕獲,對⽆法預料的錯誤要有預設處理結果。
3. 測試階段:測試主要是保證測試⽤例的覆蓋度,保證最壞情況發⽣時,我們也有相應的處理流程。
4. 發布階段:發布時也有⼀些地⽅需要注意,因為發布時最容易出現錯誤,因此要有緊急的回滾機制。
5. 運⾏階段:運⾏時是系統的常態,系統⼤部分時間都會處於運⾏態,運⾏態最重要的是對系統的監控要準確及時,發現問題能夠準確報警並且報警資料要準確詳細,以便於排查問題。
6. 故障發⽣:故障發⽣時⾸先最重要的就是及時⽌損,例如由於程式問題導致商品**錯誤,那就要及時下架商品或者關閉購買鏈結,防⽌造成重⼤資產損失。然後就是要能夠及時恢復服務,並定位原因解決問題。
所謂「降級」,就是當系統的容量達到⼀定程度時,限制或者關閉系統的某些⾮核⼼功能,從⽽把有限的資源保留給更核⼼的業務。它是⼀個有⽬的、有計畫的執⾏過程,所以對降級⼀般需要有⼀套預案來配合執⾏。如果我們把它系統化,就可以通過預案系統和開關系統來實現降級。
降級的核⼼⽬標是犧牲次要的功能和⽤戶體驗來保證核⼼業務流程的穩定,是⼀個不得已⽽為之的舉措。
如果說降級是犧牲了⼀部分次要的功能和⽤戶的體驗效果,那麼限流就是更極端的⼀種保護措施了。限流就是當系統容量達到瓶頸時,需要通過限制⼀部分流量來保護系統,並做到既可以⼈⼯執⾏開關,也⽀持⾃動化保護的措施。
在限流的實現⼿段上來講,基於qps和執行緒數的限流應⽤最多,最⼤qps很容易通過壓測提前獲取,例如我們的系統最⾼⽀持1w qps時,可以設定8000來進⾏限流保護。執行緒數限流在客戶端⽐較有效,例如在遠端調⽤時我們設定連線池的執行緒數,超出這個併發執行緒請求,就將執行緒進⾏排隊或者直接超時丟棄。
如果限流還不能解決問題,最後⼀招就是直接拒絕服務了。
當系統負載達到⼀定閾值時,例如cpu使⽤率達到90%或者系統load值達到2*cpu核數時,系統直接拒絕所有請求,這種⽅式是最暴⼒但也最有效的系統保護⽅式。例如秒殺系統,我們在如下⼏個環節設計過載保護:
拒絕服務可以說是⼀種不得已的兜底⽅案,⽤以防⽌最壞情況發⽣,防⽌因把伺服器壓跨⽽長時間徹底⽆法提供服務。像這種系統過載保護雖然在過載時⽆法提供服務,但是系統仍然可以運作,當負載下降時又很容易恢復,所以每個系統和每個環節都應該設定這個兜底⽅案,對系統做最壞情況下的保護。
高可用之 降級
降級的最終目的是保證核心服務可用,即使是有損的。有些伺服器無法降級 加入購物車 結算等 降級也需要根據系統的吞吐量 響應時間 可用率等條件進行手工降級或自動降級。降級按照是否自動化可分為 自動開關降級和人工開關降級。降級按照功能可分為 讀服務降級和寫服務降級。降級按照處於的系統層次可分為 多級降級。...
Oracle高可用之dataguard
dataguard是一種資料庫級別的ha方案,最主要功能是冗災 資料保護 故障恢復等。在生產資料庫的 事務一致性 時,使用生產庫的物理全備份 或物理copy 建立備庫,備庫會通過生產庫傳輸過來的歸檔日誌 或重做條目 自動維護備用資料庫。將重做資料應用到備用庫。本文介紹使用rman備份建立備庫 dat...
keepalived高可用之nginx實戰
以nginx為例 安裝兩台nginx及keepalived配置高可用 兩台安裝nginx,我這邊以原始碼安裝為例 yum安裝nginx 原始碼安裝nginx 安裝完成後啟動,關閉防火牆及selinux 兩台安裝keepalived yum install y keepalived修改配置檔案 刪除所...