/
Moving from RabbitMQ to Redis

Moving from RabbitMQ to Redis

What is RabbitMQ?

RabbitMQ is the message broker that edX previously used as a backend for Celery.  Celery is a Python library that provides an API for running tasks asynchronously and abstracts away the particular backend used to run the tasks.

Where was it used?

RabbitMQ powered all async tasks done by the edx-platform as well as ecommerce, xqueue, notifier and PDF certificate generation.

Why did we move?

Over the course of 2017, RabbitMQ exhibited issues when scaling Celery workers out past a certain size.  When the issues happened, RabbitMQ stopped accepting requests but did not provide any useful information about why it had stopped doing this.  When RabbitMQ stopped accepting requests, various levels of outages occurred in the apps that use it.  Given the severity of the impact and the lack of feedback from the system, we decided to switch to a different Celery backend - Redis.

Why Redis?

We chose Redis for a few different reasons.

  1. In our testing a single Redis instance can support 10x more backend celery workers than our RabbitMQ setup.

  2. Redis is available via AWS Elasticache, reducing the maintenance burden.

    1. It also provides automated failover options managed by AWS - similar to what we have for our MySQL database in AWS RDS.

  3. Using Redis for async tasks offers the potential to move to Redis as our cache backend as well, which would reduce the number of technologies that are needed to get Open edX up and running.

Related content

FY21-22 Architecture User Story Roadmap
FY21-22 Architecture User Story Roadmap
Read with this
Asynchronous Task Processing Architecture V2
Asynchronous Task Processing Architecture V2
More like this
Event Storming
Read with this
2015.09.09 Asynchronous Task Processing
2015.09.09 Asynchronous Task Processing
More like this
Developer Documentation and Training Survey Results - 2021-Jan
Developer Documentation and Training Survey Results - 2021-Jan
Read with this
Large Instances Meeting Notes 2024-10-29
Large Instances Meeting Notes 2024-10-29
More like this