1、Spring Cloud Config
配置中心組件
作用:通過版本同步工具對(duì)配置進(jìn)行統(tǒng)一管理,使得項(xiàng)目配置自動(dòng)化,特別對(duì)于集群系統(tǒng),無需手動(dòng)管理每個(gè)子節(jié)點(diǎn)系統(tǒng)的配置
使用:啟動(dòng)類加上注解@ConfigApplication;服務(wù)端配置獲取配置的git地址(或者本地);客戶服務(wù)端地址(或在結(jié)合Eureka使用時(shí)配置服務(wù)名)
2、Spring Cloud Eureka
服務(wù)發(fā)現(xiàn)組件
作用:統(tǒng)一管理各服務(wù),維系各服務(wù)狀態(tài),實(shí)現(xiàn)服務(wù)的高可用性;向消費(fèi)者(客戶端)暴露抽象的服務(wù)名,隱藏服務(wù)實(shí)例的細(xì)節(jié)
使用:
客戶端:使用@EnableEurekaClient注解;配置注冊(cè)中心地址
服務(wù)端:使用@EnableEurekaServer注解;配置自身地址
3、Spring Cloud Ribbon
客戶端均衡負(fù)載組件
作用:在客戶端實(shí)現(xiàn)對(duì)服務(wù)實(shí)例的負(fù)載均衡調(diào)用
使用:Eureka客戶端依賴已包含了Ribbon依賴,在提供http客戶端(RestTemplate或WebClient)的方法上加@LoadBalanced即可自動(dòng)進(jìn)行均衡負(fù)載調(diào)用
原理:在http客戶端發(fā)送請(qǐng)求時(shí)Ribbon將對(duì)其進(jìn)行攔截,并做了以下工作:首先從先前獲取的實(shí)例列表中查找對(duì)應(yīng)某個(gè)服務(wù)的那些實(shí)例,然后根據(jù)負(fù)載均衡算法選取一個(gè)實(shí)例重新構(gòu)造請(qǐng)求
4、Spring Cloud Hystrix
斷路器組件
作用:
在基于傳統(tǒng)Web容器構(gòu)建的復(fù)雜項(xiàng)目中,對(duì)服務(wù)的每次調(diào)用都由1個(gè)線程完成(同步阻塞的),一旦某個(gè)服務(wù)運(yùn)行緩慢或在調(diào)用時(shí)發(fā)生了網(wǎng)絡(luò)阻塞問題,執(zhí)行該次調(diào)用的線程將一直阻塞不能被釋放,而且往后對(duì)于此下游服務(wù)的所有調(diào)用都將發(fā)生阻塞,那么在將來的某個(gè)時(shí)刻,該Web容器線程池中的線程將被耗盡,無法響應(yīng)任何上游服務(wù)的調(diào)用,而上游服務(wù)也將如該層服務(wù)一樣無法響應(yīng)其他服務(wù)的調(diào)用,最終整個(gè)系統(tǒng)將走向崩潰(“雪崩”效應(yīng))。
Hystrix可以根據(jù)配置對(duì)這些意外情況做出處理,如當(dāng)調(diào)用超時(shí)時(shí)快速失敗或觸發(fā)其他響應(yīng)等,并且隔離對(duì)不同服務(wù)的調(diào)用
使用:啟動(dòng)類加上@EnableHystrix注解,在需要監(jiān)控的方法上加@HystrixCommand,并在該注解內(nèi)配置對(duì)故障的處理方案(如超時(shí)時(shí)長,失敗后調(diào)用的后備方法、執(zhí)行線程池等)
原理:Hystrix會(huì)對(duì)方法進(jìn)行封裝,令其調(diào)用發(fā)生在指定的線程池內(nèi)(默認(rèn)是一個(gè)包含20個(gè)線程的線程池),當(dāng)我們對(duì)不同服務(wù)的調(diào)用就相互隔離了,即使負(fù)責(zé)某個(gè)服務(wù)的所有線程的全部阻塞對(duì)其他服務(wù)的調(diào)用仍可正常進(jìn)行。
另外,Spring 自5版本后推出了基于Netty容器的異步非阻塞技術(shù)棧WebFlux ,因?yàn)镹etty不同于傳統(tǒng)的Web容器,它對(duì)于IO有著自己處理方案,不會(huì)有“某一線程等待IO的情況”發(fā)生;而且WebFlux自身包含的Reactor庫更是提供了超時(shí)、重試、背壓等特性,所以當(dāng)使用此套技術(shù)棧時(shí)也許不需要引入Hystrix。
5、Spring Cloud Zuul
網(wǎng)關(guān)組件
作用:將網(wǎng)關(guān)作為一項(xiàng)單獨(dú)的服務(wù)抽離出來,為各接口提供統(tǒng)一的動(dòng)態(tài)路由、反向代理、過濾、權(quán)限校驗(yàn)、監(jiān)控等功能
使用:結(jié)合Eureka使用,默認(rèn)已提供了服務(wù)名——服務(wù)的路由映射,如需更改需要額外配置忽略的原服務(wù)
原理:Zuul提供的功能都基于一個(gè)個(gè)的過濾器實(shí)現(xiàn),當(dāng)我們需要在某個(gè)路由上執(zhí)行自定義邏輯時(shí)就可以定義自己的過濾器,完全控制路由的行為。