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