Netflix源码解析之Ribbon:负载均衡器通过Eureka获取动态后端服务列表
来源:互联网 发布:淘宝刷销量怎么刷 编辑:程序博客网 时间:2024/06/15 11:08
Ribbon是一种客户端的负载均衡,本质上是跑在服务消费者的进程里。服务消费者要访问服务时,通过ribbon向一个服务注册的列表查询,然后以配置的负载均衡策略选择一个后端服务发起请求。
前面ribbon的实现,讲到LB的定义的两个主要方法,分别是后端服务相关的调用:
在netflix中这个服务注册列表其实就是eureka服务端集中管理的注册服务列表。获取这个列表应该就是是通过eureka的client来完成的。
也就是ribbon中应该在某个地方集成了eureka client来维护服务列表。这里尝试追踪细这个过程,确认下猜想。
ribbon的实现的继承图上可以看到除了介绍的基本实现LoadBalancer外,还有DynamicServerListLoadBalancer的实现,可以动态的加载后端服务列表。正如名所示,可以动态的加载后端的服务列表。
DynamicServerListLoadBalancer中使用一个ServerListRefreshExecutorThread任务线程定期的更新后端服务列表。
其实是通过com.netflix.loadbalancer.ServerList.getUpdatedListOfServers() 方法加载后端服务列表。ServerList这个接口正是用来获取加载后端服务列表。(这么一个名词来做动作,有一点点别扭!)可以看到有这么多加载的方式。
看到ConfigurationBasedServerList是从配置中(可以是通过Archaius这样的集中配置)加载的。 而DiscoveryEnabledNIWSServerList这个实现中包含DiscoveryEnabled猜想应该就是服务发现框架里的服务吧。看进去果然是通过eureka client 从eureka server获取服务列表进而在ribbon中可以动态的加载。 从声明
能看到管理的服务不是一般的服务,是DiscoveryEnabledServer的服务。观察List<DiscoveryEnabledServer> com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList.obtainServersViaDiscovery() 的实现可以了解整个过程。
可以看到就是通过一个com.netflix.discovery.EurekaClient作为一个句柄来获取eureka中注册的服务列表。获取活的服务,并根据instanceInfo 构造成ribbon需要的DiscoveryEnabledServer并加到服务列表中。
完。
原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba
本文链接地址: Netflix源码解析之Ribbon:负载均衡器通过Eureka获取动态后端服务列表
- Netflix源码解析之Ribbon:负载均衡器通过Eureka获取动态后端服务列表
- (转)Netflix源码解析之Ribbon:客户端负载均衡器Ribbon的设计和实现
- Netflix源码解析之Ribbon:负载均衡策略的定义和实现
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
- springCloud学习01之eureka服务发现-提供者-消费者ribbon/feign-负载均衡
- 云中间层服务 - 区域感知负载均衡器 Ribbon
- Eureka+ribbon 实现服务注册与发现和负载均衡
- spring cloud netflix eureka ribbon 示例
- SpringCloud-----1、Eureka实现服务治理(Ribbon客户端负载均衡调用服务)
- 深度剖析服务发现组件Netflix Eureka
- 深度剖析服务发现组件Netflix Eureka
- 七、Netflix Eureka && 搭建服务注册中心
- Ribbon负载均衡机制(搭配eureka)
- Netflix Eureka 深层解析(上)
- Netflix Eureka 深层解析(下)
- Spring Cloud Netflix之Eureka Doc Translation
- Spring Cloud Netflix之Eureka Client Configuration
- 深入理解Ribbon之源码解析
- ECharts图表使用实例(多条折线图)--JAVA
- Apache Hadoop集群设置示例(带虚拟机)
- ViewPager的两种切换效果
- Linux实用技巧-CURL实现HTTP的GET POST方法
- 如何在TabBarController push时隐藏,pop返回时显现。
- Netflix源码解析之Ribbon:负载均衡器通过Eureka获取动态后端服务列表
- UILabel怎么自定义字体颜色?
- HDU/HDOJ 1015(dfs或暴力枚举)
- 关于ORACLE 的INSERT ALL
- iphone程序启动界面问题
- 日志系统jar包:slf4j-api, slf4j-log4j12以及log4j
- 两个应用调转的问题
- 关于WebView和js的问题,急急急!!!
- iphone获取当前运行进程列表遇到一个问题