Modern websites are web services with an html front end. Web services need to be easy to manage and easy to scale. The variety of ways to architect these features is a never ending playground of possibilities. Below is a description of features and current thinking on how to achieve those features.
Growth
Easily scale up or down the group of virtual machines that provides the service. Any one server should be able to be removed without affecting the service. tool: libcloud Add more compute nodes programatically, even across different VPS providers.
All API
There is only the API. The website is an html client that makes ajax calls to it. Ideally the website is static html/css, with javascript logic to make it perform/interact with the user. tools: jquery, dustjs
Resilient API
Rather than handling an HTTP request, the request goes into a queue. Workers on different VMs pull jobs off the queue. Different VMs are united by access to a common distributed datastore. tools: redis, mozilla circus