在微服务架构中,分布式通信、分布式事务、分布式锁等问题是亟待解决的几个重要问题。

Spring Cloud是一套完整的微服务解决方案,基于 Spring Boot 框架。确切的说,Spring Cloud是一个大容器(而不是一个框架),它可以将通过集成一些好的微服务框架,从而简化开发者的代码量。

Dubbo 是阿里开源的分布式通信框架,专注于通信服务治理,类似于Spring Cloud中 Ribbon、 Hystrix、 Feign等核心组件的功能。

下面,我们着重来聊下这两种处理方式有何不同。

01 协议处理

1)Spring Cloud更加优雅简单

Feign使用Http进行传输。

Feign 集成了Ribbon,并且嵌入了Spring cloud全家桶 ,通过简单配置 ,就能在分布式里面实现服务间的调用,类似于Bean 调用。

2)Dubbo方式更灵活

Dubbo协议可选,大部分情况使用Dubbo传输协议,也可以使用http协议。

从协议层选择看,Dubbo是配置化的,更加灵活。

Dubbo 协议更适合小数据高并发场景。

02 性能方面

1)Spring Cloud性能调优

Feign 在高并发场景下,通常需要进行如下性能优化,有明显瓶颈,需要改造。

· 调整服务容器到 UnderTow ,在负载大的情况下Undertow 的性能有提高;

· 曾有同学表示将HTTPURLConnection 改成 Httpclient /Okhttp,这样可以优化性能,其实单次调用性能Httpclient差很多,HttpClient 因为封装了很多方便开发者处理的方法,性能比HTTPURLConnection差,改进同时Httpclient 需要设置复用连接池,效果可见一般;

· 开启Gzip;

· Feign中HttpMessageConverters 默认使用jackson2方式进行序列化和反序列化,可以将其改造为ProtoBuf,降低Cpu 损耗并且响应时间也降低。

2)Dubbo性能调优

主要是配置而无需改造。

03 负载均衡

1)Ribbon 的负载均衡策略

· 随机;

· 规则轮询;

· 空闲策略;

· 响应时间策略。

Feign默认使用Ribbon作为负载均衡的组件,Ribbon需要进行全局配置,个性化配置比较麻烦。

2)Dubbo 的负载均衡策略

· 随机;

· 权重轮询;

· 最少活跃调用数;

· 一致性Hash策略。

Dubbo 可以使用路由策略,然后再进行负载均衡。

04 容错机制

Spring cloud 的 Hystix 提供了服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。

图片为引用,来源于官方图片

Dubbo 提供了一整套 FailOver、FailFast、Failsafe、FailBack、Aviailable、Broadcast、Forking 策略,以及Mock

图片为引用,来源于官方图片

05 路由、流量调度、ABtest

1)Ribbon需自己实现,应用不灵活

Ribbon主要通过扩展 AbstractLoadBalancerRule负载均衡的方法来实现,在负载均衡的部分还要进行改造升级。

2)Dubbo更加灵活方便

Dubbo通过界面化、校本化配置路由规则,可以实现灰度发布、动态流量调度、容量计算等,方案成熟。

另外,Dubbo 还支持多版本调用。

06 总结

正如Dubbo的介绍(如下图),业务发展影响着架构的选型,当服务数量不是很大时,使用普通的分布式RPC架构即可,当服务数量增长到一定数据,需要进行服务治理时,就需要考虑使用流式计算架构。

图片为引用,来源于官方图片

Dubbo可以方便的做更精细化的流量调度,服务结构治理的方案成熟,适合生产上使用,虽然Dubbo是尘封后重新开启,但这并不影响其技术价值。

Ribbon Hystrix Feign在服务治理中,配合Spring Cloud做微服务,使用上有很多优势,社区也比较活跃,看将来更新发展。

你可能也喜欢:

  1. 微服务系列:服务注册与发现的实现原理、及实现优劣势比较
  2. Spring Cloud的核心成员、以及架构实现详细介绍
  3. 阿里P8架构师谈:微服务Dubbo和SpringCloud架构设计、优劣势比较
  4. 阿里P8架构师谈:Spring Cloud与Dubbo的详细比较
  5. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别

