dubbo使用小全 分析 理解 附GitHub 源码 ( 三 )
声明
原文链接:https://blog.****.net/weixin_40533111/article/details/82726187 作者行舟水上_温酒听雨,转载请注明出处,谢谢
本文参考dubbo官网:http://dubbo.apache.org/en-us/docs/user/preface/architecture.html
基础架构,理论篇可参考:dubbo使用小全 分析 理解 附GitHub 源码 ( 一 )
简单搭建demo可参考:dubbo使用小全 分析 理解 附GitHub 源码 ( 二 )
本文在上篇的基础上继续写,展示dubbo的其他功能,都是些配置
1.启动时检查
dubbo默认在启动时检查服务是否可用,不可用的话,应用启动失败,而有些场景比如:A应用依赖B的一些服务,B应用同时依赖A应用的一些服务,那么按照默认情况,启动谁都是错,需放弃启动时检查,
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
consumerConfig.setTimeout(3000);
//启动时检查,默认为true,当服务不可用或多个应用存在循环依赖,需关闭检测,以防启动失败,若后面时间中,服务恢复,dubbo的心跳检查会自动连上
consumerConfig.setCheck(false);
return consumerConfig;
}
2.集群容错
在集群调用失败时,Dubbo 提供了多种容错方案,默认为 failover 重试,
1.invoker是provider的一个服务,封装和provider地址和具体接口service的信息
2.Directory是多个Invoker,类似List,Cluster将Directory中的多个Invoker做了统一管理,这样对外暴露的接口统一,调用者感知不到具体的服务提供者
3.Router根据规则可在(集群)服务中找到具体哪一台的机器上的服务进行调用
4.loadBalance负载均衡策略,Router路由就是通过这个策略选出具体的服务提供者,缺省为Failover,失败重试策略(一台调失败,则调另外一台,可配置providerConfig.setRetries(2);设置重试次数)
5.一些其他集群容错算法有:
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错 2。通常用于通知所有提供者更新缓存或日志等本地资源信息。
/**
* 设置集群容错策略,当失败了怎么滴,怎么滴
*/
providerConfig.setCluster("failsafe");
3.负载均衡
常见的负载均衡算法有:
1.random
随机(默认),可按权重设置随机概率,
缺点:当调用者少时,在某个点碰撞的机会较大,但调用者多起来后,分布就越来越均匀,数学书上有个投硬币的故事,当基数趋于无穷大,概率就均匀了.
2.RoundRobin
按公约后的权重设置轮循比率
缺点:存在慢的机器积累请求的问题,当某台机器很慢,但没死掉,则请求调到这台,都卡在这了,这台没响应,请求一直都堆积在这
3.LeastActive
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
4.ConsistentHash
一致性 Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
/**
* 负载均衡策略,默认为random
*/
providerConfig.setLoadbalance("roundrobin");
还有一些其他的配置,不常用的
1.直连提供者,
不经过注册中心,直接连接provider,可用来测试
2.未完待续--------