Spring Cloud簡介
一、Spring Cloud簡介
SpringCloud是微服務架構中的集成,將一系列優秀的組件進行了整合。基於SpringBoot構建,對熟希spring的程序員來說,表容易上手。
通過簡單的注解,就可以快速的在應用中配置一下常用模塊並構建龐大的分布式系統。
那么什么是“微服務架構”呢?簡單的說,微服務架構就是將一個完整的應用從數據存儲開始垂直拆分成多個不同的服務,每個服務都能獨立部署、獨立維護、獨立擴展,服務與服務間通過諸如RESTful API的方式互相調用。
SpringCloud的組件相當繁雜,擁有諸多子項目。重點關注NetFlix。
二、SpringCloud版本
SpringCloud項目是由多個獨立項目集合而成的,每一個項目都是獨立的,各自進行自己的版本迭代和版本發布。所以SpringCloud不方便使用版本號來管理,而是使用版本名。以避免和子項目版本號的沖突。
版本名的來源是倫敦的地鐵站名,以字母排序。比如最早的Release版本為Angel,第二個的Release版本為Brixton。
當一個版本的update積累的比較多或者解決了一個嚴重bug時,會發布一個ServiceRelease版本,簡稱SR,后面帶的數字為該大版本下的第一次發布。
從上圖可以看出,springcloud的F版本是基於springboot的2.0.x構建,之前的是基於springboot的1.5.x構建。
Spring Cloud的版本:Brixton、Camden、Dalston、Edgware、Finchley。
三、常用的5個組件
- Netflix Eureka - 服務發現
- Netflix Ribbon - 客戶端負載均衡
- Netflix Hystrix - 斷路器
- Netflix Zuul - 服務網關
- Spring Cloud Config - 分布式配置
3.1 Netflix Eureka
作用:實現服務治理(服務注冊和發現)
說明:Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。有兩個組件組成:Eureka服務端和Eureka客戶端。
Eureka服務端作用服務注冊中心,支持集群部署。
Eureka客戶端是一個java客戶端,用來處理服務注冊和發現。
原理:在應用啟動時,Eureka客戶端向服務端注冊自己的服務信息,同時將服務端的服務信息緩存到本地,客戶端會和服務端周期性買的進行心跳交互,以便更新服務租約和服務信息。
3.2 Netflix Ribbon
作用:Ribbon 主要提供客戶側的軟件負載均衡算法。
說明:Spring Cloud Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具,它基於Netflix Ribbon實現。通過Spring Cloud的封裝,可以輕松的將面向服務的REST模板請求自動轉換成客戶端負載均衡的服務調用。
關鍵點就是將外界的rest調用,根據負載均衡策略轉換為微服務的調用。Ribbon有比較多的負載均衡策略,可自行查閱資料。
3.3 Netflix Hystrix
作用:斷路器,保護系統,控制故障范圍。
說明:為了保證其高可用,單個服務通常會集群部署。由於網絡原因或者自身的原因,服務並不能保證100%可用,如果單個服務器出現問題,調用這個服務就會出現線程阻塞,此時若大量的請求涌入,Servlet容器的線程資源會被消耗完畢,導致服務癱瘓。服務於服務之間的依賴性,故障會傳播,會對整個微服務系統造成災難性的嚴重后果,這就是服務器故障的“”“雪崩”效應。
3.4 Netflix Zuul
作用:api網關,路由,負載均衡等多種作用
說明:類似nginx,方向代理的功能,不過netflix自己增加了一些配合其他組件的特性。
在微服務架構中,后端服務往往不直接開發給調用端,而是通過一個api網關根據請求的url,路由到相應的服務。當添加API網關后,在第三方調用端和服務提供方之間就創建了一面牆,在這面牆直接與調用方通信進行權限控制,后將請求均衡分發給后台服務端。
3.5 Spring Cloud Config
作用:配置管理
說明:Spring Cloud Config提供服務端和客戶端。服務器存儲后端的默認實現使用git,因此它輕松支持標簽的配置環境,可以訪問作用於管理內部的各種工具。這個是靜態的,得配合Spring Cloud Bus實現動態的配置更新。