客户端负载均衡
客户端负载均衡,就是相对服务端负载均衡而言的。
服务端负载均衡,就是传统的 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 中。
每天学习一点点,每天进步一点点。
最新评论