服務(wù)發(fā)現(xiàn)——Netflix Eureka
服務(wù)調(diào)用——Netflix Feign
熔斷器——Netflix Hystrix
服務(wù)網(wǎng)關(guān)——Netflix Zuul
分布式配置——Spring Cloud Config
消息總線? —— Spring Cloud Bus
總結(jié)
服務(wù)發(fā)現(xiàn)——Netflix Eureka
在許多分布式系統(tǒng)架構(gòu)中并淋,都需要去獲取機(jī)器的物理地址(微服務(wù)實(shí)例部署的服務(wù)器地址及端口)贮预。這一認(rèn)知在分布式系統(tǒng)架構(gòu)開始的時(shí)候就已經(jīng)存在鸣哀,而等到分布式計(jì)算出現(xiàn)的時(shí)候奶赠,被正式稱為服務(wù)發(fā)現(xiàn)(service discovery)蚊丐。
服務(wù)發(fā)現(xiàn)可以做一些簡(jiǎn)單的事情射富,比如維護(hù)一個(gè)帶有所有遠(yuǎn)程服務(wù)地址的屬性文件唧垦,或一個(gè)UDDI(Universal Description, Discovery and Integration)存儲(chǔ)庫。
服務(wù)調(diào)用——Netflix Feign
Eureka作為服務(wù)注冊(cè)中心查刻,在服務(wù)啟動(dòng)后,各個(gè)微服務(wù)會(huì)將自己注冊(cè)到Eureka server凤类。那么服務(wù)之間是如何調(diào)用穗泵?
但是在實(shí)際開發(fā)中,項(xiàng)目中會(huì)有很多的服務(wù)間的調(diào)用谜疤,對(duì)于服務(wù)的調(diào)用不可能是一處佃延。所以我們針對(duì)各個(gè)服務(wù)自行封裝一些客戶端類來包裝這些依賴服務(wù)的調(diào)用。
? ? ? SpringCloud Feign就在這個(gè)基礎(chǔ)上做了封裝夷磕,他可以幫助我們定義接口苇侵。開發(fā)時(shí)候只需要定義接口并添加相應(yīng)的注解,大大的簡(jiǎn)化了使用ribbon的開發(fā)量企锌。
熔斷器——Netflix Hystrix
在分布式架構(gòu)中榆浓,一個(gè)應(yīng)用依賴多個(gè)服務(wù)是非常常見的,如果其中一個(gè)依賴由于延遲過高發(fā)生阻塞撕攒,調(diào)用該依賴服務(wù)的線程就會(huì)阻塞陡鹃,如果相關(guān)業(yè)務(wù)的QPS較高烘浦,就可能產(chǎn)生大量阻塞,從而導(dǎo)致該應(yīng)用/服務(wù)由于服務(wù)器資源被耗盡而拖垮萍鲸。
另外闷叉,故障也會(huì)在應(yīng)用之間傳遞,如果故障服務(wù)的上游依賴較多脊阴,可能會(huì)引起服務(wù)的雪崩效應(yīng)握侧。就跟數(shù)據(jù)癱瘓,會(huì)引起依賴該數(shù)據(jù)庫的應(yīng)用癱瘓是一樣的道理嘿期。
Netflix Hystrix是SOA/微服務(wù)架構(gòu)中提供服務(wù)隔離品擎、熔斷、降級(jí)機(jī)制的工具/框架备徐。Netflix Hystrix是斷路器的一種實(shí)現(xiàn)萄传,用于高微服務(wù)架構(gòu)的可用性,是防止服務(wù)出現(xiàn)雪崩的利器蜜猾。
服務(wù)網(wǎng)關(guān)——Netflix Zuul
服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中一個(gè)不可或缺的部分秀菱。通過服務(wù)網(wǎng)關(guān)統(tǒng)一向外系統(tǒng)提供REST API的過程中,除了具備服務(wù)路由蹭睡、均衡負(fù)載功能之外衍菱,它還具備了權(quán)限控制等功能。Spring Cloud Netflix中的Zuul就擔(dān)任了這樣的一個(gè)角色肩豁,為微服務(wù)架構(gòu)提供了前門保護(hù)的作用脊串,同時(shí)將權(quán)限控制這些較重的非業(yè)務(wù)邏輯內(nèi)容遷移到服務(wù)路由層面,使得服務(wù)集群主體能夠具備更高的可復(fù)用性和可測(cè)試性蓖救。
分布式配置——Spring Cloud Config
Spring Cloud Config為服務(wù)端和客戶端提供了分布式系統(tǒng)的外部化配置支持洪规。配置服務(wù)器為各應(yīng)用的所有環(huán)境提供了一個(gè)中心化的外部配置。它實(shí)現(xiàn)了對(duì)服務(wù)端和客戶端對(duì)Spring Environment和PropertySource抽象的映射循捺,所以它除了適用于Spring構(gòu)建的應(yīng)用程序斩例,也可以在任何其他語言運(yùn)行的應(yīng)用程序中使用。作為一個(gè)應(yīng)用可以通過部署管道來進(jìn)行測(cè)試或者投入生產(chǎn)从橘,我們可以分別為這些環(huán)境創(chuàng)建配置念赶,并且在需要遷移環(huán)境的時(shí)候獲取對(duì)應(yīng)環(huán)境的配置來運(yùn)行。
置服務(wù)器默認(rèn)采用git來存儲(chǔ)配置信息恰力,這樣就有助于對(duì)環(huán)境配置進(jìn)行版本管理叉谜,并且可以通過git客戶端工具來方便的管理和訪問配置內(nèi)容。當(dāng)然他也提供本地化文件系統(tǒng)的存儲(chǔ)方式踩萎。
使用 spring Cloud 進(jìn)行集中式配置管理停局,將以往的配置文件從項(xiàng)目中摘除后放到Git 或svn中集中管理,并在需要變更的時(shí)候,可以通知到各應(yīng)用程序董栽,應(yīng)用程序刷新配置不需要重啟码倦。
消息總線 —— Spring Cloud Bus
Spring Cloud Bus將分布式系統(tǒng)的節(jié)點(diǎn)與輕量級(jí)消息代理鏈接。這可以用于廣播狀態(tài)更改(例如配置更改)或其他管理指令锭碳。一個(gè)關(guān)鍵的想法是袁稽,總線就像一個(gè)分布式執(zhí)行器,用于擴(kuò)展的Spring Boot應(yīng)用程序擒抛,但也可以用作應(yīng)用程序之間的通信通道推汽。目前唯一的實(shí)現(xiàn)是使用AMQP代理作為傳輸,但是相同的基本功能集(還有一些取決于傳輸)在其他傳輸?shù)穆肪€圖上歧沪。
總結(jié)
? ? ? 我們使用Spring Cloud Netflix中的Eureka實(shí)現(xiàn)了服務(wù)注冊(cè)中心以及服務(wù)注冊(cè)與發(fā)現(xiàn)歹撒;而服務(wù)間通過Ribbon或Feign實(shí)現(xiàn)服務(wù)的消費(fèi)以及均衡負(fù)載;通過Spring Cloud Config實(shí)現(xiàn)了應(yīng)用多環(huán)境的外部化配置以及版本管理槽畔。為了使得服務(wù)集群更為健壯栈妆,使用Hystrix的融斷機(jī)制來避免在微服務(wù)架構(gòu)中個(gè)別服務(wù)出現(xiàn)異常時(shí)引起的故障蔓延胁编。
? ? ? 在該架構(gòu)中厢钧,我們的服務(wù)集群包含:內(nèi)部服務(wù)Service A和Service B,他們都會(huì)注冊(cè)與訂閱服務(wù)至Eureka Server嬉橙,而Open Service是一個(gè)對(duì)外的服務(wù)早直,通過均衡負(fù)載公開至服務(wù)調(diào)用方,這種公開當(dāng)時(shí)是通過服務(wù)網(wǎng)關(guān)——Netflix Zuul市框。