2016-08-31 15 views
1

我已经看到了这样的建议,在多个地方,如:什么时候单个TCP通道未在Azure的服务总线,Redis的缓存足够了,排队等

多工厂:所有客户端(发送者除到接收器)由同一个工厂共享一个TCP连接。最大消息吞吐量受可通过此TCP连接的操作数量的限制。单个工厂可以获得的吞吐量随着TCP往返时间和消息大小而变化很大。要获得更高的吞吐率,您应该使用多个消息传递工厂。

你可以找到对Redis,RabbitMQ等的类似推荐。我的问题是,如何一个TCP通道可以用尽?我相信单个TCP通道没有带宽限制。

那么,为什么人们建议拥有多个高通量通道?是因为:

  1. 在情况下,客户端应用程序发送许多小的消息到单个TCP信道,每一个操作将在TCP套接字的锁,然后发送该消息。它可能导致锁争用。而如果我们使用多个tcp通道,这个争用可以在一定程度上得到解决。

  2. 如果在tcp通道上发送大消息,可能需要一段时间才能序列化/反序列化并将其推送到通道。它可以阻止其他小消息。

这些是真正的原因(或者这些假设是错误的,真正的原因是什么)?

回答

1

基本上,你是对的。 客户端1 - > TCP/IP --->服务器(做一些处理) 现在,客户端2想要发送请求到服务器?客户端2需要等待客户端1完成(我假设这里的上下文是关于阻止I/O的)。因此,如果您有多个TPC连接,则客户端2可以与客户端1同时发送请求==>增加吞吐量。 但它与维护更多的活动连接成本。你应该确保你有足够的连接来满足你的请求,并且尽量减少“空闲”连接的数量。