Gone are the days when your only option for development and deployment involved significant effort to design, implement, and deploy distributed applications. Oftentimes, the physical realization of an n-tier system mirrored its logical tiers; a machine dedicated to the database, another for the application service logic, and a third tier consisting of the client computers used for rendering the presentation services. Deploying, managing, and scaling this type of architecture proved unmanageable for many and, as a result, other models of distributed computing were sought.