关于可扩展物联网集群设计的问题

问题描述 投票:0回答:0

我英文不好,以下基本是机器翻译,请谅解。

我最近在研究物联网,我想设计一个可扩展的物联网集群部署在 Kubernetes 中,我最近在研究物联网并想设计一个可扩展的物联网集群部署在 Kubernetes 中,但我在设计时遇到了问题设备连接服务。

到目前为止我自己想出了几个选项:

  1. 使用无状态服务,所有Pod消费同一个Kafka队列,它们是同一个Kafka Group,Pod之间通过HTTP/RPC通信,那么设备的连接信息需要存储在第三方中间件,比如数据库, redis.
  2. 使用有状态服务,每个Pod都是一个独立的Kafka Group,每个Pod都有一个独立的Kafka Topic;它们同时也消费同一个源数据Kafka Topic,Pod消费数据时判断设备是否连接到自己,如果没有连接则从redis中取出连接信息发送给另一个Pod 的 Kafka Topic 里面。
  3. 同样使用有状态服务,每个Pod都是一个单独的Kafka Group,每个Pod都有一个单独的Kafka Topic;但在它们之前,有一个名为 Router 的服务,它从源数据 Kafka Topic 中取出消息,然后确定每个设备连接到哪个 Pod,并将数据发送到指定的 Kafka Topic。
  4. 有状态也可以无状态,每个设备对应一个Kafka Group和一个Kafka Topic,数据通过Router的服务发送到指定的Topic。
  5. Stateful或者stateless都可以,这次使用RabbitMQ,每个设备都是一个client,每个设备都是一个Queue,通过Router的服务向指定的Queue发送数据。

有几个问题:

  1. 因为使用Kafka进行数据交互,那么会导致每个Pod的并发度降低,如果Topic中有100个数据,每个都是不同的设备,理论上最好的情况是100个数据并发发送到100个设备,但是因为kafka,这个很难实现,好像只能加partition。
  2. 看来Kakfa Topic太多了,如果用4方案的话,性能会有影响
  3. 看来RabbitMQ Queues和client过多,如果采用5方案,也会对性能产生影响
  4. 目前接触较多的是kafka和RabbitMQ,不知道有没有更好的消息队列
iot
© www.soinside.com 2019 - 2024. All rights reserved.