天天看点

如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五

上一篇:Nacos如何整合SpringCloud ?| 带你读《Spring Cloud Alibaba(2019)》之四 如何构建一个微服务项目? | 带你读《Spring Cloud Alibaba(2019)》之六

本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,

点击查看视频内容

本文系志愿者整理,供配合学习中心课程使用,不做商业用途。

SpringCloud负载均衡器说明

在SpringCloud第一代中使用Ribbon、SpringCloud第二代中直接采用自研发loadbalancer即可,默认使用的Ribbon。

使用方式非常简单:

@Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }           

LoadBalancerClient负载均衡器

@RequestMapping("/loadBalancerClient")
public Object loadBalancerClient() {
    return loadBalancerClient.choose("meitemayikt-member");
}           

底层默认原理是调用ribbon的实现客户端负载均衡器。

如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五

本地负载均衡与Nginx 的区别

本地负载均衡

本地负载均衡器基本的概念:我们的消费者服务从我们的注册中心获取到集群地址列表,缓存到本地,然后本地采用负载均衡策略(轮训、随机、hash一致性、权重等),实现本地的rpc远程的。

本地负载均衡器有:

自己写、ribbon SpringleCloud第一代中loadbalancerSpringCloud自己研发。

如何选择ribbon还是loadbalancer

SpringCloud Rest或者Openfeign都是默认支持ribbon。

本地负载均衡器与Nginx 的区别

Nginx是客户端所有的请求统一都交给我们的Nginx处理,让后再由Nginx实现负载均衡转发,属于服务器端负载均衡器。

本地负载均衡器是从注册中心获取到集群地址列表,本地实现负载均衡算法,即本地负载均衡器。属于客户端负载均衡器。

应用场景:

Nginx属于服务器负载均衡,应用于Tomcat/Jetty服务器等,而我们的本地负载均衡器,应用于在微服务架构中rpc框架中,rest、openfeign、dubbo。

如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五
如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五

SPringleCloud rest或者openfeign客户端默认都是ribbon实现调用

@loadbalancer实际上是我们的springcloud自己写的。

loadbalancerClientSpringCloud根据服务id获取负载均衡器rpc地址。

如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五

搜索 maven仓库,对比分析

ribbon在某一时间段频繁更新。

如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五

spring-cloud-loadbalancer:版本几乎一直在更新。

如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五