如何解决水平扩展物联网传感器收集器服务器
我正在尝试水平扩展 IOT 传感器收集器服务器(直接从设备导入数据)
有数以万计的物联网传感器每 5 秒或 1 小时发送一次数据(取决于传感器是否处于活动状态)
来自传感器的每条新遥测消息都必须与之前的数据进行比较,无论是最后 1 条还是最后 5/10/20 条消息(用于平均)
如果满足状态变化或长时间超过阈值参数,则发送事件/警报。
我看过:
负载平衡 - 使用粘性会话(仅适用于 IP/端口)
redis 缓存 - 用于最后的记录(随着我的扩展,网络流量过多)
我得出的结论是,真正实现这项工作的唯一方法是始终将相同的 IOT 设备发送到相同的 GatewayB(如下所述)
从服务器的角度来看,我有 2 个级别的处理
- gatewayA(一切先到这里)
- gatewayB(从网关 A 接收数据)
GatewayA 服务器只负责建立 tcp 连接,并将十六进制数据转换为标准化的 json 对象。 有 6 个 gatewayA 服务器并使用 DNS 负载平衡(效果很好)
此后所有数据都发送到单个网关B服务器以处理阈值违规等
我每 1 秒将多个传感器的 JSON 批次从网关 A 发送到单个网关 B。
我想水平扩展 gatewayB,但是我需要确保每个传感器 ID 都贴在同一个 gatewayB 上
我认为 gatewayA 服务器会知道将每个传感器 ID 发送到哪里,并且它们会共享以下缓存:
-
传感器 ID
-
MessageCountInLastHour
-
ServerBToSendTo
然后,我将发送到多个网关 B,而不是转发到单个网关 B,但要确保传感器 ID 始终转到同一个网关 B
需要考虑的问题是
- 平均分配负载(有些传感器比其他传感器更活跃,因此它不能只在传感器 ID 上,它还在负载上)
- 如果我有 3xGatewayB,其中一个出现故障,它需要在 2 个活动的之间平均分配负载
- 能够在关闭的服务器再次启动时在 gatewayB 之间重新分配负载
- 所有 gatewayA 都需要共享/更新其本地缓存,以便他们知道将传感器数据发送到哪个 gatewayB(即,当新传感器报告进来时,它不在缓存中,或者当服务器出现故障时,它需要均匀地将 sensorId 分发到不同的网关 B)
我想知道是否有支持此功能的现有技术。 我已经研究过 HAproxy,但它并没有真正满足我的需求,尤其是当它需要一条消息然后将其发送时,我一次性批量处理 100 多条消息,而且它们都有不同的传感器 ID>
我真的需要在网关A服务器上运行一些东西,这些服务器将消息发送到网关B的
在我重新发明轮子并从头开始写一些东西之前,我想知道此类问题是否已经解决,以及哪些技术可以提供开箱即用的解决方案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。