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

通過硬件或軟件實現負載均衡均會維護一個服務端清單,利用心跳檢測等手段進行清單維護,保證清單中都是可以正常訪問的服務節點。當用戶發送請求時,會先到達負載均衡器(也相當於一個服務),負載均衡器根據負載均衡算法(輪訓、隨機、加權輪訓)從可用的服務端列表中取出一台服務端的地址,接着進行轉發,降低系統的壓力。
而對於客戶端負載均衡來說,與服務端負載均衡的主要區分點在於服務清單的存放位置。在客戶端負載均衡中,客戶端自己會存儲一份服務端清單,它是通過從注冊中心(Eureka服務注冊中心)進行抓取得到的,同時也需要對此進行維護。
SpringCloud Ribbon是基於客戶端的負載均衡工具,它可以將面向服務的 REST 模板請求自動轉換成客戶端負載均衡的服務調用。


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