Connected, customized, and personalized. That’s the promise from the latest web application development solutions as they incorporate so-called Web 2.0 concepts. The strategy behind Web 2.0 Applications is to enable users to establish a peer group based on common interests, view relevant data and make the right connections between the vast amount of information related to the users interest. To be effective, web application development will offer users the ability to control how data is presented and customize it to our will, effectively making us, the consumer, the ones who drive the web application content and the direction in which it evolves. Smart web application developers have realized this trend and have been able to take advantage of the enormous amount data that is provided by the user. More content attracts more users, and eventually the build-up reaches a critical mass and starts a snowball effect, more content bringing more users, and more users adding more content. However, with all these benefits come substantial technical issues. Web applications that used to run fine on a couple front-end Apache servers with a load balancer now find that their database connections are choking, and that they are not able to reliably scale session data across multiple web servers. Caching becomes a major concern, as having to go back to the database for every request can slow down a server process to a crawl. With all these issues to keep in mind, building successful Web 2.0 applications may seem like a black art fraught with danger and sleepless nights. However, keeping a couple basic points in mind will certainly keep most of the initial problems at bay, at least long enough until you can properly address them. Here are a couple suggestions, in no particular order:
- Take advantage of virtualization and cloud computing platforms
- When you build your application on a cloud computing platform, or design it to run as a virtualized image from the start you provide it with scalability with very little effort. Once you resolve some of the hurdles that go with a cloud computing platform like Amazon EC2, Google App Engine, or Salesforce Sites you have the basics of an extremely scalable application.
- Delegate the load to the client(s)
- Cache everything
- The number one bottleneck with Web 2.0 applications is the database server. Think of the social network of your choice, and how many database requests it would need to handle one users profile in a day. Now add a second user, and then a third. You’ll quickly find that the amount of traffic start to go up exponentially, not linearly. This is known as Metcalfe’s law in communications, but the same exact principle applies to many problems in software engineering. Now if the user’s profile is cached the first time it is accessed, there is a slight performance hit, however the database load after that remains constant no matter how many hits to that page are performed!