Spring Cloud 簡單總結
一:什麼是微服務(Microservice)
微服務英文名稱Microservice,Microservice架構模式就是將整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨立地編譯及部署,並通過各自暴露的API介面相互通訊。它們彼此相互協作,作為一個整體為使用者提供功能,卻可以獨立地進行擴。
微服務架構需要的功能或使用場景
1:我們把整個系統根據業務拆分成幾個子系統。
2:每個子系統可以部署多個應用,多個應用之間使用負載均衡。
3:需要一個服務註冊中心,所有的服務都在註冊中心註冊,負載均衡也是通過在註冊中心註冊的服務來使用一定策略來實現。
4:所有的客戶端都通過同一個閘道器地址訪問後臺的服務,通過路由配置,閘道器來判斷一個URL請求由哪個服務處理。請求轉發到服務上的時候也使用負載均衡。
5:服務之間有時候也需要相互訪問。例如有一個使用者模組,其他服務在處理一些業務的時候,要獲取使用者服務的使用者資料。
6:需要一個斷路器,及時處理服務呼叫時的超時和錯誤,防止由於其中一個服務的問題而導致整體系統的癱瘓。
7:還需要一個監控功能,監控每個服務呼叫花費的時間等。
二:Spring Cloud 基本知識介紹
升級到 Spring boot 2.0.0,引入 Swagger 生成 api 文件。
service-feign(服務的消費:服務與服務之間的呼叫) 服務呼叫端程式碼抽象和封裝——Feign
@FeignClient 對內部服務之前提供呼叫
Feign是一種宣告式、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠端服務時能與呼叫本地方法一樣的編碼體驗,開發者完全感知不到這是遠端方法,更感知不到這是個HTTP請求。
比如:訪問feign服務的hi介面,出現訪問hello和hello2的資訊迴圈出現,因為hi介面內部呼叫的hello服務。
Ribbon,客戶端負載均衡,重試機制。
Hystrix,客戶端容錯保護,服務熔斷、請求快取、請求合併、依賴隔離。
Feign,宣告式服務呼叫,本質上就是Ribbon+Hystrix
Spring boot Admin(監控)
spring boot admin為spring boot應用提供了整合的檢視,應用的詳情檢視提供了應用本身及執行時環境(OS和JVM)運維比較關心的資料,應用的執行時資訊,log輸出,metrics統計,environment和logging level實時調整,thread執行緒執行時狀態,trace,audit和Hystrix
zuul(路由閘道器)對外提供呼叫入口
Zuul的主要功能是路由轉發和過濾器。路由功能是微服務的一部分,比如/api/user轉發到到user服務,/api/shop轉發到到shop服務。zuul預設實現了負載均衡的功能。
Zuul:類似於閘道器,反向代理。為外部請求提供統一入口。
由於Spring Cloud為服務治理做了一層抽象介面,所以在Spring Cloud應用中可以支援多種不同的服務治理框架,比如:Netflix Eureka、Consul、Zookeeper
- 最大的區別是Eureka保證AP, Consul為CP。
- 一致性(Consistency)
- 可用性(Availability)
- 分割槽容忍性(Partition tolerance)
Consul強一致性(C)帶來的是:
- 服務註冊相比Eureka會稍慢一些。因為Consul的raft協議要求必須過半數的節點都寫入成功才認為註冊成功
- Leader掛掉時,重新選舉期間整個consul不可用。保證了強一致性但犧牲了可用性。
Eureka保證高可用(A)和最終一致性:
- 服務註冊相對要快,因為不需要等註冊資訊replicate到其他節點,也不保證註冊資訊是否replicate成功
- 當資料出現不一致時,雖然A, B上的註冊資訊不完全相同,但每個Eureka節點依然能夠正常對外提供服務,這會出現查詢服務資訊時如果請求A查不到,但請求B就能查到。如此保證了可用性但犧牲了一致性。
在業界,一般有兩種微服務的實踐方法:基於dubbo的微服務架構、基於Spring Cloud的微服務架構。從概念上來講,Dubbo和Spring Cloud並不能放在一起對比,
因為Dubbo僅僅是一個RPC框架,實現Java程式的遠端呼叫,實施服務化的中介軟體則需要自己開發;而Spring Cloud則是實施微服務的一系列套件,
包括:服務註冊與發現、斷路器、服務狀態監控、配置管理、智慧路由、一次性令牌、全域性鎖、分散式會話管理、叢集狀態管理等。
服務註冊
Restful基於Http協議,良好的跨平臺 (dubbo是基於RPC,RPC都是基於TCP進行研發的協議)
熔斷的原理