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

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

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)等功能。

c1b0ea77fb4e3d874b345a2ae32bdfaa.png

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

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

2049a390b268a7d542743721dffa681d.png

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

05 路由、流量调度、ABtest

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

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

2)Dubbo更加灵活方便

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

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

06 总结

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

aa8b92498c94bf5b7a60a71a5b60c5c6.png

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

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

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

如果觉得不错,请点赞支持下,谢谢

超500+架构技术专题集合,回复【架构】,即可获得。

45f336d283a76c41b6e862c11b735233.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Java更新DynamoDB项

在上一篇文章中&#xff0c;我们继续使用Java将项目插入DynamoDB。 DynamoDB还支持更新项目。 我们将使用Login表获取更新示例。 发布更新时&#xff0c;必须指定要更新的项目的主键。 public void updateName(String email,String fullName) {Map<String,AttributeValue…

Python执行系统命令的方法 os.system(),os.popen(),commands

最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类。 最开始的时候用 Python 学会了 os.system() 这个方法是很多比如 C&#xff0c;Perl 相似的。 os.system(cat /proc/cpuinfo) 但是这样是无法获得到输出和返回值的&#xff0c;继续 Goog…

opencv的两个错误

1、imwrite未定义标识符先检查opencv和C有没有配置好&#xff0c;再看有没有包含相应的头文件&#xff0c;最后发现是因为没有使用cv的命名空间&#xff0c;需要加上using namespase cv&#xff1b; 2、cvCvtColor的使用函数原型&#xff1a;cvCvtColor&#xff08;src&#xf…

BTC、BCH和BSV三者到底有什么区别?

比特币发展到今天已经有10个年头了&#xff0c;在这十年的发展中&#xff0c;比特币一共经历了两次重要的分裂&#xff0c;现在变成了三种货币&#xff0c;第一种是目前继承了比特币绝大多数遗产的BTC&#xff1b;第二种是BCH&#xff1b;第三种是BSV。那这三种货币到底有什么区…

ping 不通 华为三层交换机vlan_华为三层交换机如何让VLAN间不能互通配置精编版...

时可以利用hybrid属性定义分属于不同的vlan的端口之间的互访&#xff0c;这是access和trunk端口所不能实现的。在一台交换机上不允许trunk端口和hybrid端口同时存在。1.先创建业务需要的vlan[SwitchA]vlan 10[SwitchA]vlan 20[SwitchA]vlan 30[SwitchA]vlan 40[SwitchA]vlan 50…

python进程池:multiprocessing.pool

阅读目录 例1&#xff1a;使用进程池例2&#xff1a;使用进程池&#xff08;阻塞&#xff09;例3&#xff1a;使用进程池&#xff0c;并关注结果例4&#xff1a;使用多个进程池 在利用Python进行系统管理的时候&#xff0c;特别是同时操作多个文件目录&#xff0c;或者远程控制…

eclipse juno_放弃Eclipse Juno

eclipse juno在上一个博客中&#xff0c;我发布了有关Eclipse 4.2 Juno设置的信息。 在需要重新安装其他东西的情况下&#xff0c;为我提供了很多参考。 那时我没有谈论的是我与Juno共同遇到的问题。 我以为这是我自己的安装程序&#xff0c;很麻烦&#xff0c;但是此后并没有太…

C语言结构体数组的使用

1、结构体数组的优点结构体可以存储不同的数据类型&#xff0c;将他们互相联系起来。结构体数组可以连续存储多个结构体&#xff0c;和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值&#xff0c;并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时&am…

arthas 查看哪个方法调用最耗时_Java开源诊断工具Arthas使用方法详解

一、前言1、热更新代码的场景(1)当线上服务器出现问题时&#xff0c;有些时候现有的手段不足以发现问题所在&#xff0c;可能需要追加打印日志或者增加一些调试代码&#xff0c;如果我们去改代码重新部署&#xff0c;会破坏问题现场&#xff0c;可以通过热部署的手段来增加调试…

Java 12 - Java StringBuffer和StringBuilder类

