1 hystrix是什么?
Netflix(國外最大的類似於,愛奇藝,優酷)視頻網站,五六年前,也是,感覺自己的系統,整個網站,經常出故障,可用性不太高
有時候一些vip會員不能支付,有時候看視頻就卡頓,看不了視頻。。。
影響公司的收入!!!
五六年前,netflix,api team,提升高可用性,開發了一個框架,類似於spring,mybatis,hibernate,等等這種框架
高可用性的框架,hystrix
hystrix,框架,提供了高可用相關的各種各樣的功能,然后確保說在hystrix的保護下,整個系統可以長期處於高可用的狀態
最理想的狀況下,軟件的故障,就不應該說導致整個系統的崩潰,服務器硬件的一些故障,服務的冗余
唯一有可能導致系統徹底崩潰,就是類似於之前,支付寶的那個事故,工人施工,挖斷了電纜,導致幾個機房都停電
不可用,和產生一些故障或者bug的區別
2 hystrix的提供的功能
資源隔離、限流、熔斷、降級、運維監控
資源隔離
讓你的系統里,某一塊東西,在故障的情況下,不會耗盡系統所有的資源,比如線程資源
我實際的項目中的一個case,有一塊東西,是要用多線程做一些事情,小伙伴做項目的時候,沒有太留神,資源隔離,那塊代碼,在遇到一些故障的情況下,每個線程在跑的時候,因為那個bug,直接就死循環了,導致那塊東西啟動了大量的線程,每個線程都死循環
最終導致我的系統資源耗盡,崩潰,不工作,不可用,廢掉了
資源隔離,那一塊代碼,最多最多就是用掉10個線程,不能再多了,就廢掉了,限定好的一些資源
限流
高並發的流量涌入進來,比如說突然間一秒鍾100萬QPS,廢掉了,10萬QPS進入系統,其他90萬QPS被拒絕了
熔斷
系統后端的一些依賴,出了一些故障,比如說mysql掛掉了,每次請求都是報錯的,熔斷了,后續的請求過來直接不接收了,拒絕訪問,10分鍾之后再嘗試去看看mysql恢復沒有
降級
mysql掛了,系統發現了,自動降級,從內存里存的少量數據中,去提取一些數據出來
運維監控
監控+報警+優化,各種異常的情況,有問題就及時報警,優化一些系統的配置和參數,或者代碼
3 如何講解這塊內容?
(1)如何將eshop-cache,核心的緩存服務改造成高可用的架構
(2)hystrix中的一部分內容,單拉出來,做成一個免費的小課程,作為福利發放出去
(3)eshop-cache,寫代碼,eshop-cache-ha,業務場景,跟之前銜接起來,重新去寫代碼
(4)hystrix做服務高可用這一塊的內容,講解成只有一個業務背景,重新寫代碼,獨立
eshop-cache,在各級緩存數據都失效的情況下,會重新從源系統中調用接口,依賴源系統去查詢mysql數據庫去重新獲取數據
如果你的各種依賴的服務有了故障,那么很可能會導致你的系統不可用
hystrix對系統進行各種高可用性的系統加固,來應對各種不可用的情況
4 Hystrix 的設計原則
-
對依賴服務調用時出現的調用延遲和調用失敗進行控制和容錯保護。
-
在復雜的分布式系統中,阻止某一個依賴服務的故障在整個系統中蔓延。比如某一個服務故障了,導致其它服務也跟着故障。
-
提供 fail-fast(快速失敗)和快速恢復的支持。
-
提供 fallback 優雅降級的支持。
-
支持近實時的監控、報警以及運維操作。
5 Hystrix 更加細節的設計原則
-
阻止任何一個依賴服務耗盡所有的資源,比如 tomcat 中的所有線程資源。
-
避免請求排隊和積壓,采用限流和 fail fast 來控制故障。
-
提供 fallback 降級機制來應對故障。
-
使用資源隔離技術,比如 bulkhead(艙壁隔離技術)、swimlane(泳道技術)、circuit breaker(斷路技術)來限制任何一個依賴服務的故障的影響。
-
通過近實時的統計/監控/報警功能,來提高故障發現的速度。
-
通過近實時的屬性和配置熱修改功能,來提高故障處理和恢復的速度。
-
保護依賴服務調用的所有故障情況,而不僅僅只是網絡故障情況。
