我正在尝试设计一个物联网系统,让许多物联网设备将不同类型的传感器数据发送到前端负载平衡服务器,然后将消息发送到摄取系统(目前认为是google cloud pubsub)。还有一些消费者使用这些消息并将它们写入不同的数据库和表。每个传感器数据类型都有自己的数据库。
扇出应该发生在哪里?
在发布子系统之前:如果前端做扇形输出,那么它必须被扩展到足够大,以便有足够的处理能力来查看每条消息的内容,从而确定要将哪个主题发送到前端。然后,我将为每条消息设置一个单独的主题,并为每个主题设置一个使用者。
在pubsub系统之后:如果我只有一个主题,而前端只是将所有消息推入其中,而不考虑它们的类型,那么该主题的使用者需要进行缩放,以便能够使用和处理每条消息,从而确定要写入哪个数据库。这也意味着这个消费代码需要访问所有的数据库。
在pubsub系统内部:让pubsub做扇出,这样即使发布者只发布一个主题,该主题也有多个订阅(每个数据类型一个),每个使用者从他们自己的订阅中消费,并删除他们要消费的所有数据类型的消息。Kafka似乎更适合这个。
1条答案
按热度按时间8gsdolmq1#
对于通过发布/订阅连接设备和路由数据,iot core将为您提供更好的服务,它还处理设备连接、身份验证和监控。由于配置设备连接更为复杂,因此最好在服务器上展开。现在,最好的选择是让pub/sub系统的使用者写入每个存储。如果您想解耦消费者,可以为每个存储设置多个消费者,但需要“删除”不需要的消息。dataflow可以用于apachebeam i/o转换。