引子
先介紹幾個概念,同步一下認知:
容災:是指系統冗余部署,當一處由于意外停止作業,整個系統應用還可以正常作業,
容錯:是指在運行中出現錯誤(如上下游故障或概率性失敗)仍可正常提供服務,
可用性:描述的是系統可提供服務的時間長短,用公式來說就是A=MTBF/(MTBF+MTTR),即正常作業時間/(正常作業時間+故障時間),
可靠性:描述的是系統指定時間單位內無故障的次數,比如:一年365天,以天為單位來衡量,有天發生了故障,哪怕只有1秒,這天算不可靠,其他沒有故障的是可靠的,
穩定性:這個業界沒有明確的定義,我的理解是:在受到各種干擾時仍然能夠提供符合預期的服務的能力,
從要求的嚴格程度上:可用性<可靠性<穩定性,
可用性和可靠性更側重于容災,而對穩定性同時包含容災和容錯,
服務的容災
服務容災的解決方案就是冗余,多幾個備份來切換,常用的有N+1容災和兩地三中心,N和中心實際上都是機房的意思,所謂中心就是資料中心,N是資料中心的電力配置部分,電力配置有市電和備用發動機供電,但是一般互聯網公司是不支持備用發動機供電的,所以一般一個機房就是一個N,
N+1容災就是要多出一個機房做容災,而兩地三中心,是提高了安全級別,除了同城兩個中心外,在異地再多出來一個中心,如果整個地區市電都不供電了,還有個備份,
這個備份的冷備和熱備不同于資料庫的冷備和熱備,資料庫的冷備是離線備份,就是不接收新流量的情況下備份,熱備是一邊接收流量一邊備份,
而通常服務的冷備是服務還沒有接收流量,而熱備是指備份資料也在接收流量,比如負載均衡或者master-slave模式的slave承擔讀流量的副本,這些熱備由于一直在運行所以避免了要切換前的服務檢查等步驟,可以快速切換,
服務的容錯
道
Everything fails!
法
服務容錯的難點在于存在未知和不可預測,所以對服務容錯要處理兩個問題:發現和解決,
可以自下而上和自上而下兩個角度來發現問題,自下而上主要是根據海因法則,從根本上解決遇到的每一個問題,以避免引起更大的問題,自上而下是系統化的思考,根據已知和可預測的,推演出未知和不可預測的,
在解決問題方面,衍生出很多派系,比如調研到阿里那邊更傾向于從流程上做把控:

術
隔離術
1>領域拆分解耦 ACL防止損壞層 有界背景關系提煉核心、支撐和通用域 分層架構 CRUD增刪改查簡單架構
CQRS命令查詢隔離
依賴消弱控 2>服務部署隔離 環境拆分 機房隔離 通道隔離 單元化 泳道 熱點隔離 讀寫隔離 容器隔離 拆庫拆表 動靜隔離 非核心流量隔離 3>服務間互動隔離 熔斷降級 4>服務內資源隔離 執行緒池隔離 信號量隔離
風險巡檢術
慢查詢
超時治理
依賴治理:消除依賴、榷訓依賴、控制依賴
系統破窗戶
廢棄代碼資源治理
系統例外治理
告警治理
資料一致性治理
穩定性設計術
請參考《穩定性三十六計》
器
超時重試:推薦spring-retryer
熔斷:推薦hystrix
限流:推薦Guava RateLimiter
spring cloud提供了超時重試、熔斷、限流的綜合解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/8426.html
標籤:架構設計
