?一、Spring Cloud簡(jiǎn)介
SpringCloud是微服務(wù)架構(gòu)中的集成,將一系列優(yōu)秀的組件進(jìn)行了整合?;赟pringBoot構(gòu)建,對(duì)熟希spring的程序員來(lái)說(shuō),表容易上手。
通過(guò)簡(jiǎn)單的注解,就可以快速的在應(yīng)用中配置一下常用模塊并構(gòu)建龐大的分布式系統(tǒng)。
那么什么是“微服務(wù)架構(gòu)”呢?簡(jiǎn)單的說(shuō),微服務(wù)架構(gòu)就是將一個(gè)完整的應(yīng)用從數(shù)據(jù)存儲(chǔ)開始垂直拆分成多個(gè)不同的服務(wù),每個(gè)服務(wù)都能獨(dú)立部署、獨(dú)立維護(hù)、獨(dú)立擴(kuò)展,服務(wù)與服務(wù)間通過(guò)諸如RESTful API的方式互相調(diào)用。
SpringCloud的組件相當(dāng)繁雜,擁有諸多子項(xiàng)目。重點(diǎn)關(guān)注NetFlix。

二、SpringCloud版本
SpringCloud項(xiàng)目是由多個(gè)獨(dú)立項(xiàng)目集合而成的,每一個(gè)項(xiàng)目都是獨(dú)立的,各自進(jìn)行自己的版本迭代和版本發(fā)布。所以SpringCloud不方便使用版本號(hào)來(lái)管理,而是使用版本名。以避免和子項(xiàng)目版本號(hào)的沖突。
版本名的來(lái)源是倫敦的地鐵站名,以字母排序。比如最早的Release版本為Angel,第二個(gè)的Release版本為Brixton。
當(dāng)一個(gè)版本的update積累的比較多或者解決了一個(gè)嚴(yán)重bug時(shí),會(huì)發(fā)布一個(gè)ServiceRelease版本,簡(jiǎn)稱SR,后面帶的數(shù)字為該大版本下的第一次發(fā)布。

從上圖可以看出,springcloud的F版本是基于springboot的2.0.x構(gòu)建,之前的是基于springboot的1.5.x構(gòu)建。
Spring Cloud的版本:Brixton、Camden、Dalston、Edgware、Finchley。
三、常用的5個(gè)組件
Netflix Eureka - 服務(wù)發(fā)現(xiàn)
Netflix Ribbon - 客戶端負(fù)載均衡
Netflix Hystrix - 斷路器
Netflix Zuul - 服務(wù)網(wǎng)關(guān)
Spring Cloud Config - 分布式配置
3.1 Netflix Eureka

作用:實(shí)現(xiàn)服務(wù)治理(服務(wù)注冊(cè)和發(fā)現(xiàn))
說(shuō)明:Spring Cloud Eureka是Spring Cloud Netflix項(xiàng)目下的服務(wù)治理模塊。有兩個(gè)組件組成:Eureka服務(wù)端和Eureka客戶端。
? ? Eureka服務(wù)端作用服務(wù)注冊(cè)中心,支持集群部署。
? ? ? ? ? ?Eureka客戶端是一個(gè)java客戶端,用來(lái)處理服務(wù)注冊(cè)和發(fā)現(xiàn)。
原理:在應(yīng)用啟動(dòng)時(shí),Eureka客戶端向服務(wù)端注冊(cè)自己的服務(wù)信息,同時(shí)將服務(wù)端的服務(wù)信息緩存到本地,客戶端會(huì)和服務(wù)端周期性買的進(jìn)行心跳交互,以便更新服務(wù)租約和服務(wù)信息。
3.2 Netflix Ribbon

作用:Ribbon 主要提供客戶側(cè)的軟件負(fù)載均衡算法。
說(shuō)明:Spring Cloud Ribbon是一個(gè)基于HTTP和TCP的客戶端負(fù)載均衡工具,它基于Netflix Ribbon實(shí)現(xiàn)。通過(guò)Spring Cloud的封裝,可以輕松的將面向服務(wù)的REST模板請(qǐng)求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用。
關(guān)鍵點(diǎn)就是將外界的rest調(diào)用,根據(jù)負(fù)載均衡策略轉(zhuǎn)換為微服務(wù)的調(diào)用。Ribbon有比較多的負(fù)載均衡策略,可自行查閱資料。
3.3 Netflix Hystrix

作用:斷路器,保護(hù)系統(tǒng),控制故障范圍。
說(shuō)明:為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)器出現(xiàn)問(wèn)題,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)線程阻塞,此時(shí)若大量的請(qǐng)求涌入,Servlet容器的線程資源會(huì)被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)于服務(wù)之間的依賴性,故障會(huì)傳播,會(huì)對(duì)整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)器故障的“”“雪崩”效應(yīng)。

作用:api網(wǎng)關(guān),路由,負(fù)載均衡等多種作用
說(shuō)明:類似nginx,方向代理的功能,不過(guò)netflix自己增加了一些配合其他組件的特性。
在微服務(wù)架構(gòu)中,后端服務(wù)往往不直接開發(fā)給調(diào)用端,而是通過(guò)一個(gè)api網(wǎng)關(guān)根據(jù)請(qǐng)求的url,路由到相應(yīng)的服務(wù)。當(dāng)添加API網(wǎng)關(guān)后,在第三方調(diào)用端和服務(wù)提供方之間就創(chuàng)建了一面墻,在這面墻直接與調(diào)用方通信進(jìn)行權(quán)限控制,后將請(qǐng)求均衡分發(fā)給后臺(tái)服務(wù)端。
3.5 Spring Cloud Config

作用:配置管理
說(shuō)明:Spring Cloud Config提供服務(wù)端和客戶端。服務(wù)器存儲(chǔ)后端的默認(rèn)實(shí)現(xiàn)使用git,因此它輕松支持標(biāo)簽的配置環(huán)境,可以訪問(wèn)作用于管理內(nèi)部的各種工具。這個(gè)是靜態(tài)的,得配合Spring Cloud Bus實(shí)現(xiàn)動(dòng)態(tài)的配置更新。