We often get asked by new adopters of Open edX about how to size their deployment. This is a very complicated topic: choosing the number and size of machines to host Open edX can depend on lots of subtle factors, including the complexity of the courses.
But I'd like to throw out some simple starting figures based on our experience using Amazon Web Services. I hope others will contribute more data, and we can refine these guidelines.
The basic question we are trying to answer is: how many AWS instances should I allocate to support my expected use?
The key information you'll provide is: how many simultaneous students you expect on your site during peak times. This depends on the total number of enrolled students and how many courses you run. It also depends on how widely spread around the world your students are, whether there are reasons they would all do coursework at the same time, and so on. All of this boils down to your estimate about how many students will be on the site at the same time during your site's busiest time.
We looked at some of our own deployments to get a sense of how much machine supports how many users. There are some considerations that make a comparison of
edx.org to a new Open edX installation difficult, but we've tried to account for those factors.
My rough guideline is: an LMS worker will support about 75 simultaneous active users. To be on the safe side, give each LMS worker 1Gb of RAM. When choosing an AWS instance model, RAM will be the bottleneck, not CPU. Use your active simultaneous user estimate to decide how many workers you need. Choose an AWS instance model: m2.2xlarge is a good choice. Divide the number of workers by the amount of RAM (30Gb for m2.2xlarge) to determine the number of instances you need.
Some good devops principles to consider:
- Never have only one machine, so allocate at least two instances
- Start larger than you think you need, you can scale it back once you see the real system under real load.
As an example, suppose you estimate that you will have 800 active simultaneous users at your busiest time. 800/75 --> 10.6, so you will need 11 workers. You need 11Gb of RAM. This fits easily within a m2.2xlarge instance.
That covers the web workers. You also need to configure at least a database machine. We'll add to these guidelines in the future.
Do people have thoughts on this guideline? Is your experience radically different? Do you have a better way of describing this?
--Ned.