Java StringBuffer和StringBuilder类 当对字符串进行修改的时候&#xff0c;需要使用StringBuffer和StringBuilder类。 和String类不同的是&#xff0c;StringBuffer和StringBuilder类的对象能够被多次的修改&#xff0c;并且不产生新的未使用对象。 StringBuilder类在Java 5中…

将你的Vim 打造成轻巧强大的IDE

Vim和Emacs一个称为神之编辑器一个被称为编辑器之神&#xff0c;固然很是夸张&#xff0c;但也足以说明这两 款软件的优秀和在程序员界的地位。但是它们都已漫长的学习曲线让人望而生畏&#xff0c;阻止了大 多数人进入。作为一名几乎完全使用Vim写各种代码、文档的人&#xff…

NutchServer的安全层

我曾作为GSoC 2016项目在Apache Nutch的NutchServer的Security Layer上工作&#xff0c;并完成了它。 在此博客文章中&#xff0c;我将解释其工作原理和使用方法。 首先&#xff0c;建议您阅读以前有关GSoC 2016接受的帖子&#xff1a; http ://furkankamaci.com/gsoc-2016-acc…

借助opencv将unsigned char数组显示为图像

在用C或者C做图像处理程序时&#xff0c;经常需要把结果图显示出来看看效果&#xff0c;这时候可以借助opencv的Mat类型&#xff0c;如下&#xff1a;Mat gray1_mat(rect_height, rect_width, CV_8UC1, minsrc);//为了显示图片 先改为mat类型imshow("去雾图像显示", …

眼图观测实验报告_眼图观察测量实验

实验12眼图观察测量实验一、实验目的1.学会观察眼图及其分析方法&#xff0c;调整传输滤波器特性。二、实验仪器1.眼图观察电路(底板右下侧)2&#xff0e;时钟与基带数据发生模块&#xff0c;位号&#xff1a;G 3&#xff0e;噪声模块&#xff0c;位号E 4&#xff0e;100M双踪示…

C、C++申请指针内存的问题

关于指针的血和泪的教训 1、指针申请时一定要检查是否申请成功&#xff0c;当项目比较庞大时&#xff0c;内存有可能申请不成功导致程序中断&#xff0c;而这时候往往无从知道哪里出现了问题。如下&#xff1a;double* wid (double*)malloc((num1) *sizeof(double));//存储每个…

invalid use of null value

给mysql的数据表的一个字段插入数据,不成功, 然后在数据表设计中,把不是null勾选上,又提示 invalid use of null value 这种情况比较尴尬 只能删掉这一个字段,然后新建一个同样名字的字段,然后直接勾选不是null然后在保存就行了 转载于:https://www.cnblogs.com/jnhs/p/1008253…

android 13.0 Launcher3定制folder文件夹16宫格实现二

1. 概述 在13.0的系统产品rom定制化开发中,对于Launcher3的定制功能也是不少的,比如在Launcher3中添加默认文件夹,把默认的app添加的文件夹里面,其他的app 然后按顺序排序。在文件夹布局就是默认的16宫格布局,接下来分析下相关源码来实现功能 2.Launcher3定制化之修改添…

vim配置及插件安装管理(超级详细)

1写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我想如果有一…

vue 父链和子组件索引_vue子组件和父组件双向绑定的几种方案

v-model案例模仿v-model实现案例我是一串要和内部名字联动的一串文字(父组件)父组件改变值带动(父组件)点一下试试.sync方案实现案例这是父组件的东西。利用这个框改变值&#xff0c;看看有没有传到子组件&#xff0c;也可以改子组件看看这里有变化没// v-model方案 你写上一个…

程序逻辑上多一些提示

写程序时要想下各种可能出错的情况&#xff0c;提前给出错误提示&#xff0c;项目大了就可以比较容易找错误。 比如&#xff0c;当特征点个数小于4时不能计算单应矩阵&#xff0c;所以当个数小于4时先输出提示&#xff1a; if (matchePoints.size()>10)for (int i 0; i<…