1.什么是高可用
任何人在任何時間任何地點訪問我們的任何服務都可以得到響應結果。
為什么需要高可用
評估方式
傳統方式:
科學方式
一段時間內的停機影響請求量占比
停機時間的響應請求量/總的請求量
影響高可用
1.突發大流量
2.秒殺設計
3.硬件方面
等等
微服務高可用設計手段
1.服務冗余
為了防止一臺機器因為軟件或硬件問題導致不可用,需要部署多個服務器,單機房保證服務部署在不同的機架或機柜上,防止一臺機架或機柜停電導致不可用。多臺機器就會使服務冗余。
服務冗余的結果就是要做無狀態化。所謂的無狀態化就是要使冗余部署的服務是對等的,比如部署兩臺,請求進來通過網關不管傳入哪一臺服務器,都是不影響的。
2.負載均衡
在網關接收到請求時,需要轉發,一般應用服務器有多臺,如何合理的進行請求轉發到不同的服務器使用的策略就是負載均衡策略,使用負載均衡可以使請求合理的分配到不同的服務器上進行處理。
做負載均衡的同時,也需要考慮做冪等設計,避免多次接受請求。
3.超時機制
如果請求等待時間過長,獲取不到請求結果,需要設計一個超時等待的機制。
異步化設計: 做架構的異步化是提高吞吐量。
使用好處: 在不關心的數據和結果可以使用異步化來做。核心的流量采樣同步來做,非核心的采用異步化來做。
4.服務限流熔斷降級
降低服務的請求量,不同服務之間調用異常,會導致等待時間過久,需要做服務熔斷。在某些場景下,某些服務訪問量會突然飆升,為了降低服務器壓力,會把某些冷門服務進行降級關閉,把資源分配到比較常用的服務上。
5. 數據復制/緩存/sharding
數據復制可以保證數據的同步性,使用緩存可以是數據訪問效率較快提高吞吐量
6. 架構拆分/服務治理
架構拆分可以降低應用的復雜度,進行服務治理也是。同時架構拆分還可以降低服務的壓力
做服務實時監控
更快的預先判斷哪些服務可能會發生某些問題,在不可用之前進行監控改進。
如何避免或者降低服務出現故障。
進行服務分級
高可用案例
- 如何無縫停止線上服務
網關層具備熱切換能力
可以熱開關切換: 假設設計晚上八點后,不接受服務需要進行升級,可以通過判斷每個業務層是否有打印日志判斷是否還在處理舊的服務,如果沒有,則可以關閉網關層進行熱切換服務。也可以通過前端部分,設置超時時間,在八點05秒,進行熱開關切換。
網關層不具備熱切換能力
防火墻限制只出不進 ,IPTABLES
熱開關:
可以設置一個全局配置變量,在網關層判斷是否為1,平時為0. 為1時,表示開啟熱開關,不接收請求。