Spring Cloud RPC(Feign VS Dubbo)多维度对比选型

Spring Cloud RPC(Feign VS Dubbo)多维度对比选型

社区活跃度对比

Dubbo

Spring Cloud RPC(Feign VS Dubbo)多维度对比选型
image-20211217191656495

Feign

Spring Cloud RPC(Feign VS Dubbo)多维度对比选型
image-20211217191637815

协议

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

Spring Cloud RPC(Feign VS Dubbo)多维度对比选型
image-20211217194300008

图片官网链接

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

Feign

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

Spring Cloud RPC(Feign VS Dubbo)多维度对比选型
image-20211217195412577

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

容错机制

Dubbo

支持多种容错策略:

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

Feign

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

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

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

迁移

Dubbo

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

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

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

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

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

Feign

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

文档

Dubbo

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

Feign

英文文档,全面性一般

总结

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


原文始发于微信公众号(小奏技术):Spring Cloud RPC(Feign VS Dubbo)多维度对比选型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/30174.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!