什么是SpringCloud?


 

 

 一、什么是SpringCloud?

SpringCloud是實現微服務結構的一種方式它將現在非常流行的一些技術整合到一起,實現了諸如:配置管理,服務發現,智能路由,負載均衡,熔斷器,控制總線,集群狀態等功能;協調分布式環境中各個系統,為各類服務提供模板性配置。其主要涉及的組件包括:

Eureka:注冊中心
Zuul、Gateway:服務網關
Ribbon:負載均衡
Feign:服務調用
Hystrix或Resilience4j:熔斷器

 

      1.Eureka注冊中心 :實現服務治理(服務注冊與發現)。

      2.負載均衡Ribbon :主要提供客戶側的軟件負載均衡算法。

      3.熔斷器Hystrix:保護系統,控制故障范圍。
      4.服務調用Feign:服務間的調用
      5.Spring Cloud Gateway網關:api網關,路由,負載均衡等多種作用。
      6.Spring Cloud Config分布式配置中心 :配置管理
      7.Spring Cloud Bus服務總線 

 

二、各組件介紹

1.Eureka注冊中心 

1.1.Eureka做什么?
Eureka就好比是滴滴,負責管理、記錄服務提供者的信息。服務調用者無需自己尋找服務,而是把自己的需求告訴Eureka,然后Eureka會把符合你需求的服務告訴你。
同時,服務提供方與Eureka之間通過 “心跳” 機制進行監控,當某個服務提供方出現問題,Eureka自然會把它從服務列表中剔除。這就實現了服務的自動注冊、發現、狀態監控。
1.2.原理圖 
基本架構:
Eureka:就是服務注冊中心(可以是一個集群),對外暴露自己的地址
提供者:啟動后向Eureka注冊自己信息(地址,提供什么服務)
消費者:向Eureka訂閱服務,Eureka會將對應服務的所有提供者地址列表發送給消費者,並且定期更新
心跳(續約):提供者定期通過http方式向Eureka刷新自己的狀態 
1.3.
坐標:
1 <dependency> 
2       <groupId>org.springframework.cloud</groupId> 
3       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 
4 </dependency>

啟動類:

1 //聲明當前應用為eureka服務 
2 @EnableEurekaServer 
3 @SpringBootApplication 
4 public class EurekaServerApplication {
5      public static void main(String[] args) { 
6          SpringApplication.run(EurekaServerApplication.class); 
7      } 
8 }
客戶端注冊服務到集群 :
1 eureka: 
2     client: 
3         service-url: # EurekaServer地址,多個地址以','隔開 
4         defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka

 

2.負載均衡Ribbon 

2.1.負載均衡,英文名稱為Load Balance,其含義就是指將負載(工作任務)進行平衡、分攤到多個操作單元上進行運行,例如FTP服務器、Web服務器、企業核心應用服務器和其它主要任務服務器等,從而協同完成工作任務。
2.2.負載均衡要干什么事情?

服務端負載

需要做三個事情:

1.接收請求

2.選擇服務器地址

3.轉發/執行請求(轉發還是執行可以參考網關)

客戶端負載

1.選擇服務器地址

2.發請求

 

負載均衡就是分發請求流量到不同的服務器。
負載均衡一般分為兩種:
1、 服務器端負載均衡(nginx)

 

2、 客戶端負載均衡(Ribbon)

2.3、負載均衡架構

 

 2.4.開啟負載均衡 

因為Eureka中已經集成了Ribbon,所以我們無需引入新的依賴。
在RestTemplate的配置方法上添加 @LoadBalanced 注解:
1 @Bean 
2 @LoadBalanced public RestTemplate restTemplate() { 
3       return new RestTemplate(); 
4 }

