Dubbo与SpringCloud的Ribbon、Hystrix、 Feign的优劣势⽐较

在微服务架构中,分布式通信、分布式事务、分布式锁等问题是亟待解决的⼏个重要问题。
Spring Cloud是⼀套完整的微服务解决⽅案,基于 Spring Boot 框架。确切的说,Spring Cloud是⼀个
⼤容器(⽽不是⼀个框架),它可以将通过集成⼀些好的微服务框架,从⽽简化开发者的代码量。

Dubbo 是阿⾥开源的分布式通信框架,专注于通信服务治理,类似于Spring Cloud中 Ribbon、
Hystrix、 Feign等核⼼组件的功能。
下⾯,我们着重来聊下这两种处理⽅式有何不同。

协议处理

Spring Cloud更加优雅简单
Feign使⽤Http进⾏传输。
Feign 集成了Ribbon,并且嵌⼊了Spring cloud全家桶 ,通过简单配置 ,就能在分布式⾥⾯实现服务间
的调⽤,类似于Bean 调⽤。

Dubbo⽅式更灵活
Dubbo协议可选,⼤部分情况使⽤Dubbo传输协议,也可以使⽤http协议。
从协议层选择看,Dubbo是配置化的,更加灵活。
Dubbo 协议更适合⼩数据⾼并发场景。

性能⽅⾯

Spring Cloud性能调优
Feign 在⾼并发场景下,通常需要进⾏如下性能优化,有明显瓶颈,需要改造。
调整服务容器到 UnderTow ,在负载⼤的情况下Undertow 的性能有提⾼;
曾有同学表示将HTTPURLConnection 改成 Httpclient /Okhttp,这样可以优化性能,其实单次调⽤性
能Httpclient差很多,HttpClient 因为封装了很多⽅便开发者处理的⽅法,性能⽐HTTPURLConnection
差,改进同时Httpclient 需要设置复⽤连接池,效果可⻅⼀般;

开启Gzip;
· Feign中HttpMessageConverters 默认使⽤jackson2⽅式进⾏序列化和反序列化,可以将其改造为
ProtoBuf,降低Cpu 损耗并且响应时间也降低。

Dubbo性能调优
主要是配置⽽⽆需改造

负载均衡

Ribbon 的负载均衡策略
. 随机;
· 规则轮询;
· 空闲策略;
· 响应时间策略。
Feign默认使⽤Ribbon作为负载均衡的组件,Ribbon需要进⾏全局配置,个性化配置⽐较麻烦。

Dubbo 的负载均衡策略
· 随机;
· 权重轮询;
· 最少活跃调⽤数;
· ⼀致性Hash策略。
Dubbo 可以使⽤路由策略,然后再进⾏负载均衡。

容错机制

Spring cloud 的 Hystix 提供了服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。
Dubbo与SpringCloud的Ribbon、Hystrix、 Feign的优劣势⽐较_第1张图片

Dubbo 提供了⼀整套 FailOver、FailFast、Failsafe、FailBack、Aviailable、Broadcast、Forking 策
略,以及Mock
Dubbo与SpringCloud的Ribbon、Hystrix、 Feign的优劣势⽐较_第2张图片

路由、流量调度、ABtest

Ribbon需⾃⼰实现,应⽤不灵活
Ribbon主要通过扩展 AbstractLoadBalancerRule负载均衡的⽅法来实现,在负载均衡的部分还要进⾏
改造升级。

Dubbo更加灵活⽅便
Dubbo通过界⾯化、校本化配置路由规则,可以实现灰度发布、动态流量调度、容量计算等,⽅案成
熟。
另外,Dubbo 还⽀持多版本调⽤。

总结

正如Dubbo的介绍(如下图),业务发展影响着架构的选型,当服务数量不是很⼤时,使⽤普通的分布式
RPC架构即可,当服务数量增⻓到⼀定数据,需要进⾏服务治理时,就需要考虑使⽤流式计算架构。
Dubbo与SpringCloud的Ribbon、Hystrix、 Feign的优劣势⽐较_第3张图片
Dubbo可以⽅便的做更精细化的流量调度,服务结构治理的⽅案成熟,适合⽣产上使⽤,虽然Dubbo是
尘封后重新开启,但这并不影响其技术价值。
Ribbon Hystrix Feign在服务治理中,配合Spring Cloud做微服务,使⽤上有很多优势,社区也⽐较活
跃,看将来更新发展。

你可能感兴趣的:(编程学习,dubbo,spring,cloud,ribbon)