1. 程式人生 > >SpringCloud微服務ribbon restTemplate hystrix feign eureka框架搭建

SpringCloud微服務ribbon restTemplate hystrix feign eureka框架搭建

少年我知道你看講解煩,來吧github:https://github.com/singgel/Spring-SkillTree

一、微服務架構

1.1什麼是分散式

不同模組部署在不同伺服器上
作用:分散式解決網站高併發帶來問題

 

1.2什麼是叢集

多臺伺服器部署相同應用構成一個叢集
作用:通過負載均衡裝置共同對外提供服務

 

1.3什麼是RPC

RPC 的全稱是 Remote Procedure Call 是一種程序間通訊方式。
它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即無論是呼叫本地介面/服務的還是遠端的介面/服務,本質上編寫的呼叫程式碼基本相同。
比如兩臺伺服器A,B,一個應用部署在A伺服器上,想要呼叫B伺服器上應用提供的函式或者方法,由於不在一個記憶體空間,不能直接呼叫,這時候需要通過就可以應用RPC框架的實現來解決
 

1.3.1restful、soap、rpc

(1)RESTful是一種架構設計風格,提供了設計原則和約束條件,而不是架構。而滿足這些約束條件和原則的應用程式或設計就是 RESTful架構或服務。
(2)SOAP,簡單物件訪問協議是一種資料交換協議規範,
是一種輕量的、簡單的、基於XML的協議的規範。SOAP協議和HTTP協議一樣,都是底層的通訊協議,只是請求包的格式不同而已,SOAP包是XML格式的。
SOAP的訊息是基於xml並封裝成了符合http協議,因此,它符合任何路由器、 防火牆或代理伺服器的要求。
soap可以使用任何語言來完成,只要傳送正確的soap請求即可,基於soap的服務可以在任何平臺無需修改即可正常使用。
(3)RPC就是從一臺機器(客戶端)上通過引數傳遞的方式呼叫另一臺機器(伺服器)上的一個函式或方法(可以統稱為服務)並得到返回的結果。
RPC 會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊)
RPC 是一個請求響應模型。客戶端發起請求,伺服器返回響應(類似於Http的工作方式)
RPC 在使用形式上像呼叫本地函式(或方法)一樣去呼叫遠端的函式(或方法)。
1.3.2rpc遠端呼叫框架
幾種比較典型的RPC的實現和呼叫框架。 
(1)RMI實現,利用java.rmi包實現,基於Java遠端方法協議(Java Remote Method Protocol) 
和java的原生序列化。 
(2)Hessian,是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基於HTTP協議,採用二進位制編解碼。 
(3)thrift是一種可伸縮的跨語言服務的軟體框架。thrift允許你定義一個描述檔案,描述資料型別和服務介面。依據該檔案,編譯器方便地生成RPC客戶端和伺服器通訊程式碼。
(4)SpringCloud 為開發人員提供了快速構建分散式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件匯流排、全域性鎖、決策競選、分散式會話等等。
 

1.4什麼是SOA

業務系統分解為多個元件,讓每個元件都獨立提供離散,自治,可複用的服務能力
通過服務的組合和編排來實現上層的業務流程
作用:簡化維護,降低整體風險,伸縮靈活
 

1.5什麼是微服務

架構設計概念,各服務間隔離(分散式也是隔離),自治(分散式依賴整體組合)其它特性(單一職責,邊界,非同步通訊,獨立部署)是分散式概念的跟嚴格執行
 SOA到微服務架構的演進過程
 作用:各服務可獨立應用,組合服務也可系統應用(巨石應用[monolith]的簡化實現策略-平臺思想)
 

二、微服務架構

三、SpringCloud

SpringCloud 為開發人員提供了快速構建分散式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件匯流排、全域性鎖、決策競選、分散式會話等等。它執行環境簡單,可以在開發人員的電腦上跑。
 

四、服務提供者與消費關係

服務提供者:提供服務被人呼叫
消費者:呼叫被人服務

五、服務的註冊與發現(Eureka )

在這裡,我們需要用的的元件上Spring Cloud Netflix的Eureka ,eureka是一個服務註冊和發現模組。
 

 

以上是我的springcloud專案,eureka是註冊中心,zuul是註冊閘道器,ribbon和feign都是cloud的rpc遠端呼叫。
zuul主要是用來配置閘道器


服務提供者
建立一個服務提供者 (eureka client),當client向server註冊時,它會提供一些元資料,例如主機和埠,URL,主頁等。Eureka server 從每個client例項接收心跳訊息。 如果心跳超時,則通常將該例項從註冊server中刪除。

 

 

feign服務消費

什麼是Feign
Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。
它具有可插拔的註解特性,可使用Feign 註解和JAX-RS註解。Feign支援可插拔的編碼器和解碼器。
Feign預設集成了Ribbon,並和Eureka結合,預設實現了負載均衡的效果。
簡而言之:
Feign 採用的是基於介面的註解
Feign 整合了ribbon
 

Hystrix斷路器

在微服務架構中,根據業務來拆分成一個個的服務,服務與服務之間可以相互呼叫(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來呼叫。為了保證其高可用,單個服務通常會叢集部署。由於網路原因或者自身的原因,服務並不能保證100%可用,如果單個服務出現問題,呼叫這個服務就會出現執行緒阻塞,此時若有大量的請求湧入,Servlet容器的執行緒資源會被消耗完畢,導致服務癱瘓。服務與服務之間的依賴性,故障會傳播,會對整個微服務系統造成災難性的嚴重後果,這就是服務故障的“雪崩”效應。
為了解決這個問題,業界提出了斷路器模型。
7.1 什麼是Hystrix
Netflix開源了Hystrix元件,實現了斷路器模式,SpringCloud對這一元件進行了整合。 在微服務架構中,一個請求需要呼叫多個服務是非常常見的,如下圖:


image.png

image.png

 

較底層的服務如果出現故障,會導致連鎖故障。當對特定的服務的呼叫的不可用達到一個閥值(Hystric 是5秒20次) 斷路器將會被開啟。


image.png

image.png

斷路開啟後,可用避免連鎖故障,fallback方法可以直接返回一個固定值。