所以我有一个sqs队列从生产者那里接收消息。 每条消息都可以属于不同的所有者。
假设用户A进入并向生产者发送1000条消息,然后生成器进入队列。现在用户B只有1条消息。他必须等到消费者处理来自用户A的全部1000个。
我该如何做到这样,一个消息的用户B与消费者接下来要处理的用户A几乎有相同的机会?
我想为系统中的每个用户创建一个队列,但这意味着每次进行轮询时都要从每个用户读取,这很昂贵。
我不希望有绝对的公平,近乎公平就足够了。
答案 0 :(得分:1)
解决此类问题的最简单方法是使用一种限制/配给形式,其中超出配额的请求被归类为“溢出”。
我之前已经讨论过这个策略作为this question的答案(值得一读),但根据您的具体用例,可能更容易解释一个例子:
用户A一次提交1000条消息。其中10条消息进入“主”队列,其余990进入“溢出”队列。
用户B提交1条消息 - 它将进入主队列
用户B的单个消息将在大多数用户A的消息之前处理。
这将为您提供用户之间的粗略公平性(每个人都获得主要队列的有限片段),溢出队列为所有请求提供“最终处理”。
根据消息量的不同,您可能需要考虑多层溢出队列来处理“高得离谱”的卷,这与“有点高”的卷用户不同。