Coolbeans is a distributed replicated work queue service that implements the beanstalkd protocol.
Unlike a message queue, beanstalkd is a work queue that provides primitive operations to work with jobs.
Coolbeans primarily differs from beanstalkd in that it allows the work queue to be replicated across multiple machines. It uses the RAFT consensus algorithm to replicate the job state consistently across machines.
Beanstalkd is a feature-rich and easy to use queue. Beanstalkd, however has a few drawbacks that include: (i) A lack of replication or high availability in terms of machine failures. (ii) There is no native sharding, (iii) No native support for encryption & authentication between the service & the client.
Given the initial setup of beanstalkd is simple, having a HA or sharded production setup is non-trivial. Our premise with Coolbeans is to provide a replicated beanstalkd queue followed by addressing the other issues incrementally. Read about our design approach here.
- A fully replicated work queue built using Hashicorp's Raft library.
- Strong consistency of all queue operations.
- Compatible with existing beanstalkd clients.
- Easy installation, available as a static binary or as a Linux docker image.
- Monitor metrics using Prometheus and visualize them via Grafana.
- Static binary can be downloaded from the release pages.
- Docker release images can be pulled from here.
- Docker development images can be pulled from here.
-
Refer the getting started guide.
-
To setup a three node cluster refer here.
-
Getting started guide to run coolbeans on Kubernetes, refer here.
Coolbeans is currently at alpha
release quality. It is all about improving the quality of this by testing, testing & more testing.
Here are a few ways you can contribute:
-
Be an early adopter, Try it out on your machine, testbed or pre-production stack and give us feedback or report issues.
-
Have a feature in mind. Tell us more about by filing an issue.
-
Want to contribute to code, documentation. Checkout the contribution guide.
icon by Llisole from the Noun Project