MQTT是否可以扩展到1000多个客户端?


10

场景
IoT设备(当前为IPv4设备)每天通过TCP套接字向服务器发送一个有效负载。服务器具有公共IP地址,设备位于路由器/ NAT之后。我将使用基于ESP8266的模块(即Olimex一个)

目标
服务器应该能够将数据发送到任何客户端,只要它需要。我对直接的客户端到客户端通信(即从智能手机连接到设备)不感兴趣,就像打孔一样。

其他要求
IoT设备可能会增长到数千个。它们的Internet连接由许多启用4G的路由器/调制解调器提供。每个将处理10-20个客户。

建议的解决方案
据我了解,MQTT是一个常见的解决方案。客户端定期将数据发送到代理(即在托管服务器上运行的Mosquitto),代理再更新在同一服务器上运行的主Web应用程序。

问题
MQTT方法是否适合“大量”设备(1000多个),其中大多数设备位于4G路由器之后?


最好单独问问题(1),然后问与问题正文中的标题匹配的问题(2)。这样,我们可以分别详细解决您的每个问题。您可以在新问题中再次包含您的上下文,或者在有帮助的情况下链接到此问题。
Aurora0001

1
问题更改并添加了第二个。
标记

从它的声音来看,即使您确实遇到了保持大量打开连接的服务器负载问题,您的系统也将与树型拓扑完全兼容,在这种拓扑中,客户端连接到容纳相应会话并通过每个服务器在单个管道中上下流动的流量很少。您甚至可以在您的4G路由器中本地进行此操作的第一层。
克里斯·斯特拉顿

Answers:


7

任何体面的MQTT经纪人都可以轻松处理1,000个客户;来自Scalagent的基准测试表明,具有以下功能的PC:

  • 3 GHz Intel Core 2 Duo处理器
  • 4 GB的RAM

可以处理6万个使用Mosquitto的发布商。这远远超出了所需的1,000个发布者,因此,即使在相对较弱的服务器上,您仍然应该能够处理所需的数目。

其他一些经纪人则声称其性能更高(当然,服务器功率也相应更高),例如HiveMQ,声称可以处理1000万发行者。

MQTT代理通常确实希望持久连接,并且会使不定期发送ping响应(或其他活动)的客户端超时。发布后,您可以断开与网络的连接,但是,显然,如果断开连接,则您将收不到任何信息。

MQTT确实支持可能有用的“保留”消息的概念。Web客户端可以使用保留标志将某些内容发布到主题,然后该消息将由代理存储。只要您的客户重新连接并订阅该主题,他们就会收到保留的消息(即使该消息是在几个小时前发布的)。每当客户端订阅该主题时,都会发布保留的消息,因此,如果您的连接不固定并且需要存储一条消息,直到客户端重新连接,这可能会对您有所帮助。


我肯定解释错了。仅服务器(商业托管服务)应处理1000多个客户端。不同地方有很多4G路由器,每个路由器只能处理10-20个客户端。
马克

哦,我读错了–我的错,@ Mark,我认为您的意思是所有这些都在一个 4G路由器后面。在这种情况下,我将对其进行编辑。
Aurora0001

我还不完全了解MQTT的底层代码-我担心4G连接:MQTT是否需要持久的Internet连接?网络可能会不稳定...
马克

我已经编辑了一些建议,@ Mark;让我知道这是否指向正确的方向。
Aurora0001

1
是的,现在更清楚了。我将对该主题进行进一步的搜索,如果仍然需要帮助,我将提出另一个问题。非常感谢。
马克

5

您可以使用来自客户端的持久会话,例如,连接时将clean标志设置为false。在这种情况下,当客户端脱机时,代理会将消息缓冲到自己的缓存中,并在设备连接后将其传递。

关于数量-即使对于一台服务器,10K也是一个相对较低的数量。您可以将Linux服务器配置为容纳50万个活动连接,并且如果您的代理是基于云的(例如,由某个提供商提供的服务),则您甚至可以保留数百万个活动连接。

顺便说一句,我认为Mosquitto或任何其他本地安装是开发和测试的理想选择,但是当您投入生产时,您需要具有所有功能(例如HA,冗余,故障转移等)的SaaS MQTT代理。


我认为SaaS MQTT经纪人永远不是最适合生产的。大多数专业(自托管)MQTT代理在保持完整的MQTT兼容性的同时,还大规模支持HA,冗余和故障转移。一些SaaS代理不支持所有MQTT功能。如果您对本地蚊子进行测试,然后去SaaS提供商,则很可能事情在生产中无法按预期进行。
多米尼克·奥伯迈尔

和往常一样,两种选择都有其优缺点。显然,任何SaaS经纪人都需要完善的沟通团队,对产品开发早期阶段的长期测试,明确的正常运行时间保证以及各种SLA。维护自己的经纪人也是一种不错的方法,但是世界正在进入服务领域。您将为使用经纪人作为产品一部分的产品付出最大的努力,并使其最胜任,或者您将花费大量的时间和金钱成为超级有经验的MQTT经纪人管理员(而不是其开发者!)。只需选择+)
shal(
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.