SOAP 编码对 Web 服务性能的影响

最近几个项目中都使用到了SOAP协议,最后版本验收时客户要求做性能测试,没办法之后请来了性能差测试专家配合测试


几个场景测试下来,发现TPS和响应时间与峰值不高,下降趋势非常明显,达不到验收验收指标,没办法只好硬着头皮去搞分析


最后在数据库,系统,代码上都做了相应的优化,测试结果提升不是很明显,仍然不令人满意


于是开始怀疑客户给的性能指标是拍脑袋出来的,准备和客户去PK,结果未遂


虽然现在不直接参与技术上的问题,但是看到项目组兄弟们都很苦恼,求生无门,求死不得,最终决定亲自投入和他们在分析一次。


先从代码上入手,寻循序渐进,最终发现SOAP编码对WEB服务的性能影响很大


首先必须先了解SOAP编码样式:

SOAP 远程过程调用(Remote Procedure Call,RPC)编码

SOAP 远程过程调用文字编码(SOAP RPC-literal),它使用 RPC 方法进行调用但使用 XML 自制的方法编入数据
SOAP 文档样式(document-style)编码,也称为 消息样式(message-style)或 文档文字(document-literal)编码

这三种样式之间的差异:

SOAP RPC这种编码样式是最简便的。您对远程对象进行调用,并传递任意必需的参数。SOAP 堆栈将这些参数序列化为 XML,再使用传输协议(如 HTTP 和 SMTP)将这些数据传送到目的地,然后接收响应,并将接收到的响应反序列化为对象,然后将结果返回到调用方法。唷!SOAP RPC 处理了所有的编码和解码工作(即使对于非常复杂的数据类型也是如此)并自动绑定到远程对象。


现在,请想像一下您的某些数据已经是 XML 格式的情况。SOAP RPC 也允许通过文字编码将这些 XML 数据转换为单个字段,然后将这些字段序列化并发送到 Web 服务主机。这就是 RPC-literal编码所指的内容。由于只有一个参数 - 即 XML 树 - 所以 SOAP 堆栈只需要对一个值进行序列化。SOAP 堆栈仍然处理传输问题以将请求传送到远程对象。堆栈将请求绑定到远程对象并处理响应。


最后,在 SOAP 文档样式调用中,SOAP 堆栈将整个 XML 文档发送到服务器,甚至不需要一个返回值。消息可以包含任何种类的对于远程服务适合的 XML 数据。在 SOAP 文档样式编码中,开发人员要处理每一件事,包括确定传输协议(如 HTTP、MQ 或 SMTP)、编入和编出 SOAP 信封体以及对请求和响应中的 XML 进行解析以找到所需的数据。

 

下图是三种方法的测试结果,仅供参考

 


总结:如果对性能要求很高的情况下,建议使用SOAP RPC-literal编码,但是这里就需要考虑到XML操作的性能问题

你可能感兴趣的:(技术)