远程服务访问的高性能选项

时间:2015-07-16 11:58:03

标签: performance architecture

我有一台服务,foo,在机器A上运行。我需要从机器B访问该服务。一种方法是在A上启动Web服务器并通过HTTP执行;在A上的Web服务器下运行的代码访问foo并返回结果。另一种是在A上编写套接字服务器;套接字服务器访问服务foo并返回结果。

HTTP连接启动和握手很昂贵;套接字可以写,但我想避免这种情况。还有哪些其他选项可用于高性能远程呼叫?

3 个答案:

答案 0 :(得分:0)

HTTP只是套接字上的协议。如果您使用的是TCP / IP网络,那么您将使用套接字。 HTTP连接启动和握手不是昂贵的比特,它的TCP启动确实是昂贵的比特。

如果使用HTTP 1.1,则可以使用持久连接(Keep-Alive),这可以大大降低此成本,更接近于保持持久套接字打开。

这完全取决于您是否需要/需要更高级别的协议。使用HTTP意味着您可以执行诸如从更多客户端使用此服务的操作,同时编写更少的文档(如果您编写自己的协议,则必须记录它)。 HTTP服务器还支持身份验证,cookie,日志记录等开箱即用的功能。如果您不需要这些功能,那么HTTP可能是一种浪费。但我发现很少有项目至少不需要其中一些东西。

答案 1 :(得分:0)

添加@Rob的答案,因为问题并没有准确地指向应用程序或性能边界,所以最好在更广泛的上下文中查看可用的选项,Inter process communication

维基百科页面干净地列出了可用的选项,并且是一个很好的起点。

答案 2 :(得分:0)

您打算使用哪种技术?让我回答Java世界。

如果您的请求率低于100 /秒,您不应该关心优化并使用最通用的解决方案 - HTTP。

编写良好的异步服务器(如Netty-HTTP)可以在中级硬件上轻松处理每秒1000个请求。

如果您需要更多资源或拥有受限资源,可以使用二进制格式。最受欢迎的是Google Protobuf(多语言)+ Netty(Java)。

您应了解的有关HTTP性能的信息:

  • Http可以使用Keep-Alive来消除每个请求的重新连接成本
  • Http为每个请求和响应增加了流量开销 - 大约50-100个字节。
  • Http客户端和服务器消耗额外的CPU用于解析HTTP头 - 这在上述100 req / sec后显而易见
  • 选择技术时要小心。即使在21世纪,也很难找到编写良好的HTTP服务器和客户端。