我有几个客户端不断将数据发布到REST服务。 REST服务放在网络负载平衡器之后。每个客户每天发送100 - 500 MB,我需要支持500多个客户。
我可以POST非常大的数据包,这将减少TCP / IP会话设置和HTTP标头的开销。但是,这将牢固地将一个客户端绑定到特定服务器并限制我的可伸缩性选项。或者,我可以发送小的HTTP数据包,我可以很好地平衡负载,但是我会为TCP / IP会话设置和HTTP标头获得更多的开销。
HTTP POST的推荐数据包大小是多少?或者我如何为我的环境计算一个?
答案 0 :(得分:2)
没有推荐的尺寸。
虽然HTTP POST大小不受RFC约束,但由于HTTP是实现请求/响应类型消息传递的商品协议,因此大多数基础架构都围绕TCP连接不是特别持久/不带大量数据的想法进行配置数据的。即,您的控制范围之外的因素可能会影响服务 - 尽管HTTP支持范围请求响应,但请求没有必然结果。
使用HTTPS可以解决很多这些问题(尽管不是全部)。但是,您仍然需要考虑如何检测/管理中断 - 您是否乐意等待TCP超时?
有500多个客户可能大量使用该系统,拥塞避免限制应该不是问题 - TCP窗口缩放是否可能是一个问题取决于系统的使用方式。除非您将请求大小限制为愚蠢的东西,否则HTTP握手不应成为问题。
如果服务高度依赖于将大量数据推送到您的服务器的客户端,那么我建议您查看解析客户端上的数据(考虑到卷,可能是来自文件 - 暗示签名的java)使用UniversalBrowserRead权限的applet或javascript)然后通过双向通信通道(例如websocket)发送它。
暂时搁置这一点,您可以找到客户端和服务器之间的路由支持的唯一方法是测量它 - 并监控它。我希望2Mb的上传大小几乎可以在任何地方使用,而10Mb的大小可以在美国或欧洲大部分时间运行 - 并且只要没有移动客户端,你就可以将其增加到50Mb。
但是如果你想保持服务的有效性,你需要监控带宽,丢包和丢失连接。