相关文章推荐
高大的长颈鹿  ·  python selenium ...·  3 月前    · 
不羁的感冒药  ·  在 ...·  5 月前    · 
一身肌肉的烈马  ·  The Open Toolkit ...·  10 月前    · 
聪明的红薯  ·  PostgreSQL: Exception ...·  1 年前    · 

与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提供了无缝迁移
  • 觉得文章不错请扫码关注我吧

    基础架构 @apache
    粉丝