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