【springcloud】hystrix面試題


 

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 優雅降級的支持。
  • 支持近實時的監控、報警以及運維操作。
舉個例子:
    有一個分布式系統,服務A依賴於服務B,服務B依賴於服務C/D/E。在這樣一個成熟的系統內,比如說最多可能只有100個線程資源。正常情況下,40個線程並發調用服務C,各30個線程並發調用 D/E。 
    調用服務 C,只需要 20ms,現在因為服務C故障了,比如延遲,或者掛了,此時線程會吊住2s左右。40個線程全部被卡住,由於請求不斷涌入,其它的線程也用來調用服務 C,同樣也會被卡住。這樣導致服務B的線程資源被耗盡,無法接收新的請求,甚至可能因為大量線程不斷的運轉,導致自己宕機。服務A也掛了。
     Hystrix可以對其進行資源隔離,比如限制服務B只有40個線程調用服務C。當此40個線程被hang住時,其它60個線程依然能正常調用工作。從而確保整個系統不會被拖垮。
 

5 Hystrix 更加細節的設計原則

  • 阻止任何一個依賴服務耗盡所有的資源,比如 tomcat 中的所有線程資源。
  • 避免請求排隊和積壓,采用限流和 fail fast 來控制故障。
  • 提供 fallback 降級機制來應對故障。
  • 使用資源隔離技術,比如 bulkhead(艙壁隔離技術)、swimlane(泳道技術)、circuit breaker(斷路技術)來限制任何一個依賴服務的故障的影響。
  • 通過近實時的統計/監控/報警功能,來提高故障發現的速度。
  • 通過近實時的屬性和配置熱修改功能,來提高故障處理和恢復的速度。
  • 保護依賴服務調用的所有故障情況,而不僅僅只是網絡故障情況。

 

參考:
        https://www.nowcoder.com/discuss/188033

  https://www.cnblogs.com/yzh-blog/p/11703037.html#1817129157


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM