How to design scalable applications? [closed]
How do you design/architect a scalable application? Any suggestion of books or websites that could help to understand how to scale out applications?
Thanks
Solution 1:
Over the past year I've had to come up to speed on this question for a project my company's working on, and I've found these resources extremely helpful: Todd Hoff's highscalability.com; Scalable Internet Architectures, by Theo Schlossnagle; and Building Scalable Web Sites, by Cal Henderson. Highscalability.com in particular will point you to many good presenations, tutorials, books, and papers, and is a great place to start. All of the advice is practical, and based on experience at sites like Flickr, Twitter, and Google.
BTW, scalability is not performance. A perfectly scalable system is one that has a fixed marginal cost to add additional users or capacity.
Solution 2:
This is a nice read on livejournal and how they've scaled their application over time.
danga.com/words/2004_mysqlcon/mysql-slides.pdf[PDF]
It might not be the sort of thing you're looking for, but it's one of the better "This is what we did and why" overviews on scaling.
Solution 3:
I tend to think that scalability is closely related to maintainability. And it seems to be often overlooked that people spend only a short time developing applications and the rest of the time maintaining it.
Also, scaling has almost certainly to do with data (which is more agile than code - so you like to have more and more of it), thats why your storage access cost should stay between
O(1)
andO(n)
.The perfectly scalable application for me is one that I could copy from an environment to another (similar) environment, configure a few values and run it to extend the execution realm of the whole application.