微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

水平扩展物联网传感器收集器服务器

如何解决水平扩展物联网传感器收集器服务器

我正在尝试水平扩展 IOT 传感器收集器服务器(直接从设备导入数据)

有数以万计的物联网传感器每 5 秒或 1 小时发送一次数据(取决于传感器是否处于活动状态)

来自传感器的每条新遥测消息都必须与之前的数据进行比较,无论是最后 1 条还是最后 5/10/20 条消息(用于平均)

如果满足状态变化或长时间超过阈值参数,则发送事件/警报。

我看过:

负载平衡 - 使用粘性会话(仅适用于 IP/端口)

redis 缓存 - 用于最后的记录(随着我的扩展,网络流量过多)

我得出的结论是,真正实现这项工作的唯一方法是始终将相同的 IOT 设备发送到相同的 GatewayB(如下所述)

从服务器的角度来看,我有 2 个级别的处理

  1. gatewayA(一切先到这里)
  2. gatewayB(从网关 A 接收数据)

GatewayA 服务器只负责建立 tcp 连接,并将十六进制数据转换为标准化的 json 对象。 有 6 个 gatewayA 服务器并使用 DNS 负载平衡(效果很好)

此后所有数据都发送到单个网关B服务器以处理阈值违规等

我每 1 秒将多个传感器的 JSON 批次从网关 A 发送到单个网关 B。

我想水平扩展 gatewayB,但是我需要确保每个传感器 ID 都贴在同一个 gatewayB 上

我认为 gatewayA 服务器会知道将每个传感器 ID 发送到哪里,并且它们会共享以下缓存:

  1. 传感器 ID

  2. MessageCountInLastHour

  3. ServerBToSendTo

然后,我将发送到多个网关 B,而不是转发到单个网关 B,但要确保传感器 ID 始终转到同一个网关 B

需要考虑的问题是

  1. 平均分配负载(有些传感器比其他传感器更活跃,因此它不能只在传感器 ID 上,它还在负载上)
  2. 如果我有 3xGatewayB,其中一个出现故障,它需要在 2 个活动的之间平均分配负载
  3. 能够在关闭的服务器再次启动时在 gatewayB 之间重新分配负载
  4. 所有 gatewayA 都需要共享/更新其本地缓存,以便他们知道将传感器数据发送到哪个 gatewayB(即,当新传感器报告进来时,它不在缓存中,或者当服务器出现故障时,它需要均匀地将 sensorId 分发到不同的网关 B)

我想知道是否有支持功能的现有技术。 我已经研究过 HAproxy,但它并没有真正满足我的需求,尤其是当它需要一条消息然后将其发送时,我一次性批量处理 100 多条消息,而且它们都有不同的传感器 ID>

我真的需要在网关A服务器上运行一些东西,这些服务器将消息发送到网关B的

在我重新发明轮子并从头开始写一些东西之前,我想知道此类问题是否已经解决,以及哪些技术可以提供开箱即用的解决方

我已经搜索了几个星期,但找不到解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。