微服務負載均衡技術


引自:微服務之負載均衡

簡介

        在微服務架構中,負載均衡是必須使用的技術,通過它來實現系統的高可用、集群擴容等功能。負載均衡可以分為兩種:服務端負載均衡和客戶端負載均衡。通常所說的負載均衡指服務器負載均衡,可通過硬件設備或軟件來實現,硬件比如:F5、Array等,軟件比如:LVS、Nginx等,類似的架構圖如下: 

圖片來自個人微信公眾號

        通過硬件或軟件實現負載均衡均會維護一個服務端清單,利用心跳檢測等手段進行清單維護,保證清單中都是可以正常訪問的服務節點。當用戶發送請求時,會先到達負載均衡器(也相當於一個服務),負載均衡器根據負載均衡算法(輪訓、隨機、加權輪訓)從可用的服務端列表中取出一台服務端的地址,接着進行轉發,降低系統的壓力。

        而對於客戶端負載均衡來說,與服務端負載均衡的主要區分點在於服務清單的存放位置。在客戶端負載均衡中,客戶端自己會存儲一份服務端清單,它是通過從注冊中心(Eureka服務注冊中心)進行抓取得到的,同時也需要對此進行維護。

客戶端負載均衡(Ribbon)

      SpringCloud Ribbon是基於客戶端的負載均衡工具,它可以將面向服務的 REST 模板請求自動轉換成客戶端負載均衡的服務調用。

 
 
         Ribbon 維護了一個服務列表,如果服務實例注銷或死掉,Ribbon 能夠自行將其剔除。Ribbon 提供了客戶端負載均衡的功能,Ribbon利用從 Eureka Server中讀取到的服務信息列表(存儲在本地即客戶端中),在調用服務實例時,合理地進行負載,直接請求到具體的微服務,如下圖是Ribbon負載均衡的流程圖:
 
圖片來自個人微信公眾號
 
配置步驟

1. 在Eureka客戶端開啟服務發現(增加EnableDiscoveryClient注解),作用是讓客戶端可以從服務注冊中心獲取服務端清單。同時,在定義的RestTemplate對象上使用負載均衡(增加LoadBalanced注解),作用是通過內部機制使之具有負載均衡能力。同時也可設置負載均衡算法等。

 
圖片來自個人微信公眾號

2. 使用RestTemplate調用微服務,此時通過服務名進行調用。

 
圖片來自個人微信公眾號
 
其它配置

可以直接通過配置Ribbon客戶端的方式來自定義各個服務客戶端調用的參數。

全局配置

  使用ribbon.=的方式設置ribbon的默認參數,如下:

#ribbon請求連接的超時時間

ribbon.ConnectTimeout=250

#請求處理的超時時間

ribbon.ReadTimeout=1000

#對所有操作請求都進行重試

ribbon.OkToRetryOnAllOperations=true

#對當前實例的重試次數

ribbon.MaxAutoRetries=1

#對下個實例的重試次數

ribbon.MaxAutoRetriesNextServer=1

指定服務配置

        使用.ribbon.=的方式進行設置,client表示各個服務客戶端,如下:

ly-microservice-clgl.ribbon.ConnectTimeout=500

ly-microservice-clgl.ribbon.ReadTimeout=1000

ly-microservice-clgl.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule


免責聲明!

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



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