Redis Driver - Pooling Support
Enhance the basic Redis driver to support a pool of backend nodes, with the following features:
* Sharding individual queues across multiple nodes for efficiency and horizontal scalability. May be able to use redis-cluster if we move to timestamp-based message IDs (scatter-gather and then sort by timestamp, must be granular enough).
* Replication of each message across 2-3 nodes for HA. Can't user master-slave, because Redis ACKs the write before propagating the message.
== Sharding Questions ==
* Can we get away with using redis-cluster?
* If not, then...
* Should we use a hash ring or a catalog?
* If we use a ring, what is the process for introducing new nodes?
* Should we use a per-node counter or simply rely on the system clock and ntpd? In the latter case, is there any possibility of a race condition causing a message to be missed by any one client? See also: http://
* What do we do when a client does not provide a marker? We need a way to find the head of the queue (i.e., the oldest message).
== Proposed Design ==
* Embed node ID in marker. That way, markers can use per-node counters.
* Query each node in turn, following behind the same cycle used in writing the messages.
* Use a clock (simple counter or system clock) to create locality of message writes and reads, obviating the need for scatter-gather queries.
* Implement replications with an active-active design, that copies messages in parallel via async IO.
More thoughts here (applies also to mongodb driver): https:/
~
Food for thought: http://
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Low
- Drafter:
- Kurt Griffiths
- Direction:
- Approved
- Assignee:
- None
- Definition:
- Drafting
- Series goal:
- Accepted for kilo
- Implementation:
-
Not started
- Milestone target:
- None
- Started by
- Completed by
Related branches
Related bugs
Sprints
Whiteboard
How about trying out the new specs process with this bp? (kgriffs)
This may slip to Kilo. A durable message store for graduation is probably higher priority (TBD). (kgriffs)
Work Items
Dependency tree

* Blueprints in grey have been implemented.