Zaqar(Openstack messaging service)简单了解

发表于 2017-10-23   |   分类于 技术
Zaqar是openstack内的多租户云消息服务组件,它借鉴了Amazon SQS消息组件的实现。为在Openstack内构建可伸缩、可靠和高性能的云应用提供了通道。

概述

Zaqar is a multi-tenant cloud messaging service for web and mobile developers. It combines the ideas pioneered by Amazon's SQS product with additional semantics to support event broadcasting.

Zaqar是openstack内的多租户云消息服务组件,它借鉴了Amazon SQS消息组件的实现。为在Openstack内构建可伸缩、可靠和高性能的云应用提供了通道。

The service features a fully RESTful API, which developers can use to send messages between various components of their SaaS and mobile applications, by using a variety of communication patterns. Underlying this API is an efficient messaging engine designed with scalability and security in mind.

Zaqar服务的特征是一个完全的RESTful API,使用生产者/消费者,发布者/订阅者等模式来传输消息。通过使用不同的通信模式开发人员可以在他们的SaaS和移动应用程序上的各种组件之间发送消息。这个API的底层是一个高效的消息传递引擎,具有可伸缩性和安全性。

Other OpenStack components can integrate with Zaqar to surface events to end users and to communicate with guest agents that run in the "over-cloud" layer. Cloud operators can leverage Zaqar to provide equivalents of SQS and SNS to their customers.

其他OpenStack组件可以通过集成Zaqar展现事件到最终用户并与运行在“over-cloud”层的客户代理通信。同时,云运营商可以使用Zaqar提供类似SQS和SNS的等价物给消费者。

关键特性

  • 支持两种通信传输机制(都支持keystone):

    • HTTP RESTFUL API (短连接)
    • WebSocket-based API (长连接)
  • 基于keysteon project id的多租户队列
  • 支持多种常用的模式

    • event broadcasting 时间广播
    • task distribution 任务分发
    • point-to-point messaging 点到点
  • 支持多用户后端和消息过滤
  • 有效地参考了低延迟、高吞吐量的实现
  • 高可用 & 水平伸缩
  • 支持消息订阅到队列

    • Email notifications
    • Webhook notifications
    • Websocket notifications

Project scope

zaqar的API是面向数据的,即不提供消息代理且将他们直接向client公开。API类似客户端和一个或多个后端之间的桥梁一样。

架构

zaqar_framework.png

  • Transport:

    • 与Zaqar客户端交互,接受请求消息并发送给Storage组件,并返回正确格式的响应
    • 支持两种API接口WSGI和WEBSOCKET
  • Storage

    • 负责与存储后端交付,存储和检索来自Transport层的数据和请求
    • 存储后端采用插件机制,目前支持Mongodb, redis, sqlalchemy

工作方式

zaqar_work.png

graph LR
A(Sender)--> |Messages| B(Zaqar)
B --> |Msg&Notification| CA(EndUser)
B --> |Msg&Notification| CB(WEB APP)
B --> |Msg&Notification| CC(Mobile APP)

几个概念

Queue

队列是组合消息的逻辑实体。用户可以在创建队列之前将消息发送到队列,Zaqar将自动创建队列。类似topic

Message

消息通过队列发送,它将一直存在,直到被收件人删除,或者基于TTL(生存时间)值由系统自动删除。
所有与消息相关的操作都需要将Client ID包含在头文件中。 这是为了确保消息不会回传给发布它们的客户端,除非客户端明确地请求了该消息。

Claim

声明是一种标记message的机制,以便其他客户端不会处理相同的message。

通过它从指定的队列中认领一组消息
此操作要求从最旧到最新的一组消息(最多限制参数的值),并跳过已声明的任何消息。如果没有无人认领的消息可用,则API返回204无内容消息。

Claim完成处理消息后会删除对应的message,来确保消息只被处理一次。

Subscription

订阅,为订阅者和队列之间创建了联系。当创建订阅关系后,如果由新消息发送到对应的队列,订阅者会被自动通知。

Pool

后端存储的池,通过配置不同的存储池支持多后端存储。可以不停止服务的情况下增加存储池。

flavor

队列flavor允许用户根据存储能力制定不同的队列(例如:耐用存储、快速存储)。flavor依赖于池的存在,需要指定队列使用哪一个pool。

官方资料:https://wiki.openstack.org/wiki/Zaqar

发表新评论

© 2017 Powered by Typecho
苏ICP备15035969号-3