Spring cloud ribbon原理
1.通过使用被@LoadBalanced注解修饰的restTemplate来实现面向服务的调用
Get请求:getForEntity()
Post请求:postForEntity()
Put请求:put()
Delete请求:delete()
2.restTemplate本是spring对象,ribbon通过对restTemplate拦截实现负载均衡
3.负载均衡器
1⃣️AbstractLoadBalancer: 关于服务实例分组枚举类,存储各个服务实例的属性和统计信息
2⃣️BaseLoadBalancer: ribbon负载均衡器的基本实现类,维护并存储了两个服务实例server对象列表,一个存储所有服务实例,一个存储正常服务实例
3⃣️DynamicServerListLoadBalancer:继承BaseLoadBalancer,实现了在运行期动态更新能力,还实现了过滤功能
4⃣️ZoneAwareLoadBalancer是5⃣️DynamicServerListLoadBalancer的扩展,根据按区域Zone分组,根据统计数据来实现可用区的挑选
4.负载均衡策略
1⃣️AbstractLoadBalance:负载均衡策略的抽象类根据维护的信息,作为分类依据。
2⃣️RandomRule:随机策略
3⃣️RoundRobinRule:线性轮询策略
4⃣️RetryRule:具备重试机制的策略
5⃣️WeightedRsponsedTimeRule:权重策略
6⃣️BastAvailableRule:选择最空闲的实例
7⃣️PredicateBasedRule:根据条件过滤,选择实例
8⃣️AvailabilityFilteringRule:该策略通过线性抽样的方式直接尝试寻找可用且较空闲的实例来使用,优化了父类每次都要遍历所有实力的开销。
9⃣️ZoneAvoidanceRule:选择Zone区域策略