Welcome to the Zaqar Developer Documentation!¶
Zaqar is a multi-tenant cloud messaging and notification service for web and mobile developers.
The service features a REST 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. The Websocket API is also available.
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.
Note
This documentation is generated by the Sphinx toolkit and lives in the Zaqar project source tree. Additional draft and project documentation regarding Zaqar and other components of OpenStack can be found on the OpenStack Wiki, as well as in the user guides found on docs.openstack.org.
Key features¶
Zaqar provides the following key features:
- Choice between two communication transports. Both with Keystone support:
- Firewall-friendly, HTTP-based RESTful API. Many of today’s developers prefer a more web-friendly HTTP API. They value the simplicity and transparency of the protocol, it’s firewall-friendly nature, and it’s huge ecosystem of tools, load balancers and proxies. In addition, cloud operators appreciate the scalability aspects of the REST architectural style.
- Websocket-based API for persistent connections. Websocket protocol provides communication over persistent connections. Unlike HTTP, where new connections are opened for each request/response pair, Websocket can transfer multiple requests/responses over single TCP connection. It saves much network traffic and minimizes delays.
- Multi-tenant queues based on Keystone project IDs.
- Support for several common patterns including event broadcasting, task distribution, and point-to-point messaging.
- Component-based architecture with support for custom backends and message filters.
- Efficient reference implementation with an eye toward low latency and high throughput (dependent on backend).
- Highly-available and horizontally scalable.
- Support for subscriptions to queues. Several notification types are
available:
- Email notifications.
- Webhook notifications.
- Websocket notifications.
Project scope¶
The Zaqar API is data-oriented. That is, it does not provision message brokers and expose those directly to clients. Instead, the API acts as a bridge between the client and one or more backends. A provisioning service for message brokers, however useful, serves a somewhat different market from what Zaqar is targeting today. With that in mind, if users are interested in a broker provisioning service, the community should consider starting a new project to address that need.
Design principles¶
Zaqar, as with all OpenStack projects, is designed with the following guidelines in mind:
- Component-based architecture. Quickly add new behaviors
- Highly available and scalable. Scale to very serious workloads
- Fault tolerant. Isolated processes avoid cascading failures
- Recoverable. Failures should be easy to diagnose, debug, and rectify
- Open standards. Be a reference implementation for a community-driven
Modules reference¶
Zaqar is composed of two layers:
The transport drivers are responsible for interacting with Zaqar clients. Every query made by clients is processed by the transport layer, which is in charge of passing this information to the backend and then returning the response in a format understandable by the client.
The storage drivers are responsible for interacting with the storage backends and, that way, store or retrieve the data coming from the transport layer.
In order to keep these layers decoupled, we have established that checks should be performed in the appropriate layer. In other words, transport drivers must guarantee that the incoming data is well-formed and storage drivers must enforce their data model stays consistent.
User Guide¶
Setting up Zaqar in development environment¶
Welcome new contributors¶
Running and writing tests¶
Reviewing¶
Feature Guide¶
Other resources¶
Internal API reference¶
- The
zaqar.api.handler
module - The
zaqar.api.v1.request
module - The
zaqar.api.v1.response
module - The
zaqar.api.v1_1.request
module - The
zaqar.api.v1_1.response
module - The
zaqar.api.v2.endpoints
module - The
zaqar.api.v2.request
module - The
zaqar.api.v2.response
module - The
zaqar.bootstrap
module - The
zaqar.cmd.gc
module - The
zaqar.cmd.server
module - The
zaqar.common.access
module - The
zaqar.common.api.api
module - The
zaqar.common.api.errors
module - The
zaqar.common.api.request
module - The
zaqar.common.api.response
module - The
zaqar.common.api.schemas.flavors
module - The
zaqar.common.api.schemas.pools
module - The
zaqar.common.api.utils
module - The
zaqar.common.cli
module - The
zaqar.common.configs
module - The
zaqar.common.decorators
module - The
zaqar.common.errors
module - The
zaqar.common.pipeline
module - The
zaqar.common.storage.select
module - The
zaqar.common.transport.wsgi.helpers
module - The
zaqar.common.urls
module - The
zaqar.common.utils
module - The
zaqar.context
module - The
zaqar.i18n
module - The
zaqar.notification.notifier
module - The
zaqar.notification.tasks.mailto
module - The
zaqar.notification.tasks.webhook
module - The
zaqar.storage.base
module - The
zaqar.storage.errors
module - The
zaqar.storage.mongodb.catalogue
module - The
zaqar.storage.mongodb.claims
module - The
zaqar.storage.mongodb.controllers
module - The
zaqar.storage.mongodb.driver
module - The
zaqar.storage.mongodb.flavors
module - The
zaqar.storage.mongodb.messages
module - The
zaqar.storage.mongodb.options
module - The
zaqar.storage.mongodb.pools
module - The
zaqar.storage.mongodb.queues
module - The
zaqar.storage.mongodb.subscriptions
module - The
zaqar.storage.mongodb.utils
module - The
zaqar.storage.pipeline
module - The
zaqar.storage.pooling
module - The
zaqar.storage.redis.claims
module - The
zaqar.storage.redis.controllers
module - The
zaqar.storage.redis.driver
module - The
zaqar.storage.redis.messages
module - The
zaqar.storage.redis.models
module - The
zaqar.storage.redis.options
module - The
zaqar.storage.redis.queues
module - The
zaqar.storage.redis.scripting
module - The
zaqar.storage.redis.subscriptions
module - The
zaqar.storage.redis.utils
module - The
zaqar.storage.sqlalchemy.catalogue
module - The
zaqar.storage.sqlalchemy.controllers
module - The
zaqar.storage.sqlalchemy.driver
module - The
zaqar.storage.sqlalchemy.options
module - The
zaqar.storage.sqlalchemy.pools
module - The
zaqar.storage.sqlalchemy.queues
module - The
zaqar.storage.sqlalchemy.tables
module - The
zaqar.storage.sqlalchemy.utils
module - The
zaqar.storage.utils
module - The
zaqar.transport.auth
module - The
zaqar.transport.base
module - The
zaqar.transport.utils
module - The
zaqar.transport.validation
module - The
zaqar.transport.websocket.driver
module - The
zaqar.transport.websocket.factory
module - The
zaqar.transport.websocket.protocol
module - The
zaqar.transport.wsgi.driver
module - The
zaqar.transport.wsgi.errors
module - The
zaqar.transport.wsgi.utils
module - The
zaqar.transport.wsgi.v1_0.claims
module - The
zaqar.transport.wsgi.v1_0.health
module - The
zaqar.transport.wsgi.v1_0.homedoc
module - The
zaqar.transport.wsgi.v1_0.messages
module - The
zaqar.transport.wsgi.v1_0.metadata
module - The
zaqar.transport.wsgi.v1_0.pools
module - The
zaqar.transport.wsgi.v1_0.queues
module - The
zaqar.transport.wsgi.v1_0.stats
module - The
zaqar.transport.wsgi.v1_1.claims
module - The
zaqar.transport.wsgi.v1_1.flavors
module - The
zaqar.transport.wsgi.v1_1.health
module - The
zaqar.transport.wsgi.v1_1.homedoc
module - The
zaqar.transport.wsgi.v1_1.messages
module - The
zaqar.transport.wsgi.v1_1.ping
module - The
zaqar.transport.wsgi.v1_1.pools
module - The
zaqar.transport.wsgi.v1_1.queues
module - The
zaqar.transport.wsgi.v1_1.stats
module - The
zaqar.transport.wsgi.v2_0.claims
module - The
zaqar.transport.wsgi.v2_0.flavors
module - The
zaqar.transport.wsgi.v2_0.health
module - The
zaqar.transport.wsgi.v2_0.homedoc
module - The
zaqar.transport.wsgi.v2_0.messages
module - The
zaqar.transport.wsgi.v2_0.ping
module - The
zaqar.transport.wsgi.v2_0.pools
module - The
zaqar.transport.wsgi.v2_0.queues
module - The
zaqar.transport.wsgi.v2_0.stats
module - The
zaqar.transport.wsgi.v2_0.subscriptions
module - The
zaqar.transport.wsgi.v2_0.urls
module - The
zaqar.transport.wsgi.version
module - The
zaqar.version
module