“在代码的世界里,每一行都是进步的足迹,每一次挑战都是成长的机遇。”

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(区域可用):避免将请求发送到与客户端在同一区域的服务实例,以减少跨区域的网络延迟。

Write your comment Here