The Architecture of Superdesk
Our Superdesk open source software is built following the REST architectural style, the client is an Angular driven application and the backend is being built using Python 3 and the Flask-based Eve framework.
This post will do a deep dive into the backend side of the current architecture, the client side will be tackled by an upcoming post.
Tech stack
- Elasticsearch - secondary data storage, enhanced search capabilities
- Python 3 - provides all the goodies to make developers happy
- Eve - easy way to define the REST-like API
- Flask - besides being the backbone for Eve, we use it extensively for creating custom commands
- MongoDB - main data storage
- Celery - task distribution, workhorse for background data processing
- Redis - mainly used for passing data to Celery workers and for task synchronization
- Autobahn - WebSocket communication handling, main notification mechanism
- Honcho - manage the running applications
Optional dependencies
- Docker - custom built images for server and client, easy run&deploy scenarios
- LogStash - centralised logging
The full list of development dependencies can be found here.
Overview
What's visible at a quick glance is that the current backend infrastructure is composed of three running apps:
- Celery application sharing a lot of the internal infrastructure of the Eve application
- Flask/Eve web application running on top of [Gunicorn]
- WebSocket server to handle client notifications
On the storage side of things, we have:
- Mongo as the main storage engine
- Elastic as the main search engine
- Redis for sending data to and from Celery workers