哈喽各位同学们大家好呀,今天是开发者学院中课程“Spring Cloud微服务架构设计与开发实战”的章节二的“Java Spring Cloud微服务 Ribbon负载均衡算法 ”干货总结~是一起学习新课程吧!
课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇
课程名称:Java Spring Cloud微服务 Ribbon负载均衡算法
课程地址:https://developer.aliyun.com/learning/course/60/detail/1088
图谱名称:Alibaba Java 技术图谱
图谱地址:https://developer.aliyun.com/graph/java
Java Spring Cloud微服务 Ribbon负载均衡算法
大家好,我们继续学习 Java Spring 微服务架构设计与实战系列课程。这节课给大家讲一下 Spring Cloud负载均衡算法,这里面有个很重要的技术Ribbon。也是麦飞公司贡献的微服架构体系里面很重要的一个技术组件。
- Ribbon负载均衡与底层算法
Spring Cloud负载均衡器Ribbon
1. Spring Cloud客户端负载均衡器Ribbon
2. Ribbon是Netflix 发布的开源项目
3. Ribbon主要功能是提供客户端的软件负载均衡算法,
4. Ribbon将Netflix的中间层服务连接在一起。
5. Ribbon客户端组件提供许多配置如连接超时,重试等。
6. 配置文件中列出后台所有的机器,
7. Ribbon会自动(如简单轮询,随即连接等)去连接这些机器。
8. Spring Cloud使用Ribbon实现 自定义的负载均衡算法。
基本微服务架构是经过注册中心的一个交互,找到自己的服务,然后完成一个匹配服务的调用。实际生产环境下的话,像订单服务,评论服务,支付服务等会存在多台服务器的情况,实际数量的话是不定数量的,会出现浪费服务器的情况。或者在高频的场景下,订单服务可能有100台、1000台的情况,如果客户端不能把压力就能分散到后台的服务上的话,最大的问题就会出现在我们做后端服务的上,所以这里面的话会有一个集群和负载均衡的概念,负载均衡算法在大规模web集群中是非常常见的。 这个时候就需要Ribbon,Ribbon是做微服务集群的一个负载均衡,来帮助我们客户端调用的时候,要体现出来这样一个叫均衡。
Ribbon技术组件也支持几种主要的算法:随机、路由、权重、最小链接、IP地址增加路由策略等。Ribbon是在Netflix里是已经集成了,使用简单的轮巡策略,但不一定合理,在负载均衡大家稍微注意一下。官方也出了多个类似组件,可以在实习落地方案的时候多个选择。
- Ribbon负载均衡算法
Ribbon负载均衡算法
1. 默认规则:轮训RoundRobin
2. 简单轮询负载均衡(RoundRobin)
3. 随机负载均衡 (Random)随机选择UP的Server
4. 加权响应时间负载均衡 WeightedResponseTime
5. 区域感知轮询负载均衡(ZoneAware)
轮训是最常见的的一种算法,还有随机、权重也都是一种算法,区域感知是可用区域数据中心的可用性有关系。当跨这个数据中心或者多数据中心部署的时,就可以用上。根据客户端的 Ip地址,就近 DNS解析来录入到某个数据中心里面,是一种更优的跨多税中心地域的这样的一个负载均衡算法。一般的话用轮巡或者随机当然其实权重相对来说更合理一点。
这些算法可以直接配置,或者用代码配置,配置的话一般我们用代码可以直接去替换。
- Ribbon负载均衡架构图
Ribbon负载均衡关键点
1. 服务发现,发现依赖服务列表ServiceList
2. 服务选择规则,多个服务中选择一个有效服务
3. 服务监听,检测失效的服务,高效剔除失效服务
4. Ribbon核心组件:
Rule- 从服务列表中如何获取一个有效服务
Ping- 后台运行线程用来判断服务是否可用
ServerList- 服务列表
案例:
引用Ribbon包
Spring Cloud Ribbon负载均衡代码
@LoadBalanced
Feign默认轮训