4.1. External Services

External services are, in essence, provided by another piece of software that is used by Quizzera. These are backing services for data storage, caching, and so forth.

4.1.1. NginX

NginX is used as a public-facing webserver and reverse proxy to Django. NginX and the Quizzera server communicate using uWSGI.

4.1.2. Postgres

Postgres is the database used by Quizzera. It is a very standard, production-ready database that is used by many different projects. It is also a standard for Django, so it is a natural choice for Quizzera.

In addition, Quizzera is intimately tied with Postgres because it uses a special, Postgres-only field to store JSON data for question instances.

4.1.3. Redis

Redis is a fast, persistent caching system that stores key-value pairs. We primarily use Redis as a broker for Celery.

4.1.4. Celery

Celery is a task scheduler and manager. Given task definitions and jobs of the different defined task types, Celery will distribute those tasks over a set of worker nodes and return the responses when ready. It manages all of this in a simple abstraction that allows for easy job execution.

In particular, Celery is used to schedule periodic tasks, namely that for repopulating the question instance cache.

4.1.5. Quizgen

Quizgen is a library to generate instances of specific questions. While not an external service, it is accessed internally (by Quizzera) as if it were external in that all data to/from Quizgen operate over a standard HTTP API.