本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
最近在做Dubbo,发现之前对Dubbo的理解有点误区。之前一直觉得Dubbo只是一套RPC框架,并没有一些云上微服务的那套(Netflix开源的那套)。最近仔细看了一下,发现其实每个方面都有涉及。
1.集群容错
Dubbo的集群容错是在dubbo-cluster模块中(h ttps://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)最少活跃调用数
4)一致性 Hash (http://en.wikipedia.org/wiki/ Consistent_hashing)
这个和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
这里提供了监控和治理中心。但是这里的治理中心是阉割版。 只有最基本的服务降级,动态路由和信息管理。
相关链接
- https://github.com/apache/incubator-dubbo
- https://github.com/Netflix/zuul
- https://github.com/Netflix/Hystrix
- https://github.com/Netflix/ribbon
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