客戶端與服務端負載均衡的差別
服務端負載均衡
負載均衡是我們處理高併發、緩解網路壓力和進行服務端擴容的重要手段之一,但是一般情況下我們所說的負載均衡通常都是指服務端負載均衡,服務端負載均衡又分為兩種,一種是硬體負載均衡,還有一種是軟體負載均衡。
硬體負載均衡主要通過在伺服器節點之間安裝專門用於負載均衡的裝置,常見的如F5。
軟體負載均衡則主要是在伺服器上安裝一些具有負載均衡功能的軟體來完成請求分發進而實現負載均衡,常見的就是Nginx。
無論是硬體負載均衡還是軟體負載均衡都會維護一個可用的服務端清單,然後通過心跳機制來刪除故障的服務端節點以保證清單中都是可以正常訪問的服務端節點,此時當客戶端的請求到達負載均衡伺服器時,負載均衡伺服器按照某種配置好的規則從可用服務端清單中選出一臺伺服器去處理客戶端的請求。這就是服務端負載均衡。
客戶端負載均衡
我們在Spring Cloud中服務的發現與消費一文中涉及到了客戶端負載均衡,在那篇文章中我們提到 “Ribbon是一個基於HTTP和TCP的客戶端負載均衡器,當我們將Ribbon和Eureka一起使用時,Ribbon會從Eureka註冊中心去獲取服務端列表,然後進行輪詢訪問以到達負載均衡的作用,客戶端負載均衡中也需要心跳機制去維護服務端清單的有效性,當然這個過程需要配合服務註冊中心一起完成。”
從上面的描述我們可以看出,客戶端負載均衡和服務端負載均衡最大的區別在於服務清單所儲存的位置。在客戶端負載均衡中,所有的客戶端節點都有一份自己要訪問的服務端清單,這些清單統統都是從Eureka服務註冊中心獲取的。在Spring Cloud中我們如果想要使用客戶端負載均衡,方法很簡單,開啟@LoadBalanced註解即可,這樣客戶端在發起請求的時候會先自行選擇一個服務端,向該服務端發起請求,從而實現負載均衡。