1. 程式人生 > 實用技巧 >客戶端負載均衡介紹

客戶端負載均衡介紹

客戶端負載均衡

客戶端負載均衡,就是相對服務端負載均衡而言的。

服務端負載均衡,就是傳統的 Nginx 的方式。用 Nginx 做負載均衡,我們稱之為服務端負載均衡。

如下圖所示:

這種均衡,稱為服務端負載均衡。它的一個特點就是,客戶端並不知道此時為它提供服務的 server 到底是哪一個,它也不關心。反正請求發給 Nginx,Nginx 再將請求轉發給 Tomcat,客戶端只需要記住 Nginx 的地址即可。

客戶端負載均衡則是另外一種情形:

客戶端負載均衡,就是呼叫的客戶端本身是知道所有 Server 的詳細資訊的,當需要呼叫 Server 上的介面時,客戶端就從自身所維護的 Server 列表中,根據提前配置好的負載均衡策略,自己挑選一個 Server 來呼叫。此時,客戶端知道它所呼叫的 Server 到底是哪一個。

在 RestTemplate 中,要想使用負載均衡功能,只需要給 RestTemplate 例項上新增一個 @LoadBalanced 註解即可,此時,RestTemplate 就會自動具備負載均衡功能,這個負載均衡就是客戶端負載均衡。

    @Bean
    // 給 RestTemplate 例項新增 @LoadBalanced 註解,自動開啟負載均衡
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

負載均衡原理

在 Spring Cloud 中,實現負載均衡非常容易。只需要新增 @LoadBalanced 註解即可。只要添加了該註解,一個原本普通做 Rest 請求的工具 RestTemplate 就會自動具備負載均衡功能,這個是怎麼實現的呢?

整體上來說,這個功能的實現就是三個核心點:

-從 Eureka Client 本地快取的服務註冊資訊中,選擇一個可以呼叫的服務。

  • 根據 1 中所選擇的服務,重構請求 URL 地址。

  • 將 1、2 步的功能嵌入到 RestTemplate 中。

每天學習一點點,每天進步一點點。