使 FIFO 保证变为可选

FIFO 一直是 Zaqar 最受期待的保证之一。除了可靠性、持久性和其他延迟要求外,用户一直要求提供 FIFO。然而,此功能已被证明在某些不需要它的场景中存在问题,因此提出了此提案。

https://blueprints.launchpad.net/zaqar/+spec/make-fifo-optional

问题描述

FIFO 尽管是一个很好的保证,但会带来一些 Zaqar 不愿意接受作为默认行为的扩展性和性能问题。本规范建议使 FIFO 变为可选,并让能够支持此类场景的驱动程序这样做。

提议的变更

如前几节所述,拟议的更改是使 FIFO 变为可选。可以通过 flavors 实现这一点。

并非所有存储驱动程序都能够支持 FIFO,但那些支持的驱动程序将在其支持的功能中列出 FIFO,并且这些功能将通过 flavors 暴露出来。但是,事情并不像看起来那么简单。请参阅 工作项 部分,了解使之成为可能的所需更改列表。

缺点

作为此更改的副作用,我们将不得不放宽 pub-sub 的传递保证。原因是遍历队列不会阻止消费者跳过消息。

备选方案

  • 保持不变

  • 完全移除 FIFO

实现

负责人

主要负责人:flaper87

里程碑

完成目标里程碑:K-1

工作项

  • 允许驱动程序暴露其支持的功能

    每个驱动程序支持一组功能,并且需要从上层访问该组功能

  • 标准化支持的功能

    列出支持的功能

  • 添加一种将功能传递到驱动程序的方法

    我们可以在驱动程序初始化时执行此操作,因为那时我们知道这些功能是什么。

  • 支持 FIFO 和非 FIFO 的 post 方法。

依赖项

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode