Zaqar/常见问题
目录
- 1 该项目成熟度如何?
- 2 Zaqar 是 under-cloud 还是 over-cloud 服务?
- 3 Zaqar 是一个配置服务还是一个数据 API?
- 4 Zaqar 是否只支持 HTTP 作为传输协议,还是会添加其他协议?
- 5 许多“传统的消息代理”都提供了 HTTP。Zaqar 有什么不同?
- 6 Zaqar 如何扩展?
- 7 为什么 Zaqar 使用存储转发设计?
- 8 SQLAlchemy 驱动程序的目的是什么?
- 9 为什么一开始就选择 MongoDB?
- 10 Zaqar 支持哪些消息模式?
- 11 如果队列不保证顺序,如何保证标记仍然将所有消息传递给所有目标?
- 12 Zaqar 是否能与 AMQP 协同工作?
- 13 Zaqar 是否能与 Kafka 协同工作?
- 14 Zaqar 与 AWS (SQS/SNS) 相比如何?
- 15 Zaqar 与 oslo.messaging 相比如何?
- 16 Zaqar 的下一步计划是什么?
该项目成熟度如何?
Zaqar 是一个正在孵化的 OpenStack 项目。随着 Icehouse 版本的结束,该项目已经取得了一些重要的里程碑。
- Zaqar 的第一个官方、生产就绪的“1.0”版本现在 可供下载。这个第一个版本包括一个经过充分测试的 MongoDB 驱动程序,并且针对其他后端生产就绪的驱动程序也在开发中。
- Zaqar 的 v1.0 API 是稳定的,并且可以用于编码。
- 基本的用户和操作员文档 现在可用,并且我们将在 Juno 版本中添加大量新内容。
- 一个参考 Python 客户端库(用 Python 编写)现在可在 PyPI 上获得,它支持整个 v1.0 API。
- 一个独立的 C# 客户端库 现在可在 GitHub 上获得。
- 通过 Rackspace 支持的 SDK,也支持 Python、C# 和其他语言。
该项目吸引了来自世界各地的越来越多的贡献者。我们特别为我们的实习生感到自豪
- 10+ 个组织参与
- 5 名核心评审员
- 6 名 Juno 实习生(代表 GSoC、GNOME OPW、Rackspace 和 Red Hat)
Zaqar 是 under-cloud 还是 over-cloud 服务?
Zaqar 的主要任务是为 over-cloud Web 和移动应用程序开发者提供多租户、Web 友好的消息传递和通知服务。此外,几个项目表示有兴趣与 Zaqar 集成,以便将事件呈现给最终用户,并与访客代理进行通信。Zaqar 不打算取代 oslo.messaging。
Zaqar 是一个配置服务还是一个数据 API?
Zaqar 的 API 是数据导向的。也就是说,它不会配置消息代理。相反,它充当客户端和一个或多个后端之间的桥梁。事实上,Zaqar 的 API *就是*产品;它在现有的消息传递和存储系统之上提供通用的消息传递语义。Zaqar 的数据 API 旨在比底层 API 更简单、更灵活,并且更适合 Web 和移动应用程序开发者的需求。
无论使用哪个后端,Zaqar 都提供了一个 Web 友好的 API,该 API 是面向服务的和多租户的,并且尽可能地轻量级、实用和有用。Zaqar 可以独立运行,但与 Keystone 和 Barbican 等其他 OpenStack 程序结合使用效果最佳。反过来,其他程序可以使用 Zaqar 将事件呈现给最终用户。
Zaqar 的 API 提供
- 对多租户的支持,这可以分摊生产部署的成本到多个帐户。
- 一流的、惯用的 HTTP 传输,Web 开发者熟悉它,并且在防火墙和较差的网络连接中效果良好。
- 一种可以扩展到数十万甚至数百万个消息主题(也称为队列)的设计,允许 Web 开发者与“物联网”进行通信。
- 基于 JSON 的消息模式,易于理解、高效传输和快速解析
- 一种允许未来传输(如 WebSockets、tcp 等)的架构。
- 一种允许多个消息传递和存储后端在同一 API 下并行运行的架构。
- 一个相对易于扩展、HA、多租户的消息传递服务
虽然消息代理的配置服务很有用,但它服务于与 Zaqar 今天所针对的市场略有不同的市场。如果用户对队列配置服务感兴趣,社区应该考虑启动一个新项目来解决该需求。
Zaqar 是否只支持 HTTP 作为传输协议,还是会添加其他协议?
我们正在专注于 Juno 版本的 HTTP,但正在考虑在 K 周期中添加一个较低级别的、持久的传输协议(可能基于 WebSocket)。
许多“传统的消息代理”都提供了 HTTP。Zaqar 有什么不同?
Zaqar 是多租户的,并且还提供了一个更 RESTful 的 API(在我们看来)。话虽如此,我们很可能遗漏了一些东西,所以请与团队分享您的想法,我们很乐意讨论它。
Zaqar 如何扩展?
首先,由于 Zaqar 使用 HTTP 并遵循 REST 架构风格,因此您可以获得与此相关的扩展优势。
其次,关于后端,Zaqar 有一个“池”的概念,队列可以在其中分片。单个队列可能不会在多个池中分片,但单个队列可以在给定的池内分片,具体取决于驱动程序是否支持它。无论如何,您可以将每个池想象成封装一个 DB 或代理集群。一旦由于网络、给定后端中的硬限制等原因达到初始池内的可扩展性限制,您可以根据需要配置其他池。
为什么 Zaqar 使用存储转发设计?
“存储和转发”是指在将消息转发到其目的地之前,将消息缓冲或以其他方式存储在某个中间体的模式。这种技术是消息传递系统中处理间歇性连接的常见解决方案。Zaqar 的存储转发架构使该服务能够抵御网络分区、防火墙、拥塞、服务器节点故障等。它也是 Zaqar API 设计和实现中所采用的 REST 架构风格的自然补充。
SQLAlchemy 驱动程序的目的是什么?
众所周知,经典的 RDBMS(如 MySQL)作为消息传递后端在扩展方面表现不佳。因此,将 SQLAlchemy 驱动程序与 Zaqar 捆绑在一起可能看起来很奇怪。尽管如此,该驱动程序还是有其用途
- 它支持 SQLite,这对于开发非常有用。除了其他好处外,支持 SQLite 意味着您可以从零开始到运行的本地 Zaqar 服务器,只需 3 个步骤。
- 它提供了存储驱动程序接口的参考实现。在针对 SQLAlchemy 驱动程序通过的相同功能测试也必须针对所有其他驱动程序通过,从而有助于确保一致的行为。
- 它有助于团队在 Zaqar 的 API 设计和服务的架构中更加务实。SQLAlchemy 驱动程序是更广泛努力的一部分,旨在创建驱动程序来表示每个最常见的数据存储系列,包括 NoSQL、SQL 和 AMQP。
为什么一开始就选择 MongoDB?
并非所有 NoSQL 数据库都适合实现消息传递系统。例如,Redis 和 MongoDB 已知适用于此角色,而 Cassandra 表现较差。
Zaqar 团队决定从 MongoDB 开始,因为
- MongoDB 的灵活查询系统能够支持 1.0 API 所需的所有操作
- 它能够管理大量短寿命记录而不会遇到障碍
- 该系统提供了一种耐用性、性能、HA 和可扩展性的良好组合
- 核心团队已经非常熟悉 MongoDB 并且有在生产环境中运行它的经验
- MongoDB 的无模式设计允许团队快速迭代
考虑到这一点,重要的是要提到,尽管 MongoDB 是 Zaqar 的第一个生产就绪的存储驱动程序,但团队无意将其作为所有用例的唯一驱动程序。事实上,更多的驱动程序已经在开发中。敬请期待!
Zaqar 支持哪些消息模式?
Zaqar 的 API 提供了一组基本的语义,当组合在一起时,可以提供各种消息模式,例如发布/订阅、任务分发和点对点。消息可以作为 feed、队列或两者的组合来消费。这一开始可能会有点令人困惑,因为 API 使用术语“队列”来表示混合的 feed-queue 资源。
与 API 交互时,客户端可以选择以类似于 Atom feed 的方式读取队列,其中任何客户端都可以读取任何消息,并且负责跟踪自己的标记(其在 feed 中的位置)。这为发布/订阅和点对点等消息模式提供了支持。
或者,应用程序可以通过创建一个工作池来实施任务分发,该工作池只需从队列前端声明消息。一旦消息被声明,它就会对池中的其他工作者不可见,以防止消息被处理多次。
最后,客户端可以同时使用 feed 和声明语义来创建混合消息模式。例如,当工作者忙于从任务队列中声明消息时,审计员可以被动地采样这些相同的消息。
另请参阅:Zaqar/Use_Cases
如果队列不保证顺序,如何保证标记仍然将所有消息传递给所有目标?
消息的顺序实际上是稳定的,这意味着给定一个标记(或没有标记),在列出它们时,您将始终获得相同的消息集,并且顺序相同。当我们说 FIFO 仅对单个生产者有保证时,这是因为我们无法保证哪些生产者的消息会先到达我们的系统。但是,当它们到达时,它们会使用单调标记值进行排序。这与使用时间戳对条目进行排序的 Atom feed 形成对比,这使得获得具有相同时间戳的两个条目成为可能,这给客户端带来了检测冲突然后丢弃已经收到的消息的负担。
无需在代码本身中执行任何特殊操作来验证消息重复或并行性。
客户端需要做的就是跟踪收到的最后一个标记 URI(即“next”href),并在后续请求中提交该 URI。这有助于服务器高效扩展,因为它可以是无状态的(即,服务器不必跟踪每个客户端已经看到或未看到的消息)。
Zaqar 是否能与 AMQP 协同工作?
- 在 Juno 版本中,我们正在试验将 AMQP 作为后端使用。待定。
- 传输待定
- 与我们讨论用例
Zaqar 是否能与 Kafka 协同工作?
- 在 Juno 版本中,我们正在试验将 Kafka 作为后端使用。
- 与我们讨论用例
- 我们需要贡献者!
Zaqar 与 AWS (SQS/SNS) 相比如何?
- 目标相似的工作负载
- Zaqar 将提供一个统一的 API 来处理通知和队列
- Zaqar 高度可定制
- FIFO 和一次且仅一次保证(取决于存储后端)
Zaqar 与 oslo.messaging 相比如何?
oslo.messsaging 是 OpenStack 中用于管理分布式命令通过不同的消息传递层发送消息的 RPC 库。Oslo Messaging 最初是作为对 AMQP 的抽象而开发的,但此后已添加了对 ZeroMQ 的支持。
与 Oslo Messaging 相比,Zaqar 是 over 和 under cloud 的消息传递服务。作为一项服务,它旨在通过使用不同语言的库来使用。Zaqar 当前支持 1 种协议(HTTP),并建立在其他现有技术之上(截至 1.0 版本,MongoDB)。
Zaqar 的下一步计划是什么?
- 通知
- 消息签名
- 自动化性能测试
- 自动化安全测试
- 其他 Dev/Ops 功能
- 队列迁移
另请参阅:Zaqar/Roadmap