基于Spring Cloud的微服務(wù)架構(gòu)分析

Spring Cloud 的核心組件
1. Eureka(注冊(cè)中心)
Eureka服務(wù)端:也稱服務(wù)注冊(cè)中心,同其他服務(wù)注冊(cè)中心一樣,支持高可用配置。如果Eureka以集群模式部署,當(dāng)集群中有分片出現(xiàn)故障時(shí),那么Eureka就轉(zhuǎn)入自我保護(hù)模式。它允許在分片故障期間繼續(xù)提供服務(wù)的發(fā)現(xiàn)和注冊(cè),當(dāng)故障分片恢復(fù)運(yùn)行時(shí),集群中其他分片會(huì)把它們的狀態(tài)再次同步回來(lái)Eureka客戶端:主要處理服務(wù)的注冊(cè)與發(fā)現(xiàn)。客戶端服務(wù)通過(guò)注解和參數(shù)配置的方式,嵌入在客戶端應(yīng)用程序的代碼中,在應(yīng)用程序運(yùn)行時(shí),Eureka客戶端想注冊(cè)中心注冊(cè)自身提供的服務(wù)并周期性地發(fā)送心跳來(lái)更新它的服務(wù)租約。同時(shí),它也能從服務(wù)端查詢當(dāng)前注冊(cè)的服務(wù)信息并把它們緩存到本地并周期性地刷新服務(wù)狀態(tài)
2. Zuul(服務(wù)網(wǎng)關(guān))
3. Ribbon(負(fù)載均衡)
ribbonServerList服務(wù)端列表去輪詢?cè)L問(wèn)以達(dá)到服務(wù)均衡的作用。RibbonServerList會(huì)被DiscoveryEnabledNIWSServerList重寫(xiě),擴(kuò)展成從Eureka注冊(cè)中心中獲取服務(wù)端列表。同時(shí)它也會(huì)用NIWSDiscoveryPing來(lái)取代IPing,它將職責(zé)委托給Eureka來(lái)去定服務(wù)端是否已經(jīng)啟動(dòng)服務(wù)提供者只需要啟動(dòng)多個(gè)服務(wù)實(shí)例并且注冊(cè)到一個(gè)注冊(cè)中心或是多個(gè)相關(guān)聯(lián)的服務(wù)注冊(cè)中心 服務(wù)消費(fèi)者直接通過(guò)調(diào)用被@LoadBalanced注解修飾過(guò)的RestTemplate來(lái)實(shí)現(xiàn)面向服務(wù)的接口調(diào)用
4. Hystrix(熔斷保護(hù)器)
提供線程池不同的服務(wù)走不同的線程池,實(shí)現(xiàn)了不同服務(wù)調(diào)用的隔離,避免了服務(wù)器雪崩的問(wèn)題。
5. Feign(REST轉(zhuǎn)換器)
首先,對(duì)某個(gè)接口定義了@FeignClient注解,F(xiàn)eign就會(huì)針對(duì)這個(gè)接口創(chuàng)建一個(gè)動(dòng)態(tài)代理 接著調(diào)用接口的時(shí)候,本質(zhì)就是調(diào)用Feign創(chuàng)建的動(dòng)態(tài)代理 Feign的動(dòng)態(tài)代理會(huì)根據(jù)在接口上的@RequestMapping等注解,來(lái)動(dòng)態(tài)構(gòu)造要請(qǐng)求的服務(wù)的地址 針對(duì)這個(gè)地址,發(fā)起請(qǐng)求、解析響應(yīng)
首先Ribbon會(huì)從Eureka Client里獲取到對(duì)應(yīng)的服務(wù)注冊(cè)表,也就知道了所有的服務(wù)都部署在了哪些機(jī)器上,在監(jiān)聽(tīng)哪些端口 然后Ribbon就可以使用默認(rèn)的Round Robin算法,從中選擇一臺(tái)機(jī)器 Feign就會(huì)針對(duì)這臺(tái)機(jī)器,構(gòu)造并發(fā)起請(qǐng)求
6. Config(分布式配置)
注冊(cè)中心與API網(wǎng)關(guān)的分析
一個(gè)獨(dú)立的開(kāi)發(fā)團(tuán)隊(duì),為保證獨(dú)立自治,以及內(nèi)部多個(gè)微服務(wù)模塊間的交互集成,最好啟用獨(dú)立的服務(wù)注冊(cè)中心實(shí)現(xiàn)服務(wù)注冊(cè),發(fā)現(xiàn)能力。即開(kāi)發(fā)團(tuán)隊(duì)內(nèi)部多個(gè)微服務(wù)模塊間的集成,不需要通過(guò)網(wǎng)關(guān),只需要通過(guò)服務(wù)注冊(cè)中心進(jìn)行集成即可。 開(kāi)發(fā)團(tuán)隊(duì)需要暴露能力給外部,包括暴露能力給其它的開(kāi)發(fā)團(tuán)隊(duì),需要考慮將該API接口注冊(cè)到外部的網(wǎng)關(guān)上。在這里建議是拆分兩個(gè)獨(dú)立網(wǎng)關(guān),一個(gè)是內(nèi)部API網(wǎng)關(guān),一個(gè)是放置到DMZ區(qū)面對(duì)公網(wǎng)訪問(wèn)的API網(wǎng)關(guān)。對(duì)于服務(wù)如果同時(shí)涉及到內(nèi)部和外部使用,則兩邊注冊(cè)。建議不要通過(guò)兩次網(wǎng)關(guān)去路由,一個(gè)是影響性能,一個(gè)是不方便后續(xù)問(wèn)題排查。 構(gòu)建在開(kāi)發(fā)團(tuán)隊(duì)之外的API網(wǎng)關(guān)必須具備負(fù)載均衡能力,可以配置多個(gè)IP地址。通過(guò)該API網(wǎng)關(guān)也最好具備和Docker容器擴(kuò)展后的服務(wù)自動(dòng)注冊(cè)和地址加入擴(kuò)展能力。

Eureka 的競(jìng)品分析:Nacos、ZooKeeper、Etcd

Eureka
Spring Cloud Eureka所選擇的是AP,采用的是去中心化結(jié)構(gòu),放棄了強(qiáng)一致性。也就是說(shuō)Eureka集群中的各個(gè)結(jié)點(diǎn)都是平等的,沒(méi)有主從的概念。通過(guò)互相注冊(cè)的方式來(lái)進(jìn)行消息同步和保證高可用。并且一個(gè)Eureka Server結(jié)點(diǎn)掛掉了,還有其他同等的結(jié)點(diǎn)來(lái)提供服務(wù),并不會(huì)引發(fā)服務(wù)的中斷 Eureka只能當(dāng)注冊(cè)中心,想搞配置中心的話,還得搭配Spring Cloud Config+Spring Cloud Bus。其中后者支持Rabbiimq和Kafka兩種模式。 使用Java語(yǔ)言來(lái)開(kāi)發(fā)的,并且也是Spring Cloud的子項(xiàng)目,所以可以直接通過(guò)引入jar包的方式來(lái)集成Eureka,這點(diǎn)非常方便
1. ZooKeeper
Apache Zookeeper所選擇的是CP,也就是放棄了高可用性。Zookeeper集群在進(jìn)行消息同步的時(shí)候,必須有一半以上結(jié)點(diǎn)完成了同步才會(huì)返回;而當(dāng)Master結(jié)點(diǎn)掛了或者集群中有過(guò)半的結(jié)點(diǎn)不能工作了,此時(shí)就會(huì)觸發(fā)故障恢復(fù),重新進(jìn)行Master選舉。在這個(gè)過(guò)程中,整個(gè)Zookeeper集群無(wú)法對(duì)外提供服務(wù),從而實(shí)去了A(可用性) 為了達(dá)到C,Zookeeper采用的是自己的ZAB協(xié)議。
2. Nacos
Nacos一大特性是即支持CP,也支持AP。可以根據(jù)需要靈活選擇。 Nacos除了注冊(cè)中心之外,也能充當(dāng)配置中心的作用。且配置中心可以按照namespace,group等維度來(lái)進(jìn)行數(shù)據(jù)隔離,來(lái)達(dá)到不同環(huán)境之間配置隔離的功能。
值得一提的是,Nacos作為配置中心的持久化機(jī)制可以依賴于 Mysql來(lái)完成(默認(rèn)依賴于內(nèi)置數(shù)據(jù)庫(kù))。只需要將Nacos目錄下的sql腳本放到mysql中執(zhí)行(會(huì)生成11個(gè)表),然后在nacos配置文件里面配一下mysql的賬號(hào)密碼即可。這樣使用mysql作為數(shù)據(jù)源的方式相比于nacos內(nèi)置數(shù)據(jù)庫(kù)來(lái)說(shuō)更容易管理
3. Consul
Consul是用Go語(yǔ)言編寫(xiě)的,所以無(wú)法像Eureka那樣直接引入jar包就能集成,它還需要去服務(wù)器中進(jìn)行額外的安裝。 除了注冊(cè)中心的功能之外,Consul還能起到配置中心的作用。
Consul它保證的是CP,使用raft協(xié)議,要求必須有過(guò)半的結(jié)點(diǎn)都寫(xiě)入成功才算是注冊(cè)成功了,并且它也有Master和Follower的概念,在Master掛掉后,也需要自己內(nèi)部進(jìn)行
4. Etcd(待續(xù))
Spring Cloud 全家桶的簡(jiǎn)介

Spring Cloud Config:配置管理工具包,讓你可以把配置放到遠(yuǎn)程服務(wù)器,集中化管理集群配置,目前支持本地存儲(chǔ)、Git 以及 Subversion。 Spring Cloud Bus:事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態(tài)變化,可與 Spring Cloud Config 聯(lián)合實(shí)現(xiàn)熱部署。 Eureka:云端服務(wù)發(fā)現(xiàn),一個(gè)基于 REST 的服務(wù),用于定位服務(wù),以實(shí)現(xiàn)云端中間層服務(wù)發(fā)現(xiàn)和故障轉(zhuǎn)移。Hystrix:熔斷器,容錯(cuò)管理工具,旨在通過(guò)熔斷機(jī)制控制服務(wù)和第三方庫(kù)的節(jié)點(diǎn),從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力。Zuul:Zuul 是在云平臺(tái)上提供動(dòng)態(tài)路由,監(jiān)控,彈性,安全等邊緣服務(wù)的框架。Zuul 相當(dāng)于是設(shè)備和 Netflix 流應(yīng)用的 Web 網(wǎng)站后端所有請(qǐng)求的前門(mén)。Archaius:配置管理 API,包含一系列配置管理 API,提供動(dòng)態(tài)類(lèi)型化屬性、線程安全配置操作、輪詢框架、回調(diào)機(jī)制等功能。 Consul:封裝了 Consul 操作,Consul 是一個(gè)服務(wù)發(fā)現(xiàn)與配置工具,與 Docker 容器可以無(wú)縫集成。 Spring Cloud for Cloud Foundry:通過(guò) Oauth2 協(xié)議綁定服務(wù)到 CloudFoundry,CloudFoundry 是 VMware 推出的開(kāi)源 PaaS 云平臺(tái)。 Spring Cloud Sleuth:日志收集工具包,封裝了 Dapper 和 log-based 追蹤以及 Zipkin 和 HTrace 操作,為 Spring Cloud 應(yīng)用實(shí)現(xiàn)了一種分布式追蹤解決方案。 Spring Cloud Data Flow:大數(shù)據(jù)操作工具,作為 Spring XD 的替代產(chǎn)品,它是一個(gè)混合計(jì)算模型,結(jié)合了流數(shù)據(jù)與批量數(shù)據(jù)的處理方式。 Spring Cloud Security:基于 Spring Security 的安全工具包,為你的應(yīng)用程序添加安全控制。 Spring Cloud Zookeeper:操作 Zookeeper 的工具包,用于使用 Zookeeper 方式的服務(wù)發(fā)現(xiàn)和配置管理。 Spring Cloud Stream:數(shù)據(jù)流操作開(kāi)發(fā)包,封裝了與 Redis、Rabbit、Kafka 等發(fā)送接收消息。 Spring Cloud CLI:基于 Spring Boot CLI,可以讓你以命令行方式快速建立云組件。 Ribbon:提供云端負(fù)載均衡,有多種負(fù)載均衡策略可供選擇,可配合服務(wù)發(fā)現(xiàn)和斷路器使用。Turbine:Turbine 是聚合服務(wù)器發(fā)送事件流數(shù)據(jù)的一個(gè)工具,用來(lái)監(jiān)控集群下 Hystrix 的 Metrics 情況。 Feign:Feign 是一種聲明式、模板化的 HTTP 客戶端。Spring Cloud Task:提供云端計(jì)劃任務(wù)管理、任務(wù)調(diào)度。 Spring Cloud Connectors:便于云端應(yīng)用程序在各種 PaaS 平臺(tái)連接到后端,如:數(shù)據(jù)庫(kù)和消息代理服務(wù)。 Spring Cloud Cluster:提供 Leadership 選舉,如:Zookeeper,Redis,Hazelcast,Consul 等常見(jiàn)狀態(tài)模式的抽象和實(shí)現(xiàn)。 Spring Cloud Starters:Spring Boot 式的啟動(dòng)項(xiàng)目,為 Spring Cloud 提供開(kāi)箱即用的依賴管理。
參考文獻(xiàn)
Nacos PMC 朱鵬飛的深度技術(shù)分析 深入理解 Spring Cloud 核心組件與底層原理 Spring Cloud核心模型 & 案例匯集 基于電商網(wǎng)站的spring Cloud架構(gòu)分析 一個(gè)完整的Spring Cloud的分布式架構(gòu) Spring Cloud - Nacos與Eureka區(qū)別及如何選型 各大微服務(wù)注冊(cè)中心簡(jiǎn)單對(duì)比:ZooKeeper、Eureka、Consul 、Nacos 微服務(wù)網(wǎng)關(guān)和服務(wù)注冊(cè)中心 注冊(cè)中心與API網(wǎng)關(guān)不是這樣用的! Eureka介紹和部署 Eureka集群部署的踩坑記錄
一鍵生成Springboot & Vue項(xiàng)目!【畢設(shè)神器】
END
順便給大家推薦一個(gè)GitHub項(xiàng)目,這個(gè) GitHub 整理了上千本常用技術(shù)PDF,絕大部分核心的技術(shù)書(shū)籍都可以在這里找到,
GitHub地址:https://github.com/javadevbooks/books
Gitee地址:https://gitee.com/javadevbooks/books
電子書(shū)已經(jīng)更新好了,你們需要的可以自行下載了,記得點(diǎn)一個(gè)star,持續(xù)更新中..
評(píng)論
圖片
表情

