阅读《基于SpringCloud-微服务系统设计方案》第5.7章节“负载均衡”- 不再采用一般的增加负载均衡服务器的方式进行负载均衡,如F5、Nginx、LVS等,而是把负载均衡的功能以库的方式集成到服务消费方的进程内,这种方案称为软负载均衡(Soft Load Balancing)或者客户端负载均衡。在Spring Cloud中配合Eureka的服务注册功能,Ribbon子项目则为REST客户端实现了负载均衡。
使用Ribbon进行负载均衡,其工作原理可以概括为下面四个步骤:
1. Ribbon首先根据其所在Zone优先选择一个负载较少的Eureka Server;@b@2. 定期从Eureka Server更新并过滤服务实例列表;@b@3. 根据指定的负载均衡策略,从可用的服务器列表中选择一个服务实例的地址;@b@4. 然后通过RestClient进行服务调用。
Ribbon本身提供了下面几种负载均衡策略
• RoundRobinRule: 轮询策略,Ribbon以轮询的方式选择服务器,这个是默认值。所以示例中所启动的两个服务会被循环访问;@b@• RandomRule: 随机选择,也就是说Ribbon会随机从服务器列表中选择一个进行访问;@b@• BestAvailableRule: 最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;@b@• WeightedResponseTimeRule: 带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后在采用轮询的方式来获取相应的服务器;@b@• AvailabilityFilteringRule: 可用过滤策略,先过滤出故障的或并发请求大于阈值一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选出一个;@b@• ZoneAvoidanceRule: 区域感知策略,先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认0),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例。