客户端负载均衡

客户端负载均衡,就是相对服务端负载均衡而言的。

服务端负载均衡,就是传统的 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 中。

每天学习一点点,每天进步一点点。