1. 程式人生 > >Spring Cloud 簡單總結

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 EurekaConsulZookeeper

  • 最大的區別是Eureka保證AP, ConsulCP
  • 一致性(Consistency)
  • 可用性(Availability)
  • 分割槽容忍性(Partition tolerance)

Consul強一致性(C)帶來的是:  

  1. 服務註冊相比Eureka會稍慢一些。因為Consul的raft協議要求必須過半數的節點都寫入成功才認為註冊成功
  2. Leader掛掉時,重新選舉期間整個consul不可用。保證了強一致性但犧牲了可用性。

Eureka保證高可用(A)和最終一致性:

  1. 服務註冊相對要快,因為不需要等註冊資訊replicate到其他節點,也不保證註冊資訊是否replicate成功
  2. 當資料出現不一致時,雖然A, B上的註冊資訊不完全相同,但每個Eureka節點依然能夠正常對外提供服務,這會出現查詢服務資訊時如果請求A查不到,但請求B就能查到。如此保證了可用性但犧牲了一致性。

在業界,一般有兩種微服務的實踐方法:基於dubbo的微服務架構、基於Spring Cloud的微服務架構。從概念上來講,DubboSpring Cloud並不能放在一起對比,

因為Dubbo僅僅是一個RPC框架,實現Java程式的遠端呼叫,實施服務化的中介軟體則需要自己開發;而Spring Cloud則是實施微服務的一系列套件,

包括:服務註冊與發現、斷路器、服務狀態監控、配置管理、智慧路由、一次性令牌、全域性鎖、分散式會話管理、叢集狀態管理等。

服務註冊

Restful基於Http協議,良好的跨平臺 dubbo是基於RPCRPC都是基於TCP進行研發的協議)

熔斷的原理