ribbon
ribbon
MQCloud
https://github.com/sohutv/mqcloud
展开
-
1.ribbon
ribbon作为客户端负载均衡的重要组件,很有必要对其内部机制了解清楚,以便在生产中更熟练的应用。关于ribbon网上的源码分析很多,例如:http://blog.didispace.com/springcloud-sourcecode-ribbon/http://blog.csdn.net/forezp/article/details/74820899但是源码类文章读完更多时候是比较懵的...原创 2020-01-03 10:39:44 · 182 阅读 · 0 评论 -
2.负载均衡策略
一、简介为什么一开始就需要了解这一块,原因就是这块涉及到的组件的调用关系相对独立,更容易理解,而这块也是ribbon的核心之一。二、接口ribbon的负载均衡最终都委托给了一个类来实现,那就是IRule,IRule负责不同的策略算法,接口定义如下:public interface IRule{ public Server choose(Object key); public...原创 2020-01-03 10:52:32 · 244 阅读 · 0 评论 -
3.ping
一、简介字如其名,ribbon采用IPing接口来探测server是否存活。二、接口接口很简单,代码如下:public interface IPing { public boolean isAlive(Server server);}IPing有好多实现(但是大部分都没啥用),如下:三、深入这里如果使用eureka的话,其默认的实现为NIWSDiscoveryPing(...原创 2020-01-03 10:56:20 · 183 阅读 · 0 评论 -
4.ServerList
一、简介ServerList就是server的列表,我们知道,IRule做负载均衡的关键参数就是server列表,就是从这里获取的。二、接口其接口比较简单,定义了两个方法,如下:public interface ServerList<T extends Server> { public List<T> getInitialListOfServers(); ...原创 2020-01-03 11:00:20 · 2597 阅读 · 0 评论 -
5.ServerListUpdater
一、简介顾名思义,这个类用于server列表的更新。二、接口这个类定义的方法较多,这里只看两个重要的:public interface ServerListUpdater { /** * an interface for the updateAction that actually executes a server list update */ pub...原创 2020-01-03 11:08:25 · 1392 阅读 · 0 评论 -
6.ServerListFilter
一、简介从名字可以看出来,这个接口实现了server类别的过滤功能。二、接口接口比较简单,如下:public interface ServerListFilter<T extends Server> { public List<T> getFilteredListOfServers(List<T> servers);}入参为server列表...原创 2020-01-03 11:15:38 · 583 阅读 · 0 评论 -
7.状态统计
一、简介这里的统计主要是触发远程调用的统计,跟负载均衡没啥关系,但是,负载均衡需要这些依赖这些统计信息做为判断的策略。统计类主要是LoadBalancerStats,其内部持有ServerStats对每个server的调用做了相关统计。二、实现成员变量1.1 LoadBalancerStats内部有两个成员变量,一是upServerListZoneMap,二是serverStatsCa...原创 2020-01-03 11:27:55 · 445 阅读 · 0 评论 -
8.负载均衡器
一、引子从负载均衡策略可以了解到ribbon实现的各种负载均衡策略,当然也可以自己实现相应的算法。其中主要的接口IRule中有个定义如下:public ILoadBalancer getLoadBalancer();算法使用的server列表以及状态信息都从它获取,这里,就从它开始。二、接口ILoadBalancer,从源码的注释中很容易看出,它定义负载均衡的操作,并对server进行存...原创 2020-01-03 11:43:55 · 417 阅读 · 0 评论 -
9.与springcloud结合
一、简介使用ribbon,一般都是和springcloud结合使用,springcloud提供了胶水代码来整合ribbon。二、接口ServiceInstanceChooser该接口只有一个方法:public interface ServiceInstanceChooser { /** * Choose a ServiceInstance from the LoadBal...原创 2020-01-03 11:50:24 · 156 阅读 · 0 评论 -
10.重试
<!doctype html>tmp.md一、简介ribbon的重试是指consumer调用provider发生异常后,ribbon发起重试。RestTemplate和Feign使用的重试机制不一样,下面分开进行说明。二、RestTemplate重试RestTemplate都是spring-cloud来做的,内部依赖于spring-retry,增加如下配置打开重试机制...原创 2020-01-03 14:33:09 · 540 阅读 · 0 评论 -
11.ribbon区域亲和
一、简介ribbon的区域亲和机制如下(需要说明一点,亲和性发生在过滤阶段,请参考负载均衡器中server列表是如何动态更新的部分):以上的图示及文字仅为举例说明,下面描述一下图上表示的流程:首先,先看右下角的provider集群,因为会分别部署在北京,上海,广州三个地区,把这里地区看作zone,故有三个zone。provider集群会把实例信息(ip+port+name等等)按照配置e...原创 2020-01-03 14:46:48 · 589 阅读 · 0 评论