According to the following Stack Overflow question: Does Django scale? Django is great for a web apps that anticipates thousands of users per day/month, however to achieve this, you have to have the right design.
Now my scenario is as follows:
I've just joined a startup as a tech lead / lead developer, and while I have 3 years experience with Django, I have never used it for as a large scale app. The latest large scale app I was involved with used Zope, and relied on SQL Server to handle the caching, etc (horrible practice in my opinion). Given that this startup now has only about 20,000 users only after 6 months of existence, and given that they've also hired a marketing specialist at the same time they hired me, I can anticipate (or at least hope to anticipate) a growth opportunity. Much of the existing Django code needs refactoring; i.e. using static html form rather than ModelForm, etc.
My question is: as I refactor this App, what are the design patterns I should follow to get it done right, such that we can scale to say 100,000 to 500,000 users per month? What are some gottchas that I should lookout for? In terms of Model design, what is considered scalable model design? In terms of DB support, what kind of DB setup can help me achieve this scalability? In terms of load balancing, what architecture is appropriate for load balancing?
I assume using Django out of the box, will not achieve this, and I don't want to find myself in a situation, where I need to ask to hire a scalability expert...I also would like to know what are some load testing techniques/tools that I can use to measure current performance/scalability? I've only been with them a few days, so I'm not sure of the prod environment just yet, so if I were to feel that I need to change the prod env, what are some good options (cloud solutions), that are appropriate yet affordable?
Edit: They also seem to be using Ajax for everything and that has me worried. Supposing I can't convince them to change that, what are some good Ajax techniques libraries (I know of django-dajax/dajaxice), that can be used and are still scalable.
thanks,
Sam