生活随笔
收集整理的這篇文章主要介紹了
Spring Cloud 五大组件
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Spring Cloud 五大組件 1. 簡(jiǎn)介 2. Eureka 3. Ribbon 4. Feign 5. Zuul 6. Hystrix
1. 簡(jiǎn)介
Spring Cloud全家桶是Pivotal團(tuán)隊(duì)提供的一整套微服務(wù)開(kāi)源解決方案,包括服務(wù)注冊(cè)與發(fā)現(xiàn)、配置中心、全鏈路監(jiān)控、服務(wù)網(wǎng)關(guān)、負(fù)載均衡、熔斷器等組件。 這是一個(gè)Spring Cloud 五大組件運(yùn)行流程示例: 服務(wù)注冊(cè):只有一個(gè)服務(wù)注冊(cè)到注冊(cè)中心,才可能被其他服務(wù)發(fā)現(xiàn)并調(diào)用; 服務(wù)發(fā)現(xiàn):即一個(gè)服務(wù)通過(guò)注冊(cè)中心發(fā)現(xiàn)了其他服務(wù); 負(fù)載均衡:客戶(hù)端維護(hù)一份從注冊(cè)中心獲取的Provider列表清單,根據(jù)自己配置的Provider負(fù)載均衡選擇算法在客戶(hù)端進(jìn)行請(qǐng)求的分發(fā)。 服務(wù)調(diào)用:一個(gè)服務(wù)對(duì)另一個(gè)服務(wù)進(jìn)行調(diào)用; 隔離、熔斷與降級(jí):通過(guò)Hystrix的線程池去訪問(wèn)服務(wù),不同的服務(wù)通過(guò)不同的線程池,實(shí)現(xiàn)了不同的服務(wù)調(diào)度隔離;如果服務(wù)出現(xiàn)故障,通過(guò)服務(wù)熔斷,避免服務(wù)雪崩的問(wèn)題 ;并且通過(guò)服務(wù)降級(jí),保證可以手動(dòng)實(shí)現(xiàn)服務(wù)正常功能; 網(wǎng)關(guān)路由:如果前端調(diào)用后臺(tái)系統(tǒng),統(tǒng)一從網(wǎng)關(guān)進(jìn)入,通過(guò)網(wǎng)關(guān)轉(zhuǎn)發(fā)請(qǐng)求給對(duì)應(yīng)的服務(wù);
2. Eureka
在微服務(wù)架構(gòu)系統(tǒng)中,由于各服務(wù)單元顆粒度較小、數(shù)量眾多,相互之間呈現(xiàn)網(wǎng)狀依賴(lài)關(guān)系,因此需要服務(wù)注冊(cè)中心來(lái)統(tǒng)一管理微服務(wù)實(shí)例,維護(hù)各服務(wù)實(shí)例的健康狀態(tài)。 Spring Cloud Eureka是Spring Cloud Netflix微服務(wù)套件的一部分,基于Netflix Eureka做了二次封裝,主要負(fù)責(zé)完成微服務(wù)實(shí)例的自動(dòng)注冊(cè)與發(fā)現(xiàn) ,這也是微服務(wù)架構(gòu)中的核心和基礎(chǔ)功能。 Eureka服務(wù)冶理體系中的三個(gè)核心角色:服務(wù)注冊(cè)中心 、服務(wù)提供者 以及服務(wù)消費(fèi)者 ,其中服務(wù)提供者以及服務(wù)消費(fèi)者都屬于Eureka Client 。 Eureka Server 的主要功能為服務(wù)注冊(cè)表維護(hù) 和服務(wù)健康檢查 ;Eureka Client 的主要功能為服務(wù)注冊(cè) 、心跳續(xù)約 與健康狀況查詢(xún) ;服務(wù)提供者的服務(wù)注冊(cè)和心跳續(xù)約一般都會(huì)通過(guò)注冊(cè)中心客戶(hù)端組件 來(lái)完成。注冊(cè)中心客戶(hù)端組件還有服務(wù)發(fā)現(xiàn) 和實(shí)例緩存 的功能; Eureka Server 的設(shè)計(jì)一開(kāi)始就考慮了高可用問(wèn)題,將自己作為服務(wù)向其他服務(wù)注冊(cè)中心注冊(cè)自己,這樣就可以形成一組互相注冊(cè)的服務(wù)注冊(cè)中心,以實(shí)現(xiàn)服務(wù)清單的互相同步,達(dá)到高可用的效果。 更多Eureka相關(guān)的內(nèi)容,可以參考 Spring Cloud 之 Eureka;
3. Ribbon
Ribbon就是一個(gè)客戶(hù)端的負(fù)載均衡開(kāi)源組件,是Netflix發(fā)布的開(kāi)源項(xiàng)目。它不像服務(wù)注冊(cè)中心Eureka Server、配置中心Spring Cloud Config那樣獨(dú)立部署,而是作為基礎(chǔ)設(shè)施模塊,幾乎存在于每個(gè)Spring Cloud微服務(wù)提供者中。 Feign組件自身不具備負(fù)載均衡能力,Spring Cloud Feign是通過(guò)集成Ribbon組件實(shí)現(xiàn)客戶(hù)端的負(fù)載均衡。微服務(wù)間的RPC調(diào)用以及API網(wǎng)關(guān)的代理請(qǐng)求的RPC轉(zhuǎn)發(fā)調(diào)用,實(shí)際上都需要通過(guò)Ribbon來(lái)實(shí)現(xiàn)負(fù)載均衡。 Ribbon在客戶(hù)端以輪詢(xún)、隨機(jī)、權(quán)重等多種方式實(shí)現(xiàn)負(fù)載均衡。 從Eureka Client實(shí)例獲取Provider服務(wù)列表清單,并且定期通過(guò)IPing實(shí)例判斷清單中Provider服務(wù)實(shí)例的可用性。每次RPC調(diào)用到來(lái)時(shí),在Provider服務(wù)列表清單中根據(jù)IRule策略類(lèi)的Bean計(jì)算出每次RPC要訪問(wèn)的最終Provider。 Ribbon可以獲取Provider清單,并且通過(guò)IPing實(shí)例定期(如每10秒)向每個(gè)Provider實(shí)例發(fā)送“ping”,并且根據(jù)Provider是否有響應(yīng)來(lái)判斷該P(yáng)rovider實(shí)例是否可用。如果該P(yáng)rovider的可用性發(fā)生了改變,或者Provider清單中的數(shù)量和之前的不一致,就從注冊(cè)中心更新或者重新拉取Provider服務(wù)實(shí)例清單。每次RPC請(qǐng)求到來(lái)時(shí),由Ribbon的IRule負(fù)載均衡策略接口的某個(gè)實(shí)現(xiàn)類(lèi)來(lái)進(jìn)行負(fù)載均衡。 更多Ribbon相關(guān)的內(nèi)容,可以參考 Spring Cloud 之 Ribbon;
4. Feign
Feign 使用了動(dòng)態(tài)代理,使用@FeignClient調(diào)用接口的本質(zhì)就是調(diào)用Feign創(chuàng)建的動(dòng)態(tài)代理,然后根據(jù)接口上的@RequestMapping等注解,來(lái)動(dòng)態(tài)構(gòu)造出要請(qǐng)求的服務(wù)的地址并對(duì)這個(gè)地址發(fā)起請(qǐng)求、解析響應(yīng)。 在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 請(qǐng)求訪問(wèn)遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開(kāi)發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程方法,更感知不到在訪問(wèn) HTTP 請(qǐng)求。 Feign 整合了 Ribbon 和 Hystrix,具備負(fù)載均衡、隔離、熔斷與降級(jí)功能; 更多Feign的相關(guān)內(nèi)容,可以參考 Spring Cloud 之 Feign 簡(jiǎn)介及簡(jiǎn)單使用;
5. Zuul
微服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中不可或缺的部分,它統(tǒng)一解決Provider路由、均衡負(fù)載、權(quán)限控制等功能。 Zuul的功能大致有: 路由:將不同REST請(qǐng)求轉(zhuǎn)發(fā)至不同的微服務(wù)提供者,其作用類(lèi)似于Nginx的反向代理。同時(shí),也起到了統(tǒng)一端口的作用,將很多微服務(wù)提供者的不同端口統(tǒng)一到了Zuul的服務(wù)端口。 認(rèn)證:網(wǎng)關(guān)直接暴露在公網(wǎng)上時(shí),終端要調(diào)用某個(gè)服務(wù),通常會(huì)把登錄后的token(令牌)傳過(guò)來(lái),網(wǎng)關(guān)層對(duì)token進(jìn)行有效性驗(yàn)證。如果token無(wú)效(或沒(méi)有token),就不允許訪問(wèn)REST服務(wù)??梢越Y(jié)合Spring Security中的認(rèn)證機(jī)制完成Zuul網(wǎng)關(guān)的安全認(rèn)證。 限流:高并發(fā)場(chǎng)景下瞬時(shí)流量不可預(yù)估,為了保證服務(wù)對(duì)外的穩(wěn)定性,限流成為每個(gè)應(yīng)用必備的一道安全防火墻。如果沒(méi)有這道安全防火墻,那么請(qǐng)求的流量超過(guò)服務(wù)的負(fù)載能力時(shí)很容易造成整個(gè)服務(wù)的癱瘓。 負(fù)載均衡:在多個(gè)微服務(wù)提供者之間按照多種策略實(shí)現(xiàn)負(fù)載均衡。 更多Zuul的相關(guān)內(nèi)容,可以參考 Spring Cloud 之 Zuul;
6. Hystrix
隔離:通過(guò)Hystrix的線程池去訪問(wèn)服務(wù),不同的服務(wù)通過(guò)不同的線程池,實(shí)現(xiàn)了不同的服務(wù)調(diào)度隔離; 熔斷:分布式架構(gòu)中的熔斷器主要用于RPC接口上,為接口安裝上“保險(xiǎn)絲”,以防止RPC接口出現(xiàn)擁塞時(shí)導(dǎo)致系統(tǒng)壓力過(guò)大而引起的系統(tǒng)癱瘓,當(dāng)RPC接口流量過(guò)大或者目標(biāo)Provider出現(xiàn)異常時(shí),熔斷器及時(shí)切斷故障可以起到自我保護(hù)的作用。 降級(jí):當(dāng)服務(wù)不可用(服務(wù)正在等待、鏈接超時(shí)、網(wǎng)絡(luò)延遲、服務(wù)器響應(yīng)慢等),客戶(hù)端一直等待時(shí),調(diào)用fallback方法給客戶(hù)端返回一個(gè)錯(cuò)誤提示,不讓客戶(hù)端繼續(xù)等待。 更多Hystrix的相關(guān)內(nèi)容,可以參考 Spring Cloud 之 Hystrix;
總結(jié)
以上是生活随笔 為你收集整理的Spring Cloud 五大组件 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。