微服务系列:Dubbo与SpringCloud的Ribbon、Hystrix、Feign的优劣势比较相关推荐

  1. 分布式与微服务系列 - Dubbo

    一.前言 本内容仅用于个人学习笔记,如有侵扰,联系删除 视频教程:尚硅谷Dubbo教程(dubbo经典之作) 二.基础知识 1.分布式基础理论 1.1.什么是分布式系统? <分布式系统原理与范型 ...

  2. springcloud微服务系列之服务注册与发现组件Eureka

    一.Eurake的简介 二.使用Eureka进行服务的注册消费 1.创建一个服务注册中心 2.创建服务的提供者 3.创建服务的消费者 总结 一.Eurake的简介 今天我们来介绍下springclou ...

  3. 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)

    SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者.消费者) 一.软件架构和微服务需求 1.1.微服务需求 1.2.框架选择 1.3.集群分布(下面为此图实 ...

  4. 微服务系列:服务注册与发现的实现原理、及实现优劣势比较

    服务注册与发现的来源 首先,服务注册与发现是来自于微服务架构的产物. 在传统的服务架构中,服务的规模处于运维人员的可控范围内.当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定.而在微服 ...

  5. docker -v 文件夹下没有数据_微服务就是Dubbo?并没有那么简单!微服务架构+Docker+k8s了解下...

    微服务算是面试中非常高频的词汇了! 之前我就遇到一个候选人,我问他微服务是什么,他说:"微服务就是 Dubbo--",然后把 Dubbo 的原理说的清清楚楚.回答的我都动心了,我猜 ...

  6. 微服务系列 —— 一小时搞定Eureka

    微服务系列  -- 一小时搞定Eureka 一.什么是Eureka Eureka是Netflix公司开源的产品,它是一种基于REST( Representational State Transfer  ...

  7. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

  8. 01.微服务系列介绍

    微服务系列实践 .NET CORE 在开始之前呢,还是得废话一下,毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构,也让大家能初步的有一个了解,后续实践起来也有一个完整的概念,相对也会容易的 ...

  9. dubbo优势_Dubbo与SpringCloud核心组件Ribbon、Hystrix、Feign的优劣势比较

    在微服务架构中,分布式通信.分布式事务.分布式锁等问题是亟待解决的几个重要问题. Spring Cloud是一套完整的微服务解决方案,基于 Spring Boot 框架.确切的说,Spring Clo ...

最新文章

  1. 面试:说说 Spring MVC 的执行过程?
  2. Qt学习之路(52): 拖放技术之一
  3. JS校验身份证号码的有效性
  4. Elasticsearch Pipeline Aggregation管道聚合详解
  5. iOS13后添加SceneDelegate初始化window
  6. 都是大人物,看看你认识几个。
  7. layui多文件上传讲解_Layui 多文件上传 SSH
  8. lora信号测试小助手_433m无线收发模块LoRaF30如何进行距离测试
  9. oracle存储过程如何传递一个bean对象_对象传输,序列化和反序列化
  10. LLVM每日谈之一 LLVM是什么
  11. 印尼玩lol注册哪个服务器,LOL手游印尼服怎么注册 云顶之弈印尼服账号注册方法[多图]...
  12. ubuntu启动virtualbox出错解决办法:RTR3InitEx failed with rc=-1912 (rc=-1912)
  13. 用科学数据求真:地月之间不可能电视直播
  14. C语言 进制转换 将十进制转换为任意进制
  15. Linux C编程实战——第六章 文件操作_项目实现_自写ls命令
  16. GIS中坐标系的基本概念
  17. 走进通信:为什么4G信号满格,却上不了网呢
  18. Java多线程——线程池使用示例
  19. c++面向对象的学生管理系统
  20. 程序员女朋友礼物python代码_@程序员,用 Python 给女朋友准备个儿童节礼物可好?...

热门文章

  1. BZOJ K大数查询(分治)(Zjoi2013)
  2. Qt删除 空格/空白符
  3. Linux多线程——使用互斥量同步线程
  4. mini2440驱动分析之LCD
  5. python第2位的值_Python组通过匹配元组列表中的第二个元组值
  6. 云数据中心网络遇到的问题_云数据中心面临安全问题,华为SDN解决方案有一个安全大脑...
  7. python连连看小游戏_python实现连连看游戏
  8. python层次聚类_python实现层次聚类
  9. 【Pytorch神经网络实战案例】10 搭建深度卷积神经网络
  10. React Hooks的使用(一)——useState、useEffect解析