0

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

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

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

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

我看过:

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

redis缓存 - 最后的记录(我扩展的网络流量太多)

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

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

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

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

在此之后,所有数据都被发送到单个 gatewayB 服务器以处理阈值违规等

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

我想水平缩放 gatewayB,但是我需要确保每个传感器 id 都粘在同一个 gatewayB 上

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

  1. 传感器 ID

  2. MessageCountInLastHour

  3. 服务器BToSendTo

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

需要考虑的问题是

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

我想知道是否有支持这一点的现有技术。我研究了HAproxy,但它并没有真正满足我的需要,特别是因为它需要一条消息然后发送它,我一次批处理100多条消息,它们都有不同的传感器ID

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

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

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

4

0 回答 0