We use Amazon as our infrastructure provider. We rely on Amazon S3 for storing eLearning content securely, and we use Amazon CloudFront to distribute it. We also use Sparkpost to handle transactional emails and some optional services like Stripe to handle payments.
We use 2 load-balancers on top of our web server farm and a pair of HAProxies behind them that also perform SSL termination. This hierarchy of load-balancers manages online traffic and blocks Denial-Of-Service attacks (i.e., load-balancing limits traffic per IP). To mitigate the total system load, each user request is directed to the web-server that has less load at the moment and clients are distributed to different database servers —which aren’t accessible from the internet.
We use virtual servers with Solid State Disks (SSD).
Scaling
We closely monitor system status. Whenever there’s a performance bottleneck, we can activate or shut down new web-servers and DB-servers on demand.
Contingency plan
All user files are stored on Amazon S3 which is designed for durability of 99.999999999% of objects. All data is redundantly stored across multiple facilities and multiple devices in each facility.
Databases are backed-up daily and stored for 30 days on a separate infrastructure. We also keep full virtual machines for all database servers as a quick way to restore the service in case of catastrophic failure.
Monitoring
We use in-depth monitoring services to ensure that the system stays in good status. Whenever a monitor service encounters an error, an automated email is dispatched to our technical team for initiating necessary action.
Topology
In the diagram below, you can see the system’s network topology and architecture.
