【发布时间】:2022-07-19 00:58:42
【问题描述】:
这个问题是我前段时间遇到的,很遗憾,我在网上找不到我正在寻找的答案。这是问题陈述:
考虑一个简单的生产者-消费者环境,我们只有一个 生产者写入队列,一个消费者读取队列。现在 因为写入队列的对象非常大,而且我们的 我们目前的机器上可用的资源并不多,我们决定 实现一个分布式队列系统,其中队列内的数据 在多个节点之间进行分区。对我们来说很重要的是
total ordering是保守的,而pushing和poping是数据, 这意味着从用户的角度来看,这个分布式队列的作用只是 就像一个统一的队列。
在为这个问题提供解决方案之前,我们必须询问高可用性对我们来说更重要还是部分容忍度更重要。我相信在这两个版本中,都有有趣的挑战需要解决,我认为肯定必须在之前提出这样的问题,但是,在搜索现有解决方案之后,我无法从算法或科学中找到完整且经过深思熟虑的答案观点看法。我发现的大部分是工程和高级方法,利用 Kafka、RabitMQ、Redis 等工具。
所以问题仍然存在,如果你能与我分享你对这个问题的设计、算法和想法,或者指出一些已经解决了这个问题的科学期刊或文章等,我将不胜感激。
【问题讨论】:
-
这是单机吗?可以使用对大对象的引用(或指针)创建和初始化“空闲”队列。队列“节点”将由生产者从“空闲”池中检索,对象填充数据,然后排入消费者输入队列。消费者将处理队列“节点”,并将它们返回到“空闲”池。
-
在这种情况下,您希望将一条消息分布在分区之间,或者发布消息的数量可以跨分区分布,即维护一条消息。
标签: queue partitioning distributed-system