Hi,
We are developing a learning platform on Moodle. One of the client requirements is that it should be able to support 20,000 concurrent users which is huge. For AWS capacity planning, we were load testing and running into performance issues. I have read through many posts on this community , but still do not have a clear direction on it. Below are the details of the setup I have presently configured :
Setup:
We have a 100GB M4.XLarge network file system mounted on multiple 50GB M4.XLarge instances (vCPU-4 Mem(GiB)-16).
These instances are connected to a load balancer and the traffic is distributed equally.
The instances are connected to m4.xlarge MySQL RDS.
All storage volumes are Provisioned IOPs with IOP 1000. These are all on a single AZ.
Moodle is on the instances with moodledata residing in the file share. The sessions are maintained in the file system.
Testing:
We are running Jmeter scripts that simulate users logging in, searching for courses, enrolling, reading through the course material(SCORM packages of 40-Mb size).
The performance that we see is not good and it hits a low at 256 concurrent users with a ramp up time of 60, it gives a latency of around 54 seconds.
One thing we have observed is that the CPU utilization is around 70% and Memory utilization is ~ 55%, which seems to indicate that the instance capacities are still not being used to their potential. What could be the reason for the sub-optimal performance?
These are the queries that I have:
- What would be a back of a napkin baseline configuration (AWS instances) to support this architecture and 20,000 concurrent users?
- Is there an alternative architecture approach which is more resilient and scalable?
- Are there examples of any real world moodle systems that handle this kind of traffic and what is their architectural approach?
Any guidance/ advice would be much appreciated.!
Thanks
Sid