Open edX scalable architecture

Hello everyone,

I am finally getting closer to deployment of open edX in production. However i have couple of questions before i begin.

I had few experiments already installing open edX on ec2 instance t2.large (i.e. 2vCPUs 8gigs RAM 50 gigs storage) on Ubuntu 16.04. now this was everything on single instance. However open edX is highly scalable and i want to optimise my resources and also prevent it from failure or atleast prepare to prevent it.
So could any user who deploys such scalable architecture, provide their insight on best practices and how to go about it or point me to some read the docs?
I expect to have totally 25 courses that are 4 weeks (3-4 hours/week) & 8 to 10 courses that are 32 weeks (2.5 hours/week) this courses will be authored before making the site public so CMS won’t be used that often.
So i am planning to set different servers for each of lms workers, forums and rest of code base. I also plan to use AWS RDS mySQL. So that things are individually scaled up based on the needs.

Do you guys think this approach is correct or do you suggest to make some modifications?

What instances are preferred,if any.

I quite did not find how do i connect these servers to connect to each other?

Any response is highly appreciated

Thanks

There is no official guide as such for this.

But you are in the right direction.

  • Separate instance for LMS & CMS
  • Separate instance for Mongo DB
  • RDS for MySQL
    And if the load is too much you can separate memcache and elasticsearch and forum too.

t2.large is good for initial setup.

Good luck

Thanks for the response chintan😊

Any insight on how can i implement these in my deployment?

Also do/can we use auto scale feature by AWS for scaling or we have to determine no of instance required and run them all time? Or the answer is it depends?

Hey,

As far as I know edX does use auto scale feature, and yes it does depends on your usage.

For separate components or how to have architecture, have a look here Open edX Architecture this guides you on what components you can separate.

For the HOW part, that is something you won’t find documentation on easily and you’ll have to figure it out on your own by experimenting.

Thanks chintan

For now I think that’s sufficient for me to go ahead and start experimenting on it as long as I am aware that i am on right path.

Regards

1 Like

Ok just an additional question if i may ask.

So while we do native installation we use edx configuration repository by exporting latest tag. This has all the latest ansible playbooks and lot of files inside. Would it be a good practice to fork a repository and set up my instance? I came across Stanford University repository that uses the architecture that probably i am looking for or even more advanced settings :blush:

How and what shall we do to ensure we are making right configration repo if you manage one.

That would be true.

Get your own configuration repo, make modification as per your requirement and then to use that.

Make sure to use correct branch and repo and labeling the variables accordingly.

For example if you don’t set the release variable correctly, some of you installation will be in master and some as per the release.

Also don’t worry much on that, despite knowing exactly what to change or what to do, one or the other thing can go wrong, so just experiment it out, backtrack the issues and work it out.

Good luck