• 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 提供了⼀整套 FailOver、FailFast、Failsafe、FailBack、Aviailable、Broadcast、Forking 策
    略,以及Mock
    在这里插入图片描述

    路由、流量调度、ABtest

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

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

    总结

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

  • 相关阅读:
    世界前沿技术发展报告2023《世界信息技术发展报告》(六)网络与通信技术
    Spire.Office for Java 7.11.2 - 2022-11-16
    java字符串转数字
    107. 二叉树的层序遍历 II
    React组件设计之性能优化篇
    再探Kotlin 跨平台——迁移Paging分页库至KMM
    《算法导论》第16章-贪心算法 16.1-活动选择问题(含C++代码)
    Java基础进阶TreeSet集合-Comparable,Comprator接口
    Python自学教程5-字符串有哪些常用操作
    在Linux安装nginx
  • 原文地址:https://blog.csdn.net/weixin_43118617/article/details/125663033