The conventional approach to building a web app is to pick a web application framework (PHP, Java/Struts, Python/Django, Ruby on Rails), pick a database server (MySQL), sign up with a hosting service, and write your app. You’ll get one or more instances of your app running against a single instance of a database. You’ll deploy your application from a repository (using svn or git) and backup your database every ten minutes or once a night (unless you don’t backup at all). As your traffic grows, you’ll figure out how to scale by load balancing between instances of your app and sharding your database. That’s the monolithic approach to building and deploying a web app. Been there, done that.
Web apps with shared nothing architecture are becoming easier to implement as cloud computing services become available. I don’t know if it’s possible to build a web app without a single point of contention or single point of failure but it’s now possible to distribute many pieces of a web app more practically than before.
Application business logic can be moved to the web browser with JavaScript platforms such as Sproutcore. Databases can be moved into the cloud where replication and redundancy are included within the utility (Amazon’s Simple Storage Service). What’s left is routing and controller logic. I’d like to see how much of that can be distributed.