Usually we hear about web sites and web applications becoming popular, not being able to scale to handle growing load, then crashing and burning. There are plenty of examples. Large news web sites still struggle to handle load when major world events happen. Successful social networks struggle as well. Twitter.com has struggled in recent months to maintain performance. Due to usefulness or coolness some of these sites hang on to their user base, the users hoping things will get better in a reasonable amount of time. If problems are corrected quickly, existence is maintained. Twitter appears to be recovering.
Building networked applications is a bit of an art. However, if you anticipate (or hope) that your application or service will grow to accommodate millions of users, you have to architect it to scale from its inception. If you don’t, likely you’ll be added to the list of casualties.
There are published architectures for reference and lectures discussing how companies with a large internet presence have handled scalability. For example:
During the past couple weeks there have been success stories about popular services scaling successfully in Cloud Computing environments. Notable is the BumperSticker Facebook application, built at LinkedIn, scaling to millions of users. This application was built using Ruby on Rails and deployed in Joyent’s Cloud. Joyent has a video posted describing how this application was built.
Sun Microsystem and Joyent announced a collaboration to offer free hosting (for a limited time) of social applications built for Facebook and OpenSocial environments. This is great news for developers and small companies without access to resources needed to handle scaling applications to huge numbers of users. We are witnessing the advent of companies now offering up new grid computing services as part of a business model and marketing it using one of the latest hot buzzwords, ‘Cloud Computing‘.
This should make it possible for more developers to implement and share new social applications where before it would be resource prohibitive. Some of the benefits of cloud computing offerings include:
- low cost of entry into resources required to deploy scalable applications
- no need to worry about hardware and support software maintenance
There are downsides as well. Some of them include:
- locked into vendor agreements and configurations
- doesn’t necessarily solve the scaling issues
Granted these types of services are of value to help host and scale applications to levels not previously possible by many individuals and small organizations. But, it is not a panacea for scaling social networks or individual services. It is not a substitute for architecting your software properly nor does it guarantee performance and reliability. Also, when deploying your creation into one of these corporate citadels, be sure you understand the SLAs being provided and costs associated with resource usage of the deployed software (e.g. can you incur the cost of resources used to scale to 5 million users if that happens).
If you are building a new Social Network application and are looking for users, join the crowd.
If you think you have a new social application that can draw 1 million+ users make sure you’re prepared for it to scale whether you use the resources walled in a citadel of a large corporation or are hosting it yourself. Consider designing the application to scale first no matter where it is deployed. Then decide how it may be deployed, whether in a data center, hosted web server farm or using a distributed execution platform such as Assimilator. If a Cloud is a corporate controlled data center, then there will be many isolated clouds. If somehow all computing resources connected to the internet are applied to deploying social networks, then many more clouds will dynamically form providing a much greater amount of available resources.