javascript
Spring Cloud整体架构解析
Spring Cloud整體架構
Spring Cloud的中文名我們就暫且稱呼它為“春云”吧,聽上去是多么樸實無華的名字,不過呢一般名字起的低調的都是厲害角色,我們就看看Spring Cloud都提供了哪些靠譜功能吧。
Spring Cloud是一款微服務架構的一站式解決方案,你在微服務化過程中碰到的任何問題,都可以從Spring全家桶里找到現成的解決方案,而且方案還不止一種。我們先來看一幅Spring Cloud的全景圖,再來詳細解釋其中的每個組件的功能。
服務治理
Spring Cloud提供了三款服務治理的組件,分別是Eureka, Consul和Nacus,從這三足鼎立的態勢里我們就能猜到,在服務治理領域的背后一定有那么一段恩怨情仇。沒錯,這三個組件其實是由三個不同的公司或組織來研發的。
在Spring Cloud的架構中,服務治理是其中不可或缺的核心環節,它包含了服務從注冊到銷毀的整個生命周期的管理。用一句話來說,服務治理確保了調用方可以準確的向可用的服務節點發起調用。
負載均衡
Ribbon是Spring Cloud中負責負載均衡的組件,Ribbon的一大優勢是它能夠和各個Spring Cloud組件無縫集成,而且十分靈巧輕便又具備高可擴展性。
負載均衡框架是起到分散服務器壓力的作用,可以這么說,沒有負載均衡技術的服務器集群就不能叫做集群,只有借助負載均衡技術,集群才能夠借助服務節點的規模效應發揮出優勢。
消息間調用
對于原生態的HTTP調用來說,從Java代碼 里發起調用并且構造消息體和Header是一件非常麻煩的事情,考慮到Spring Cloud的服務治理組件也是基于HTTP的,因此特別需要-款簡化服務調用的組件。OpenFeign的出現就是為了解決這個問題,我們可以借助Feign的代理機制,像調用一個接口方法一樣發起遠程HTTP調用。
服務容錯
Hystrix是目前Spring Cloud中應用最廣泛的服務容錯組件,服務容錯從宏觀上來解釋,就是盡可能降低服務異常所帶來的影響。我們經常聽到兩個詞叫做“降級’和*熔斷”,降級很好理解,現在大家都會打趣的說“消費降級”,就是說降低咱自己的消費水平,在服務容錯這里其實是一個道理,降級就是退而求其次,在異常發生之后選一種備 選方案繼續提供服務。而熔斷則是指在異常達到某個臨界值以后,直接切斷服務通路,將用戶請求統統導向降級邏輯中。
分布式配置中心和消息推送組件
Spring Cloud借助Config組件來集中管理集群中所有服務節點的配置,它是一個中心化的配置管理中心,可以采用包括Github、Database等多種持久化方案來保存配置信息,將你的微服務從繁重的配置工作中解脫出來。利用Config組件我們可以輕松玩轉環境隔離、配置推送和配置項動態刷新。
提到配置屬性的刷新,就不得不說到Spring Cloud中的另一個組件Bus,它承擔了批量通知和推送配置變更的工作,而且我們可以通過擴展Bus的事件,實現“消息廣播”的應用場景。
服務網關
服務網關是微服務的第一道關卡,目前Nginx是應用最廣泛的反向代理技術,在各個大廠的核心業務系統中都有大量應用,不過Nginx可不是使用Java來配置的,使用和配置Nginx需要掌握它的語法樹Spring Cloud則為廣大的Java技術人員提供了更加“編程友好”的方式來構建網關層,那就是Gateway和Zul網關層組件。我們可以通過Java代碼或者是yml配置文件的方式編寫自己的路由規則,并通過內置過濾器或自定義過濾器來實現復雜的業務需求(比如在網關層做令牌驗證)。Gateway本身也集成了強大的限流功能,結合使用Redis+SpEL表達式,可以對業務系統進行精準限流。
調用鏈路追蹤
微服務的一大特點就是完成一個業務場景所需要調用的上下游鏈路非常長,比如說一個下單操作,后臺就要調用商品、訂單、營銷優惠、履約、消息推送、支付等等一大家子微服務,任何一個環節出錯可能都會導致下單失敗。那同學們如何在一個調用鏈路中定位到出問題的環節呢?生產環境可不是我們的開發機器,不能為所欲為的做線上debug,那我們只能依靠日志線索。
Sleuth是Spring Cloud提供的調用鏈路追蹤組件,它進行線上問題排查必不可少的關鍵環節,單就Sleuth來說,它就是在一整條調用鏈路中打上某個標記,將一個api請求所調用的所有上下游鏈路串聯起來。如果從宏觀的角度來說,調用鏈追蹤還涉及到日志打標、調用鏈分析、日志收集、構建搜索Index等等流程,我們在本章中將通過Sleuth+Zipkin+ELK(Elasticsearch, Logstash,Kibana)這五種技術結合使用,玩轉調用鏈路追蹤。
消息驅動
Kafka和RabbitMQ是目前應用最廣泛的消息中間件,很多異步調用場景底層都依賴于消息組件,比如說電商場景中的商品批量發布,或者下單成功后的郵件通知系統等等。Stream是Spring Cloud為我們提供的消息驅動組件,它代理了業務層和底層的物理中間件的交互,至于底層中間件是Kafka還是RabbitMQ,對業務層幾乎是無感知的。借助Stream我們不僅可以輕松實現組播(組內單播)和廣播場景,同時Stream還提供了對異常處理的豐富支持。
防流量衛兵
Sentinel是阿里巴巴開源的一款主打“流量控制”的組件,它秉承了阿里系組件十八班武藝樣樣精通的風格,與SpringCloud、Dubbo、甚至GRPC都可以很好的集成,在分布式流量控制(包括秒殺場景的突發流量場景)、熔斷、消息驅動下的削峰填谷等各個場景下都有穩定發揮,要知道它可是在背后默默支撐雙十一流控業務的頂梁柱。
本文已收錄至我的個人網站:程序員波特,主要記錄Java相關技術系列教程,共享電子書、Java學習路線、視頻教程、簡歷模板和面試題等學習資源,讓想要學習的你,不再迷茫。
總結
以上是生活随笔為你收集整理的Spring Cloud整体架构解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apollo系列之架构设计(一)
- 下一篇: 文心一言 VS 讯飞星火 VS chat