项目要求:
我需要构建一个Web服务,它将接收大量的文本数据,从几千字节到10兆字节,但平均徘徊在几百千字节左右。会有大量的交易,我想通过身份验证,SSL以及最终的一些加密来保护服务。
如果可能,我希望该服务支持XML和JSON,我想使用开源工具构建它 - 很可能是PHP / MySQL。
欢迎提供有关可能的PHP框架的建议。
我已经开始使用Tonic框架在PHP中构建REST Web服务,但我认为我可能仅限于我可以在URI中发布的数据量并在URL中发布如此多的数据繁琐。所以我一直在研究SOAP解决方案。
问题:
我可以发布到REST服务的数据量有限吗?
SOAP协议是否有数据限制?
您是否建议我根据项目要求使用SOAP或REST?为什么?
答案 0 :(得分:2)
无论您使用的是REST体系结构还是通过HTTP隧道传输的SOAP协议,HTTP都不会受到协议级别的限制。
您的主要限制将是内存,特别是如果您正在传输多个多兆字节的有效负载。有了足够聪明的处理程序和兼容的请求,您可以选择在处理之前将较小的请求流式传输到内存,将较大的请求直接流式传输到磁盘。
这样的细节可能限制你选择的框架可以为你做多少,因为大多数框架可能会直接消耗内存。您是否可以根据请求进行更改或根据请求进行更改取决于框架以及可能需要更改它。
选择SOAP作为协议可能无关紧要。它只是一个围绕有效负载的简单XML包络,除非您还选择使用SOAP编码对消息进行编码。
由于您也想支持JSON,因此SOAP堆栈可能只会妨碍原始HTTP处理后端。
你没有提到你的API的复杂性,但你很可能会使用大部分框架,而只是为大型繁重的交易编写一个自定义处理程序。
每秒的交易量不会很高,因为交易本身会很大。如果您正在流式传输到磁盘,那么您也会产生很大的I / O影响(除非您在RAM中转换数据并将其从套接字中吐出而不是保存它,否则您将会有这种影响) 。因此,就可能限制整体性能而言,I / O吞吐量可能会成为您的主要瓶颈。
如果您从消费者那里获得上传,那么您每秒可能会获得大约150K字节(例如,很多消费者上传速度很糟糕 - 例如)。如果你有一个可以推送的I / O通道,比如持续60MB /秒,那就是400个同时连接。所以这应该让你了解基于预期交易量的机器扩展(当然,你已经完成了这个分析 - 我只是在我去的时候制作这些东西)。每个事务上传300K,每个事务2次,所以200 TPS。这是另一个可以使用的数字(就你的数据库可能支持的数字而言,等等,特别是如果你将有几台机器供给它的话)。
现代CPU很恶心,所以PHP或其他什么都应该没问题 - 这不是你的问题。