Architecture 如何保证使用amazon SQS队列的多个用户之间的公平性?

Architecture 如何保证使用amazon SQS队列的多个用户之间的公平性?,architecture,message-queue,amazon-sqs,Architecture,Message Queue,Amazon Sqs,所以我有一个sqs队列,它接收来自生产者的消息。 每条消息可以属于不同的所有者 假设用户A进来并向生产者发送1000条消息,生产者随后将其放入队列。现在用户B只带了一条消息。他必须等待消费者处理来自用户A的所有1000 我如何才能使具有1条消息的用户B具有与用户A大致相同的机会,以便消费者下一步处理 我曾想过为系统中的每个用户创建一个队列,但这意味着每次进行轮询时都要读取每个用户的数据,这是非常昂贵的 我不希望绝对公平,大致公平就足够了。解决这类问题的最简单方法是采用节流/配给的形式,超出配给的

所以我有一个sqs队列,它接收来自生产者的消息。 每条消息可以属于不同的所有者

假设用户A进来并向生产者发送1000条消息,生产者随后将其放入队列。现在用户B只带了一条消息。他必须等待消费者处理来自用户A的所有1000

我如何才能使具有1条消息的用户B具有与用户A大致相同的机会,以便消费者下一步处理

我曾想过为系统中的每个用户创建一个队列,但这意味着每次进行轮询时都要读取每个用户的数据,这是非常昂贵的


我不希望绝对公平,大致公平就足够了。

解决这类问题的最简单方法是采用节流/配给的形式,超出配给的请求被归类为“溢出”

我之前已经讨论过这个策略,作为一个答案(值得一读),但是根据您的特定用例用一个例子来解释可能更容易:

  • 用户A一次提交1000条消息。其中10条消息进入“主”队列,其余990条进入“溢出”队列

    • 对于发送消息,您提供了一个接口—该接口的实现将传入消息发送到“main”或“overflow”,具体取决于用户在过去X秒内发送的消息数量
  • 用户B提交1条消息-它进入主队列

  • 用户B的单个消息将在用户A的大多数消息之前被处理

    • 与“主”队列相比,“溢出”队列处理的频率降低(或仅当主队列为空时)
  • 这将在用户之间提供大致的公平性(每个人都可以从主队列中获得有限的部分),而溢出队列为所有请求提供“最终处理”


    根据消息量,您可能需要考虑多个溢出队列来处理“非常高”的卷,不同于“非常高”的卷用户。

    您只有一个消费者?我有1个消费者,同时运行在10个EC2实例上。我想这是10个消费者,不是吗?还是QS的新东西。是的,我猜有10个消费者