您的位置:首页 > 其它

dubbo源码学习(一)

2019-03-12 11:18 78 查看

dubbo 源码学习(一)-集群容错架构
dubbo使用两年有余,但仅仅停留在浅层的使用,了解基础的机制而已,也尝试过阅读源码,却一直没有坚持下来。其实内心是害阅读源码的,此次希望能跟着大佬们发现源码中的“黄金屋”,哈哈,共勉!
转载:https://www.jianshu.com/p/8e007012367e

集群工作过程可分为两个阶段,第一个阶段是在服务消费者初始化期间,集群 Cluster 实现类为服务消费者创建 Cluster Invoker 实例,即上图中的 merge 操作。第二个阶段是在服务消费者进行远程调用时。以 FailoverClusterInvoker 为例,该类型 Cluster Invoker 首先会调用 Directory 的 list 方法列举 Invoker 列表(可将 Invoker 简单理解为服务提供者)。Directory 的用途是保存 Invoker,可简单类比为 List。其实现类 RegistryDirectory 是一个动态服务目录,可感知注册中心配置的变化,它所持有的 Inovker 列表会随着注册中心内容的变化而变化。每次变化后,RegistryDirectory 会动态增删 Inovker,并调用 Router 的 route 方法进行路由,过滤掉不符合路由规则的 Invoker。当 FailoverClusterInvoker 拿到 Directory 返回的 Invoker 列表后,它会通过 LoadBalance 从 Invoker 列表中选择一个 Inovker。最后 FailoverClusterInvoker 会将参数传给 LoadBalance 选择出的 Invoker 实例的 invoker 方法,进行真正的远程调用。

跟着这个执行时序图,根据三个关键字Directory、Router、LoadBalance再结合平时dubbo知识就大概知道主要做了那些事:1、在Directory中找出本次集群中的全部invokers
2、在Router中,将上一步的全部invokers挑选出能正常执行的invokers
3、在LoadBalance中,将上一步的能正常的执行invokers中,根据配置的负载均衡策略,挑选出需要执行的invoker

另外提到Dubbo 提供了多种容错方案,缺省为 failover 重试
failover:失效转移,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换
Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
1、Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
2、Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
3、Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
4、Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: