接口 | 作用 | 默认值 |
---|---|---|
IClientConfig | 读取配置 | DefaultclientConfigImpl |
工Ru1e | 负载均衡规则,选择实例 | ZoneAvoidancerule |
工Ping | 筛选掉ping不通的实例 | Dummying |
Serverlist | 交给 Ribbon的实例列表 | Ribbon: ConfiqurationBasedServerList Spring cloud Alibaba: NacosServerList |
ServerlistFilter< Server> | 过滤掉不符合条件的实例 | ZonepreferenceserverlistFilter |
ILoadBalancer | Ribbon的入口 | ZoneAwareloadBalancer |
ServerListUpdater | 更新交给Ribbon的List的策略 | PollingserverlistUpdater |
读取配置信息。一般都不使用
常用的权重、随机、随机权重、hash等负载均衡算法都能找到。也可以根据自己的实际的业务场景进行自定义的负载均衡算法。
这个接口 有俩个方法
过滤服务根据ServerStats条件,是否需要筛选。
如果有需要我们也可以定制自己的服务过滤器。
public class ServerListSubsetFilter extends ZoneAffinityServerListFilter implements IClientConfigAware, Comparator {
····
····
public List getFilteredListOfServers(List servers) {
List zoneAffinityFiltered = super.getFilteredListOfServers(servers);
Set candidates = Sets.newHashSet(zoneAffinityFiltered);
Set newSubSet = Sets.newHashSet(this.currentSubset);
LoadBalancerStats lbStats = this.getLoadBalancerStats();
Iterator var6 = this.currentSubset.iterator();
while(true) {
while(var6.hasNext()) {
T server = (Server)var6.next();
if (!candidates.contains(server)) {
newSubSet.remove(server);
} else {
// 循环调用获取服务状态
ServerStats stats = lbStats.getSingleServerStat(server);
if (stats.getActiveRequestsCount() > this.eliminationConnectionCountThreshold.get() || stats.getFailureCount() > (long)this.eliminationFailureCountThreshold.get()) {
newSubSet.remove(server);
candidates.remove(server);
}
}
}
····
····
}
Ribbon的入口 ,也是真正的业务核心类。罗列了一下 主要工作的职责。
循环更新服务器状态。
只有一个实现类 PollingServerListUpdater
这使您可以在启动时在不同环境中更改行为。
支持的属性在下面列出,并且应以开头 .ribbon.:
NFLoadBalancerClassName: ILoadBalancerNFLoadBalancerRuleClassName: IRuleNFLoadBalancerPingClassName: IPingNIWSServerListClassName: ServerListNIWSServerListFilterClassName ServerListFilter
cloud-discovery-client:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
注意点
这些属性中定义的类优先于使用定义的bean @RibbonClient(configuration=MyRibbonConfig.class)和Spring Cloud Netflix提供的默认值。
其实Ribbon 用组件的方式给拆解出来。对于有一定了解基础的人。就能猜到,该如何组合这些组件完成整个的流程的操作。这里不会再过多的介绍 Ribbon 如果想探究一下里面实现的细节。可以去看看里面源码。
Sentinel 官方文档地址
摘自参考 spring cloud 官方文档
Spring Cloud alibaba 官网地址
示例代码地址
服务器nacos 地址 http://47.99.209.72:8848/nacos
往期地址 spring cloud alibaba 地址
spring cloud alibaba 简介
Spring Cloud Alibaba (nacos 注册中心搭建)
Spring Cloud Alibaba 使用nacos 注册中心
Spring Cloud Alibaba nacos 配置中心使用
spring cloud 网关服务
Spring Cloud zuul网关服务 一
Spring Cloud 网关服务 zuul 二
Spring Cloud 网关服务 zuul 三 动态路由
Spring Cloud alibaba网关 sentinel zuul 四 限流熔断
Spring Cloud gateway 网关服务 一
Spring Cloud gateway 网关服务二 断言、过滤器
Spring Cloud gateway 三 自定义过滤器GatewayFilter
Spring Cloud gateway 网关四 动态路由
Spring Cloud gateway 五 Sentinel整合
Spring Cloud gateway 六 Sentinel nacos存储动态刷新
Spring Cloud gateway 七 Sentinel 注解方式使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。转载请附带公众号二维码