关于Dubbo

16 4月

最近在做Dubbo,发现之前对Dubbo的理解有点误区。之前一直觉得Dubbo只是一套RPC框架,并没有一些云上微服务的那套(Netflix开源的那套)。最近仔细看了一下,发现其实每个方面都有涉及。

1.集群容错

Dubbo的集群容错是在dubbo-cluster模块中(https://github.com/apache/incubator-dubbo/tree/master/dubbo-cluster)。实现是在RPC层,当调用完成后会根据配置做出处理。有以下几种:
1)失败自动切换,当出现失败,重试其它服务器。这个是默认策略
2)快速失败,只发起一次调用,失败立即报错
3)失败安全,出现异常时,直接忽略
4)失败自动恢复,后台记录失败请求,定时重发
5)并行调用多个服务器,只要一个成功即返回
6)广播调用所有提供者,逐个调用,任意一台报错则报错
这个和Hystrix是不一样的,Dubbo只是提供了容错,但是没有熔断。如果需要熔断,需要自己在消费者一端实现对应逻辑,和Dubbo框架无关。

2.负载均衡

Dubbo是支持负载均衡的,实现同样在 dubbo-cluster模块中(https://github.com/apache/incubator-dubbo/tree/master/dubbo-cluster)。也是在RPC层,具体的调用发生前完成。负载均衡的策略有以下几种:
1)随机。这个是默认策略
2)轮循
3)最少活跃调用数
这个和ribbon有点像,但是只提供了本地负载均衡,策略比ribbon少,不包含ribbon的缓存和拦截器特性。

3.版本兼容

如果出现不兼容升级时,可以用版本号特性过渡,版本号不同的服务相互间不引用。
版本迁移步骤如下:
1)在低压力时间段,先升级一半提供者为新版本
2)再将所有消费者升级为新版本
3)然后将剩下的一半提供者升级为新版本

4.动态路由

Dubbo的动态路由是一段脚本,支持javascript, jruby, groovy. 举几个常见的用例:
1)排除预发布机
2)白名单和黑名单
3)读写分离
4)隔离不同机房网段

Dubbo的动态路和zuul的有点区别,它只提供动态路由,不包含zuul的监控等。

5.devops

Dubbo的服务治理有另外一个库,地址:https://github.com/apache/incubator-dubbo-ops
这里提供了监控和治理中心。但是这里的治理中心是阉割版。只有最基本的服务降级,动态路由和信息管理。

相关链接

  1. https://github.com/apache/incubator-dubbo
  2. https://github.com/Netflix/zuul
  3. https://github.com/Netflix/Hystrix
  4. https://github.com/Netflix/ribbon

 

发表评论

电子邮件地址不会被公开。