Overview of Software Components
The components for this project can be grouped in two categories: front-end software componented and back-end software components.
Application state or the application data is stored in a in-memory data-structure storage system called Redis (http://redis.io). It supports common data structures such as: sets, lists, sorted-sets, hash tables, on top of it being at its core a key-value storage system.
A copy of the database image is stored on hard disk and could also be backed-up on another server. Redis uses this image to load the data into memory when it restarts or when writes occur. Fortunately, this application is read-only and no writes occur. This eliminates much compexlity involved with durability/persistance of written data to Redis.
Nginx (http://wiki.nginx.org/Main) sits in front of the application server and forwards request to it. It is a front-end proxy. Additionally, it assists in logging and caching. Please see the nginx.conf file for more information on configuration.
The application server is built using Tornado (http://www.tornadoweb.org): a very performant Python (http://www.python.org) web framework. This server coordinates with Apache. When a request gets to the application server it processes it and performs computation based on the request.
There are some other components in this project that are minor:
Sass (http://sass-lang.com) was used to build the CSS front-end component
Flash (http://www.adobe.com/products/flashplayer.html) is used for copy text to the clipboard.