Ribbon 源码
2020-08-13 17:50:38 39 举报
Ribbon是一个基于HTTP和TCP的客户端负载均衡器。它提供了多种负载均衡策略,如轮询、随机、加权轮询等。Ribbon的源码主要包括以下几个部分: 1. 配置类:用于存储Ribbon的配置信息,如服务列表、负载均衡策略等。 2. 工厂类:用于创建Ribbon实例。 3. 请求拦截器:在发送请求前对请求进行处理,如添加元数据、修改请求头等。 4. 响应拦截器:在接收到响应后对响应进行处理,如解析响应体、修改响应头等。 5. 选择器:根据负载均衡策略从服务列表中选择一个服务实例。 6. 执行器:负责与选定的服务实例进行通信,如发送HTTP请求、处理HTTP响应等。
作者其他创作
大纲/内容
getUpdatedListOfServers()
通过负载均衡器获取服务实例
setPingInterval(pingIntervalTime)
start()
new ZoneAwareLoadBalancer()
只是去检查这个列表中的实例状态
缓存到 ribbon 的 map 中
NIWSDiscoveryPing
ribbon 默认的配置的@Bean被EurekaRibbonClientConfiguration覆盖了
轮询算法
启动一个 SchedulerThreadPoolExecutor 去执行,默认延迟 1 秒执行,每30秒执行一次
设置到父类的 allServersList 中
设置 ping 的间隔为30s,最大 ping 时间为 2 s
allServersList
初始化参数
serverListImpl.getUpdatedListOfServers()
restTemplate.
先拿到那些合法的 servers
getServer(loadBalancer)
DiscoveryEnabledNIWSServerList
默认
BaseLoaderBalancer.initWithConfig()
DomainExtractingServerList.getInitialListOfServers()
IPing
incrementAndGetModulo(eligible.size())
通过 eurekaClient 获取服务列表
设置一个Timer来运行 ping
updateListOfServers()
在 for 循环中循环执行 CAS ,避免了锁等待
默认实现
new Pinger(pingStrategy).runPinger()
restOfInit
过滤组件
setServersList()
PollingServerListUpdater
ZoneAwardLoadBalancer.chooseServer
DomainExtractingServerList
DynamicServerListLoadBalancer()
ZoneAvoidanceRule
默认实现,只是去检查服务列表的实例状态
serverListUpdater.start(updateAction);
设置 IPing 和 IRule
getLoadBalancer(serviceId)
updateAllServerList(servers)
setupPingTask()
ServerList<Server>eureka 服务实例的列表
DiscoveryEnabledNIWSServerList.getInitialListOfServers()
IRule
LoadBalancerInterceptor.intercept()
拿到负载均衡器
注入
RibbonLoadBalancerClient.execute()
rule.choose()
filter.getFilteredListOfServers(servers)
0 条评论
回复 删除
下一页