3.熔斷器Hystrix

 3.1.Hystrix的作用是什么呢?具體要保護什么呢?
        Hystrix是Netflflix開源的一個延遲和容錯庫,用於隔離訪問遠程服務、第三方庫,防止出現級聯失敗。
        在高並發領域,在分布式系統中,可能因為一個小小的功能扛不住壓力,宕機了,導致其他服務也跟隨宕機,最終導致整個系統宕機,所以在SpringCloud中采用Hystrix進行處理。
        微服務I 發生異常,請求阻塞,用戶請求就不會得到響應,則tomcat的這個線程不會釋放,於是越來越多的用戶請求到來,越來越多的線程會阻塞。服務器支持的線程和並發數有限,請求一直阻塞,會導致服務器資源耗盡,從而導致所有其它服務都不可用,形成雪崩效應。
         Hystrix解決雪崩問題的手段主要是服務降級,包括:
         線程隔離
         服務熔斷
 
3.2.線程隔離
        Hystrix為每個依賴服務調用分配一個小的線程池,如果線程池已滿調用將被立即拒絕,默認不采用排隊,加速失敗判定時間。用戶的請求將不再直接訪問服務,而是通過線程池中的空閑線程來訪問服務。
       用戶的請求將不再直接訪問服務,而是通過線程池中的空閑線程來訪問服務,如果線程池已滿,或者請求超時,則會進行降級處理,什么是服務降級?
服務降級:優先保證核心服務,而非核心服務不可用或弱可用。
       用戶的請求故障時,不會被阻塞,更不會無休止的等待或者看到系統崩潰,至少可以看到一個執行結果(例如返回友好的提示信息) 。服務降級雖然會導致請求失敗,但是不會導致阻塞,而且最多會影響這個依賴服務對應的線程池中的資源,對其它服務沒有響應。
      觸發Hystrix服務降級的情況:線程池已滿、請求超時
 
3.3.服務熔斷
熔斷原理
       在服務熔斷中,使用的熔斷器,也叫斷路器,其英文單詞為:Circuit Breaker
熔斷機制與家里使用的電路熔斷原理類似;當如果電路發生短路的時候能立刻熔斷電路,避免發生災難。在分布式系統中應用服務熔斷后;服務調用方可以自己進行判斷哪些服務反應慢或存在大量超時,可以針對這些服務進行主動熔斷,防止整個系統被拖垮。
       Hystrix的服務熔斷機制,可以實現彈性容錯;當服務請求情況好轉之后,可以自動重連。通過斷路的方式,將后續請求直接拒絕,一段時間(默認5秒)之后允許部分請求通過,如果調用成功則回到斷路器關閉狀態,否則繼續打開,拒絕請求的服務。
 

4.Feign

 

 

5.Spring Cloud Gateway網關

 5.1.
Spring Cloud Gateway組件的核心是一系列的過濾器,通過這些過濾器可以將客戶端發送的請求轉發(路由)到對應的微服務。 Spring Cloud Gateway是加在整個微服務最前沿的防火牆和代理器,隱藏微服務結點IP端口信息,從而加強安全保護。Spring Cloud Gateway本身也是一個微服務,需要注冊到Eureka服務注冊中心。
Spring Cloud Gateway基於Filter鏈提供網關基本功能:安全、監控/埋點、限流等。
網關的核心功能是:過濾和路由
 5.2.Gateway加入后的架構
 
不管是來自於客戶端(PC或移動端)的請求,還是服務內部調用。一切對服務的請求都可經過網關,然后再由網關來實現 鑒權、動態路由等等操作。Gateway就是我們服務的統一入口。
 5.3. 核心概念
路由(route): 路由信息的組成:由一個ID、一個目的URL、一組斷言工廠、一組Filter組成。如果路由斷言為 真,說明請求URL和配置路由匹配。
斷言(Predicate): Spring Cloud Gateway中的斷言函數輸入類型是Spring 5.0框架中的 ServerWebExchangeSpring Cloud Gateway的斷言函數允許開發者去定義匹配來自於Http Request中的任何信息比如請求頭和參數。
過濾器(Filter): 一個標准的Spring WebFilterSpring Cloud Gateway中的Filter分為兩種類型的Filter,分別Gateway FilterGlobal Filter。過濾器Filter將會對請求和響應進行修改處理 。

 

 

 

6.Spring Cloud Config分布式配置中心 

7.Spring Cloud Bus服務總線

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM