
Ribbon学习
Ribbon是一个负载均衡器,主要用于在微服务架构中分发请求到多个服务实例上。
需要分析以下的源代码。



它的工作原理如下:
1. 注册服务实例(初始化加载+ 自动pull去注册中心去拉PollingServer+注册中心去通知EurekaNotification):Ribbon需要知道可用的服务实例列表。这些实例通常通过服务注册中心(如Eureka)进行注册和发现。
EurekaNotificationServerListUpdater和PollingServerListUpdater是Ribbon中用于从Eureka服务器获取服务实例列表的两种不同的更新器。
EurekaNotificationServerListUpdater:
EurekaNotificationServerListUpdater是一种基于Eureka服务器通知的更新器(event时)。它使用Eureka的通知机制来获取服务实例列表的变化。当有新的服务实例注册或注销时,Eureka服务器会发送通知给Ribbon客户端,然后EurekaNotificationServerListUpdater会相应地更新服务实例列表。这种更新机制可以更快地响应服务实例的变化,减少不必要的轮询。
PollingServerListUpdater:
PollingServerListUpdater是一种基于轮询的更新器。它会定期轮询Eureka服务器以获取最新的服务实例列表。通过定期发送请求来检查服务实例的变化,PollingServerListUpdater可以及时获取最新的服务实例列表。但是,由于需要定期轮询,这种更新机制可能会增加网络流量和服务器负载。
这两种更新器都是Ribbon用于从Eureka服务器获取服务实例列表的方式。你可以根据自己的需求选择适合的更新器。如果你希望更快地响应服务实例的变化,可以选择EurekaNotificationServerListUpdater;如果你更关注定期获取最新的服务实例列表,可以选择PollingServerListUpdater。
2. 选择服务实例:当收到一个请求时,Ribbon会根据一定的负载均衡策略选择一个服务实例。常见的负载均衡策略包括轮询、随机、加权轮询等。
3. 发送请求:一旦选择了服务实例,Ribbon会将请求发送到该实例上。
4. 故障转移:如果选择的服务实例不可用或发生故障,Ribbon会自动切换到另一个可用的实例上。
5. 监控和统计:Ribbon还提供了监控和统计功能,可以记录每个服务实例的请求次数、响应时间等指标,以便进行性能分析和故障排查。
总之,Ribbon通过负载均衡策略选择合适的服务实例,并将请求发送到该实例上,以实现高可用和高性能的服务调用。
Ribbon提供了多种负载均衡策略,可以根据不同的需求选择适合的策略。
以下是一些常见的负载均衡(IRule接口)策略:
1. Round Robin(轮询):默认的负载均衡策略。依次将请求分发给每个服务实例,循环往复。
2. Random(随机):随机选择一个可用的服务实例来处理请求。
3. Weighted Round Robin(加权轮询):根据每个服务实例的权重来分配请求。具有更高权重的实例将获得更多的请求。
4. Weighted Random(加权随机):根据每个服务实例的权重随机选择一个实例来处理请求。具有更高权重的实例被选中的概率更高。
5. Availability Filtering(可用性过滤):根据服务实例的可用性来进行负载均衡。过滤掉不可用或故障的实例,只选择可用的实例来处理请求。
6. Best Available(最佳可用):选择具有最少并发连接数的可用实例来处理请求。
7. Zone Avoidance(区域可用):避免将请求发送到与客户端在同一区域的服务实例,以减少跨区域的网络延迟。