2019-11-23

Spring Cloud之  负载均衡 Ribbon

1.什么是负载均衡 Ribbon?

Ribbon 是一个基于 Http 和 TCP 的 客服端 负载均衡工具,它是基于 Netflix Ribbon 实

现的,它不像 spring cloud 服务注册中心、配置中心、API 网关那样独立部署,但是它几乎

存在于每个 spring cloud 微服务中。

在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了Ribbon与Eureka配合使用时的架构。

2019-11-23_第1张图片

2.Ribbon的作用?

解决并提供了微服务的 负载均衡

3.为甚么使用Ribbon?

当服务的访问量增大,就用上了集群的配置,可是调用者怎么知道要调用集群中的哪个服务呢,Ribbon就派上用场了。

,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。

4.什么是负载均衡?

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

4.1 集中式负载均衡

即在 consumer 和 provider 之间使用独立的负载均衡设施(可以是硬件,如 F5, 也可以是软件,如 nginx), 由该设施负责把 访问请求 通过某种策略转发至 provider;

2019-11-23_第2张图片

4.2 进程内负载均衡

将负载均衡逻辑集成到 consumer,consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。

Ribbon 就属于后者,它只是一个类库,集成于 consumer 进程,consumer 通过它来获取到 provider 的地址。

2019-11-23_第3张图片

4.3 集中式与进程内负载均衡的区别

集中式负载均衡独立于consumer与provider之间

进程内负载均衡逻辑集成到 consumer中。

5. Ribbon的使用

Ribbon 中对于集群的服务采用的负载均衡的策略默认的是轮询

5.1 创建consumer项目

2019-11-23_第4张图片

5.2 修改pom.xml文件

2019-11-23_第5张图片

5.3 创建全局配置文件

5.4 编写业务层代码service

2019-11-23_第6张图片

5.4.1 简化service层代码

因拼接url过于麻烦,可使用@loadBlanced注解结合RestTemplate简化代码

5.4.1.1 创建配置类

2019-11-23_第7张图片

5.4.1.2 修改service代码

2019-11-23_第8张图片


5.5. 编写控制层代码controller

2019-11-23_第9张图片

5.6 创建集群的provider项目(省略)

5.7  将 provider 打包。部署到 linux 环境中,并启动

5.8 启动consumer,进行测试


6. Ribbon 的常见负载均衡策略

6.1轮询策略(默认) RoundRobinRule

轮询策略表示每次都顺序取下一个 provider,比如一共有 5 个provider,第 1 次取第 1 个,第 2次取第 2 个,第 3 次取第 3 个,以此类推

6.2 权重轮询策略WeightedResponseTimeRule

1.根据每个 provider 的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越

低。2.原理:一开始为轮询策略,并开启一个计时器,每 30 秒收集一次每个 provider 的平均响应时间,当信息足够时,给每个 provider附上一个权重,并按权重随机选择provider,高权越重的 provider会被高概率选中。

6.3 随机策略 RandomRule

从 provider 列表中随机选择一个provider

6.4最少并发数策略 BestAvailableRule

选择正在请求中的并发数最小的 provider,除非这个provider 在熔断中。

6.5 在“选定的负载均衡策略”基础上进行重试机制 RetryRule

1.“选定的负载均衡策略”这个策略是轮询策略RoundRobinRule

2.该重试策略先设定一个阈值时间段,如果在这个阈值时间段内当选择 provider 不成功,则一直尝试采用“选定的负载均衡策略:轮询策略”最后选择一个可用的provider

6.6 可用性敏感策略 AvailabilityFilteringRule

过滤性能差的 provider,有 2种:

第一种:过滤掉在 eureka 中处于一直连接失败 provider

第二种:过滤掉高并发的 provider

6.7 区域敏感性策略 ZoneAvoidanceRule

1.以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的

provider

2.如果这个 ip 区域内有一个或多个实例不可达或响应变慢,都会降低该 ip 区域内其他 ip 被选中的权重。

7. 如何设置自定义的负载均衡,自定义的负载均衡有两种:

7.1 在配置类中定义

2019-11-23_第10张图片

7.2 在全局配置文件中定义

2019-11-23_第11张图片

7.3 自定义负载均衡原理

Ribbon默认的负载均衡是轮询式负载均衡策略,当容器中加载了其他的负载均衡,spring会首选其他的负载均衡策略

你可能感兴趣的:(2019-11-23)