1Ribbon介绍 · SpringCloud微服务实战 · 看云
导航
本书使用的Spring Cloud 默认支持的Riibbon 版本是2.3.0
1.负载均衡介绍
负载均衡是分布式项目架构的重点,负载均衡决定着整个分布式服务集群的性能和稳定,前面讲解了Eureka集群的使用,本节我们讲解Spring Cloud 如何为我们的微服务提供负载均衡的方案。
2.Ribbon 介绍
Ribbon是Netflix下的负载均衡项目,通过Spring Cloud的封装的工具Spring Cloud Ribbon,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。主要提供了以下特性:
- 负载均衡器,可支持插拔式的负载均衡原则
- 对多种协议提供支持,例如HTTP、TCP、UDP等
- 集成了负载均衡功能的客户端
它不需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要
2.1 Ribbon子模块
- ribbon-core:ribbon的核心,主要包含负载均衡器、负载均衡接口、客户端接口、内置负载均衡实现API
- ribbon-httpclient:为负载均衡提供了REST客户端
- ribbon-loadbalancer:负载均衡模块,可以独立使用,也可和其它模块一起使用
- ribbon:在 ribbon 模块和 Hystrix 基础之上,集成了 负载均衡、容错处理、缓存/批处理 的 API
2.2 Ribbon 负载均衡器主键
Ribbon 的负载均衡器主要与集群中的各个服务进行通信,负载均衡器主要提供已下功能:
- 维护服务器的IP、DNS的信息
- 根据特定的逻辑在服务列表中循环
为了实现负载均衡的基础功能,RIbbon的负载均衡器提供了已下三大模块: - Rule: Ribbon提供的逻辑主键,决定了服从服务器列表中返回那个服务器实例
- Ping: 主要使用定时器来确保服务器的网络可以连接
- ServerList: 服务器列表,可以静态的配置服务器列表,也可以动态指定服务器列表
2.3 Ribbon提供的负载均衡算法
- RoundRobinRule(轮询算法)
- RandomRule(随机算法)
- AvailabilityFilteringRule():会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
- WeightedResponseTimeRule():根据平均响应的时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够会切换到WeightedResponseTimeRule
- RetryRule():先按照RoundRobinRule的策略获取服务,如果获取失败则在制定时间内进行重试,获取可用的服务。
- BestAviableRule():会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
3. 总结
通过上面的介绍,我们对Ribbon 已经有了了解,知道Ribbon 在微服务中是干什么的。下面我们通过程序让大家对Ribbon 有更进一步的认识。