最近我们试图从Dubbo迁移到Spring Cloud。为此对二者分别进行了性能测试。为了得出数据量不同的情况下的二者的性能表现,我们分别准备了一个25个属性pojo对象和一个50个属性的pojo对象,通过这样的方式我们也可以间接地了解二者在序列化方面的水平。

以下是测试结果:

25个属性,10W次:

50个属性,10W次:

分析:

        由于Spring Cloud与Dubbo天生使用的协议层面不一样,前者是HTTP,后者是TCP(使用的是Netty NIO框架,序列化使用的阿里定制版Hessian2),导致两个框架的性能差距略大。基本上是三比一的差距!Dubbo官方TPS是1W左右,这和我们的测试最高值是接近的。在之前我们还进行过一次测试,那次测试是真实的项目测试,包含了对数据库的访问,最后二者的结果相差并不是很大。由此也得出,框架的性能可能对一个真实的请求(Request)影响并不是很大,或者说并不起决定性作用,也许真正影响性能的是你的业务代码,比如数据库访问以及IO,当然了,框架的性能在一些对性能要求敏感的应用来说也是要考虑的。

另外根据Dubbo官方说法,Dubbo在小数据量的情况下表现卓越,这和我们的测试也是吻合的,在50个属性的pojo对象下,Dubbo性能确实下降了。

另外Spring Cloud默认的feigh client是使用jdk的urlconnection来做HTTP的请求,考虑这种做法的性能问题,我们尝试接入了httpclient包来测试,结果发现httpclient更慢,最后我们引入了开源的okhttp包,综合发现,okhttp和Spring Cloud的feign client结合是性能最高的。

还有就是我们之前也测试过用RestTemplate进行测试,性能要比用Feigh还要好一些。大概能提升百分之十到十五。

虽然Spring Cloud在性能上与Dubbo有天生的劣势,但考虑到Spring Cloud作为一套专门的微服务框架,再加上RESTful风格的API的趋势,从综合的角度,Spring Cloud无疑是你所在的公司未来微服务化进程中不可缺少的选择之一!

以上测试仅供参考!

测试环境:

1、微服务服务器:

CPU(s): 12

Free Mem:6G

2、注册中心服务器:

开发环境机器。

3、客户机器:

CPU(s): 2

Free Mem:2G

测试工具:

OneTest

版本信息:

Dubbo:2.8.4

Spring Cloud:1.4.3.RELEASE

http://mp.weixin.qq.com/s?__biz=MzA5MzQ2NTY0OA==&mid=2650796496&idx=1&sn=a544b76660484b9914b65f038cc39e6d&chksm=88562c8fbf21a5995909ffa9f172f31651b1ebd04897917e43caef3491954e24ed0d0477a5a1&mpshare=1&scene=23&srcid=01245faqrBlQETYK9c7zVmd3#rd

孰优孰劣?Dubbo VS Spring Cloud性能测试大对决!的更多相关文章

  1. 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣

    标签: 微服务dubbospring架构 前言 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然 ...

  2. BT Smart vs ANT+ 技术孰优孰劣?

    自从Bluetooth SIG提出Bluetooth 4.0,其BLE(Bluetooth Low Energy)开始用于穿戴式电子,而后也用于iBeacon室内定位,更之后Bluetooth 4.1 ...

  3. Dubbo和Spring Cloud微服务架构比较

    Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...

  4. dubbo 与Spring Cloud 对比

    链接:https://www.zhihu.com/question/45413135/answer/242224410 近期也看到一些分享Spring Cloud的相关实施经验,这对于最近正在整理Sp ...

  5. Dubbo和Spring Cloud微服务架构'

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  6. Dubbo和Spring Cloud

    1.Dubbo和Spring Cloud区别 1).通信方式不同 Dubbo使用RPC通信,Spring Cloud使用Http RestFul方式 2) 组成部分不同 组件 Dubbo Spring ...

  7. 你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  8. 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

    转自:https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc 微服务架构是互联网很热门的话题,是互 ...

  9. Dubbo 和 Spring Cloud微服务架构 比较及相关差异

    你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...

随机推荐

  1. CentOS yum时出现"Could not retrieve mirrorlist"

    问题描述: CentOS 6.x minimal(最小化) 安装, CentOS yum install net-tools 时出现"Could not retrieve mirrorlis ...

  2. jackson 中JsonFormat date类型字段的使用

    为了便于date类型字段的序列化和反序列化,需要在数据结构的date类型的字段上用JsonFormat注解进行注解具体格式如下 @JsonFormat(pattern = "yyyy-MM- ...

  3. java byte数组与String互转

      java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String ...

  4. jqPlot图表插件学习之阴阳烛图

    一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...

  5. SElinux测试及排错

    一.修改SElinux的状态 #sestatus --查看状态 #setenforce --临时修改 #setenforce #getenforce #vim /etc/selinux/config ...

  6. UAC 实现原理及绕过方法

    目录 0x00 UAC 工作流程 0x01 UAC 实现方法(用户登陆过程) 0x02 UAC 架构 0x03 触发UAC 0x04 UAC 虚拟化 0x05 UAC 逆向分析 1x00 UAC By ...

  7. Javascript 思维导图 绘制基础内容(值得一看)

    来源于:http://www.cnblogs.com/coco1s/p/3953653.html javascript变量 javascript运算符 javascript数组 javascript流 ...

  8. ID3D11DeviceContext::DrawIndexed DrawIndexed 参数详解 StartIndexLocation BaseVertexLocation

    先来看一下画的结果: m_pImmediateContext->DrawIndexed(36, 0, 0); 这个是画一个立方体 后两个参数都是0没有什么可说的. m_pImmediateCon ...

  9. django日志使用TimeRotateFileHandler

    如果使用django的settings.py设置日志会产生一些问题. 问题描述 报错信息如下: Traceback (most recent call last): File "C:\Pyt ...

  10. set方法的内存管理细节

    一.多个对象之间的内存管理 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次releas ...