天天看點

高可用的微服務架構設計-資源隔離、限流、熔斷、降級、監控斷路器模式艙壁隔離模式容錯理念1 資源隔離2 限流3 熔斷4 降級5 運維監控最佳實踐

高可用的微服務架構設計-資源隔離、限流、熔斷、降級、監控斷路器模式艙壁隔離模式容錯理念1 資源隔離2 限流3 熔斷4 降級5 運維監控最佳實踐

斷路器模式

高可用的微服務架構設計-資源隔離、限流、熔斷、降級、監控斷路器模式艙壁隔離模式容錯理念1 資源隔離2 限流3 熔斷4 降級5 運維監控最佳實踐

艙壁隔離模式

容錯理念

  • 凡是依賴都可能會失敗
  • 凡是資源都有限制
  • CPU/Memory/Threads/Queue
  • 網絡并不可靠,延遲是應用穩定性殺手

1 資源隔離

讓你的系統裡,某一塊東西,在故障的情況下,不會耗盡系統所有的資源,比如線程資源

項目中的一個case,有一塊東西,是要用多線程做一些事情,小夥伴做項目的時候,沒有太留神,資源隔離,那塊代碼,在遇到一些故障的情況下,每個線程在跑的時候,因為那個bug,直接就死循環了,導緻那塊東西啟動了大量的線程,每個線程都死循環

最終導緻系統資源耗盡,崩潰,不工作,不可用,廢掉了

資源隔離,那一塊代碼,最多最多就是用掉10個線程,不能再多了,就廢掉了,限定好的一些資源

2 限流

對打入服務的請求流量進行控制,使服務能夠承擔不超過自己能力的流量壓力。

高并發的流量湧入進來,比如說突然間一秒鐘100萬QPS,廢掉了,10萬QPS進入系統,其他90萬QPS被拒絕了

3 熔斷

A服務調用B服務的某個功能,由于網絡不穩定問題,或者B服務卡機,導緻功能時

間超長。如果這樣的次數太多。我們就可以直接将B斷路(A不再請求B接口),凡是

調用B的直接傳回降級資料,不必等待B的超長執行。這樣B的故障問題,就不會級聯影

響到A。

依賴服務,出了一些故障,每次請求都報錯,熔斷它,後續的請求過來直接不接收了,拒絕通路,10分鐘之後再嘗試去看看接口是否恢複。

4 降級

整個網站處于流量高峰期,伺服器壓力劇增,根據目前業務情況及流量,對一些服務和頁面進行有政策的降級[停止服務,所有的調用直接傳回降級資料]。以此緩解伺服器資源的的壓力,以保證核心業務的正常運作,同時也保持了客戶和大部分客戶的得到正确的響應。

MySQL挂了,系統發現了,自動降級,從記憶體裡存的少量資料中,去提取一些資料出來。

和熔斷的異同

相同點

  • 為了保證叢集大部分服務的可用性和可靠性,防止崩潰,犧牲小我
  • 使用者最終都是體驗到某個功能不可用

不同點

  • 熔斷是被調用方故障,觸發的系統主動規則
  • 降級是基于全局考慮,停止一些正常服務,釋放資源

5 運維監控

監控+報警+優化,各種異常的情況,有問題就及時報警,優化一些系統的配置和參數,或者代碼

如果你的各種依賴的服務有了故障,那麼很可能會導緻你的系統不可用

hystrix對系統進行各種高可用性的系統加強,來應對各種不可用的情況

最佳實踐

網關集中埋點,覆寫大部分場景

盡量架構集中埋點,用戶端為主

配置對接Apollo ,根據實際使用調整閥值

信号量vs線程池場景

信号量:網關,緩存

線程池場景:服務間調用用戶端,資料庫通路,第三方通路

線程池大小經驗值

30rps x0.2sec= 6 + breathing room = 10 threads

Thread-pool Queue size:5 ~ 10

部署

Hystrix Dashboard大盤(無線/H5/第3三方網關)

共享Hystrix Dashboard/Turbine伺服器

熔斷告警

Spring Cloud Hystrix标注

————————————————

版權聲明:本文為CSDN部落客「JavaEdge.」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:

https://blog.csdn.net/qq_33589510/article/details/95803214