因为最近要推行用webservice soap来实现多语言的调用的服务,所以对soap进行一个简单的压力测试,就是一句简单的字符串传输和一个简单的对象传输返回。
简单的压测,结果并不尽如人意,在100M的带宽(局域网内的两台机器),跑满了带宽每秒的调用数就是2000多而已。如果没有对比,或许我不会不满意,但是,由于之前公司部分架构是采用alibaba的rpc框架dubbo进行开发soa服务的,我当时简单的测试下,同样的100M带宽同样的测试内容,dubbo可以达到数万次/秒的调用。因此相当的不满意。
后来,了解了dubbo和webservice soap之间的在传输和序列化方面的区别(在我看来RPC框架的性能其实最重要的决定性就是这两种)。
dubbo是基于java netty实现二进制数据传输,默认用java Serializer进行序列化的框架,即是属于二进制协议。
soap则是简单对象访问协议 (SOAP:Simple Object Access Protocol)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。
现在原因就在这里了,soap的协议是属于文本协议,而且序列化则是采用xml序列化,soap协议的附加内容太大,导致传输上比dubbo的传输慢,而且序列化xml也比直接二进制序列化慢,所以性能上dubbo都是优于webservice soap的。
尽管,webservice soap的性能低于dubbo,但是考虑到跨语言调用以及实施部署难度,接下来只能继续推行webservice soap。