服务器推送数以百万计的并发连接(server push for millions of concur

2019-07-28 22:45发布

我建立一个分布式系统,该系统由数百万潜在客户的所有需要​​保持开放的(最好是HTTP)连接来等待来自服务器的命令(这是运行在其他地方)。 消息的负荷/ commmands不会非常高,也许一个消息/秒/ 1000个客户端,这意味着它是1000 MSG /秒@百万客户端。 =>它基本上围绕并发连接。

的要求是很简单。 单程消息(服务器 - >客户端)中,仅每“信道” 1个客户端。

我在技术方面相当开放(XMPP /的WebSockets /彗星/ ...)。 我使用谷歌应用程序引擎的服务器,但他们的“渠道”不会为我工作,不幸的是(太低配额和无Java客户端)。 XMPP是一种选择,但相当昂贵。 到目前为止,我是用URL抓取并pubnub,但他们刚开始充电连接(大时代)。

所以:

  1. 有谁知道一个服务,在那里,能做到这一点对我来说在经济实惠的方式吗? 大多数我发现限制或重收费的连接。

  2. 与实施自己这样的服务器的经验吗? 其实我已经做到这一点已经和它工作得很好(基于Tomcat的&NIO),但我还没有还没有真正建立一个大的负载测试环境(部分原因是因为这仍然是一个备用的解决方案,我宁愿时间战斗硬化味精服务器)。 任何经验,你每GB多少用户获得? 任何硬限制?

我的架构还允许片段味精服务器,但我想是因为味精处理CPU开销最小最大化并发连接。

Answer 1:

我一直在使用netty.io同时实现我自己的消息服务器。 网状使得采用Java NIO的和规模非常好。 对于闲置的连接,我得到的每个连接500个字节的内存占用。 我做的只是很简单的邮件转发(无缓存,存储或其他花哨的东西),但与我轻松地获得1000年至1500年味精/秒(每半KB)的小亚马逊实例(1ECU / 1.6GB)。

否则,如果你正在寻找一个(付费)服务的话,我可以推荐spire.io(他们不收取连接,但每有消息更高的价格)或pubnub(他们收取的连接,但每封邮件都便宜)。



Answer 2:

你必须作出这样的环境的建筑看起来更。 首先,如果你将自己写的插座管理,那么就不要使用每个客户机的套接字线程。 使用用于接收和发送数据的异步方法。 WebSockets的可能是太重了,如果你的消息都很小。 因为它实现成帧,其具有要被施加到每个消息为每个单独的插座(高速缓存可用于不同的版本的WebSockets协议),这使得它们更慢的处理两个方向:用于接收和发送,特别是因为数据屏蔽的。

它可以创造数百万插座,但只有最先进的技术能够这样做。 Erlang是能够处理数以百万计的连接,倒可扩展性。 如果你想拥有数以百万计使用其他更高层次的技术连接的,那么你就需要考虑一下你正在试图完成集群。

例如使用将跟踪所有处理服务器的网关服务器。 并让他们的数据(IP,端口,负载(这是否是一个内部网络,防火墙和端口转发可能会派上用场这里)。客户端软件连接到网关服务器,网关服务器检查负载最轻的服务器并发送IP和端口到客户端。客户端可以直接创建连接使用提供的地址工作的服务器。这样,你将有网关,其除了能够处理授权,并不会保持很长的连接,因此其中的一个可能是不够的。许多工人正在做出版数据和保持连接。

这是您的需求非常相关的,并且可能不适合您的解决方案。



文章来源: server push for millions of concurrent connections