Sentinel的使用前景
隨著微服務的發展及DDD領域驅動設計的興起,越來越多的企業開始使用微服務架構。無論是項目重構,還是新項目的開發,即使項目初期沒有多大的流量,但從長遠考慮,企業也基本會優先使用微服務架構。但“魚和熊掌不可兼得”,項目微服務化在提升開發效率及降低後期維護成本的同時,也加大了服務部署運維及問題排查的難度,並且容易導致服務崩潰出現級聯效應,也就是“服務雪崩”。
為了應對微服務化帶來的難題,一批微服務組件與應用湧現出來,如輔助問題排查的分布式調用鏈追蹤探針、簡化部署運維的Kubernetes,以及本書介紹的熔斷器組件等。
熔斷器組件用於實現服務的自我保護,一般都具備限流、熔斷功能。限流用於限制流量超過服務的臨界點,避免突發流量導致服務崩潰;而熔斷用於保護自身不受下遊服務的影響,在感知到下遊服務不穩定時自動斷開請求,在下遊服務恢復時再恢復請求。
並非流量大時纔需要熔斷器。一方面,微服務的調用錯綜復雜,若一個服務不可用,則有很大的概率影響到其周邊服務,使其不可用,並且這種現像就像病毒一樣具有擴散性,因此需要使用熔斷器;另一方面,若項目對接一些第三方的接口,則在無法預估第三方接口的QPS及穩定性的情況下,添加熔斷器能保證服務自身穩定運行。
Sentinel是熔斷器的實現組件之一,具有擴展性強、對應用性能影響小、配置靈活,支持異步鏈路與響應式項目等特點,因此Sentinel很快在國內流行起來,成為國內眾多開發者和架構師的熔斷器組件。
筆者的使用體會
筆者有這樣一個經歷,即將一個項目從單體架構重構為微服務架構,並且擔任該項目的主程序師,負責技術選型、微服務劃分及框架搭建。在這個過程中,繫統發生了一次服務雪崩,筆者至今記憶猶新,也是從那時起纔認識到熔斷器組件對於微服務的重要性。
Sentinel使用簡單、配置靈活,可將Sentinel的動態數據源接口與配置中心結合使用,動態地改變流量規則。Sentinel提供的流量控制功能有限流、熔斷、繫統自適應、授權等。筆者當時使用了熔斷和繫統自適應功能應對突增流量導致服務雪崩的問題,同時使用限流功能並結合信號量隔離、勻速限流效果控制器,應對內部定時任務瞬時高並發調用某服務接口的問題。
在後續開發的項目中,筆者也經常使用Sentinel,如在某跨境電商項目的支付服務中使用Sentinel的熔斷器功能;在其他微服務中擴展Sentinel實現開關降級,從而在促銷活動開始前對不重要的接口進行降級處理,為大促銷活動保駕護航。為了使用Kubernetes的ConfigMap資源存儲限流規則,筆者還自行實現了Sentinel動態數據源,並基於Spring Cloud動態配置實現了限流規則的動態配置。
本書的特色
本書以“概念、核心類、整體工作流程、核心功能”為主脈絡,繫統、全面地對Sentinel的源碼進行了分析,以圖文結合的方式詳細介紹了Sentinel的一些晦澀難懂的概念及數據結構,講解了勻速限流算法、冷啟動限流算法及Sentinel的代碼實現,並分析了Sentinel中的一些代碼為何如此編寫,揣摩代碼背後的設計思想。
本書讀者對像
- 正在進行微服務項目的開發者或組織
- 對Sentinel工作原理尚未了解的開發者
- 在響應式編程項目中對Sentinel感到困惑的開發者