Ribbon负载均衡机制(搭配eureka)
来源:互联网 发布:全球数据化时代txt 编辑:程序博客网 时间:2024/06/06 18:29
链接: github https://github.com/Netflix/ribbon/wiki
知乎 https://zhuanlan.zhihu.com/p/28547575
spring社区 http://projects.spring.io/spring-cloud/spring-cloud.html#_spring_cloud_netflix
对HTTP和TCP客户端进行负载均衡控制
ribbon是客户端负载均衡,Feign默认使用了ribbon技术
同时zuul也使用ribbon做负载均衡
Ribbon的源码实现大致原理:
LoadBalancerClient : 继承了ServiceInstanceChooser接口,实现类是RibbonLoadBalancerClient.主要方法有choose(ServiceInstanceChooser用来选择instance) ,
execute(LoadBalancerClient 用来执行).
ILoadBalancer : 接口方法有addServers,chooseServer,markServerDown,getReachableServers,getAllServers. 用途同方法名
实现类为BaseLoadBalancer 和 DynamicServerListLoadBalancer.
BaseLoadBalancer : 主要由以下类进行配置 IClientConfig(基本配置,用于初始化) IRule(路由策略) IPing (判断响应) (静态配置负载均衡)
DynamicServerListLoadBalancer: ServerList(用于从Eureka中获取服务列表) ServerListFilter(列表过滤) (动态配置负载均衡)
负载均衡过程:
1.RibbonLoadBalancerClient接收到一个serviceid之后,调用ServiceInstanceChooser的choose方法,choose方法首先得到 ILoadBalancer (当中有client列表)。
再利用ILoadBalancer 的chooseServer方法得到普通Server实例并实例化RibbonServer,并返回。chooseserver会通过loadbalancer中的rule来返回正确的instance。
2. DynamicServerListLoadBalancer由iconfig初始化,初始化完成后调用updateListOfServers方法获得所有ServerList。(方法中通过ServerList实现类来访问EurekaClient中的注册列表)
3.BaseLoadBalancer中有一个PingTask任务,他每10秒钟会向EurekaClient发送一个Ping。如果从Eureka拉取的注册列表发生了改变,则重新更新列表。
4.LoadBalancerClient根据注册列表和IRule来进行负载均衡
@LoadBalanced注解的原理
被注解后,会维护一个restTemplate的列表。表中所有template都会被添加拦截器,拦截器会调用LoadBalancerClient接口的execute方法
springcloud中的应用
springcloud提供了默认的配置RibbonClientConfiguration。它提供了包含ILoadBalancer,ServerListFilter在内的许多配置。
你可以更改默认的配置,更改方法为在.property文件中添加<client>.ribbon.*的配置项
使用重写的配置java类,如:
@Configuration@RibbonClient(name = "foo", configuration = FooConfiguration.class)public class TestConfiguration {}
这个client会同时使用默认的RibbonClientConfiguration和FooConfiguration配置,重复项后者会覆盖前者。重写的配置类最好放在一个其他的package中再引入,这样就不会被@ComponentScan自动扫描,被所有的@RibbonClient使用。重写配置类:
@Configurationpublic class FooConfiguration { @Bean public IPing ribbonPing(IClientConfig config) { return new PingUrl(); }}
同时使用Eureka和Ribbon,Eureka会将Ribbon中的众多接口重新实现以达到目的
如果没有使用Eureka,则需要添加配置项以激活RibbonClient的name属性,在application.yml中添加
stores: ribbon: listOfServers: example.com, google.com
直接使用Ribbon的Api
public class MyClass { @Autowired private LoadBalancerClient loadBalancer; public void doStuff() { ServiceInstance instance = loadBalancer.choose("stores"); URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort())); // ... do something with the URI }}
LoadBalancerClient会根据clientid得到正确的instance的URI,过程如开篇所讲使用@RibbonClient和@LoadBalanced注解的实例 https://spring.io/guides/gs/client-side-load-balancing/
- Ribbon负载均衡机制(搭配eureka)
- 编码实现Spring Cloud微服务负载均衡调用(eureka、ribbon)
- springcloud 中使用eureka/ribbon/Hystrix负载均衡及断路器
- Eureka+ribbon 实现服务注册与发现和负载均衡
- Spring Cloud+Eureka+Ribbon实现客户端负载均衡
- SpringCloud(第 011 篇)电影Ribbon微服务,脱离Eureka使用配置listOfServers进行客户端负载均衡调度
- Ribbon客户端负载均衡(译)
- Spring Cloud Ribbon(负载均衡)
- Spring Cloud学习--负载均衡(Ribbon)
- SpringBoot -- 负载均衡Ribbon
- ribbon客户端负载均衡
- spring cloud 在linux上eureka基础上使用ribbon负载均衡
- springCloud学习01之eureka服务发现-提供者-消费者ribbon/feign-负载均衡
- SpringCloud-----1、Eureka实现服务治理(Ribbon客户端负载均衡调用服务)
- SpringCloud(三)Ribbon负载均衡
- Ribbon负载均衡策略配置
- 自定义Ribbon的负载均衡
- Spring Cloud -- Ribbon负载均衡
- 《UNIX环境高级编程》笔记11--umask函数
- opencv 学习之 SVM / ANN 图片分类(OPENCV3.2)
- mysql RPM 安装的卸载方式
- GitChat · 安全 | 揭秘我国的电子取证技术
- Java 二叉树的四种递归与非递归遍历
- Ribbon负载均衡机制(搭配eureka)
- mybatis联合查询遇到相同字段解决办法
- 【大数据部落】(数据挖掘)如何用大数据做用户异常行为分析
- 类和接口的定义
- 由H5游戏谈起,H5开发具有哪些优势?
- 深度学习之数值计算 (一)overflow and underflow
- vuforiaSDK发布AR手机端应用的小细节和小建议(1)
- 【Oracle】EXPDP和IMPDP数据泵进行导出导入的方法
- warning C4819 解决方案 warning C4819: The file contains a character that cannot be represented in the cu