【问题标题】:Autoscaling Backend and RabbitMQ Queues自动缩放后端和 RabbitMQ 队列
【发布时间】:2022-02-01 08:00:11
【问题描述】:

我有一个大约 10 万台设备的物联网系统,每秒将它们的状态发布到用 Java/Spring Boot 编写的后端。到目前为止,我一直在使用 gRPC,但我发现 CPU 使用率过高,所以我打算让设备发布到 RabbitMQ 并让后端工作人员处理它们。

处理中:更新 db 表。

由于来自同一设备的数据必须按顺序处理,我打算使用 RabbitMQ 的一致性哈希交换,并为 n 个工作人员绑定 n 个队列。但我不确定它如何与自动缩放一起使用。

我想为每个后端实例创建自动删除队列并将它们绑定到交换器,但我想不通:

  • 如何重新平衡已在队列中的消息?
  • 如果出现连接问题,队列可能会被删除,因此我需要将这些消息重新转发到现有队列。
  • 是否有任何算法来处理工作人员的自动缩放?例如,如果消息堆积如山,即使 CPU/内存使用率很低,我也需要生成新的工作人员。

【问题讨论】:

    标签: spring-boot architecture rabbitmq autoscaling consistent-hashing


    【解决方案1】:

    我想我会在这个案例中使用 MQTT 的共享订阅。

    https://emqx.medium.com/introduction-to-mqtt-5-0-protocol-shared-subscription-4c23e7e0e3c1

    分享策略

    虽然共享订阅允许订阅者在 一种负载均衡的方式,MQTT 协议没有指定什么 服务器应该使用的负载平衡策略。供参考,EMQ X 提供四种策略供用户选择:random、round_robin、 粘性和散列。

    random: randomly select one in all shared subscription sessions to publish messages
    round_robin: select in turn according to subscription order
    sticky: use a random strategy to randomly select a subscription session, continue to use the session until the subscription is cancelled or disconnect and repeat the process
    hash: Hash the ClientID of the sender, and select a subscription session based on the hash result
    

    Hash 好像是我要找的。​​p>

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2014-11-19
      • 1970-01-01
      • 2017-06-17
      • 2016-05-14
      • 1970-01-01
      • 2022-01-20
      • 2021-06-17
      • 2015-12-14
      相关资源
      最近更新 更多