irpas技术客

Spring Cloud RPC(Feign VS Dubbo)多维度对比选型_念念不忘,必有回响_dubbo feign 对比

网络 5311

文章目录 社区活跃度对比DubboFeign 协议DubboFeign 与Spring Cloud 集成DubboFeign 负载均衡DubboFeign 容错机制DubboFeign 迁移DubboFeign 文档DubboFeign 总结关于我

社区活跃度对比 Dubbo

Feign

协议 Dubbo 支持多传输协议: Dubbo、Rmi、http,可灵活配置 Feign

基于Http传输协议,短连接,性能比dubbo低

与Spring Cloud 集成 Dubbo

在早期Dubbo是与Spring Cloud 集成有一些脱落,但是在Spring Cloud Alibaba 出现后,spring-cloud-starter-dubbo 与Spring Cloud完美集成

Feign

Spring Cloud 最早支持的RPC框架,兼容性好

负载均衡 Dubbo

图片官网链接

同时支持服务端负载均衡和客户端负载均衡配置,灵活度非常高

Feign

Feign自身是没有负载均衡能力的,之前默认使用Ribbon作为负载均衡的组件,但是Netfix 已经不在维护了

新版本的Spring Cloud已经将Ribbon替换成Spring Cloud Load Balancer,Ribbon是客户端级别的负载均衡,不像dubbo支持客户端和服务端双向配置

容错机制 Dubbo

支持多种容错策略:

Failover Cluste:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。默认容错机制Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。 Feign

Feign默认使用Netfix Hystrix作为服务熔断的组件。Hystix提供了服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。

目前 Hystrix 已经处于维护(maintenance)状态,不再继续开发,这个消息是Netfix 在2018年对外宣布的。Hystrix GitHub页面上也说明了该项目目前处于维护模式

在使用dubbo后续的熔断降级也还可以使用Alibaba Sentinel

迁移 Dubbo

dubbo为了提供对RestTemplate和OpenFeign客户端端的支持,在Dubbo Spring Cloud提供了@DubboTransported注解,使客户端无需额外处理即可兼容RestTemplate和OpenFeign的调用,换而言之在不调整 Feign 接口以及 RestTemplate URL 的前提下,可以实现无缝迁移

比如在客户端使用OpenFeign调用duboo服务,只需要添加如下注解如下

@FeignClient("order") @DubboTransported(protocol = "dubbo")

使用RestTemplate或OpenFeign调用Dubbo服务会经历以下过程:

根据服务名得到注册中心的Dubbo服务DubboMetadataService。使用DubboMetadataService里提供的getServiceRestMetadata方法获取要使用的Dubbo服务和对应的Rest元数据。基于Dubbo服务和Rest元数据构造GenericService。服务调用过程中使用GenericService发起泛化调用。 Feign

没有提供对dubbo无缝迁移的支持

文档 Dubbo

中文、英文都有,比较全面

Feign

英文文档,全面性一般

总结 dubbo作为Spring Cloud Alibaba 中的RPC组件,从社区活跃度来说是Feign远不能及的。其次Netfix大多微服务组件都不在维护,而Spring Cloud Alibaba逐渐成为趋势从功能上来说dubbo更多,也就意味着更重,反观Feign肯定是更轻量从性能来说dubbo肯定是要比Feign高的从支持的协议来说也是dubbo更多更灵活Feign服务调用不需要发额外的jar包去依赖(服务调用不用限定全类名),可以直接调用,这点算是优势也是劣势。如果前期使用Feign,后期要替换成dubbo,dubbo提供了无缝迁移 关于我

? 觉得文章不错请扫码关注我吧

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #dubbo #Feign #对比 #Cloud #DubboRmihttp