Differences and challenges in developing web applications to be hosted on the cloud as opposed to dedicated servers?


  • Legacy mentality told us to build the biggest and beefiest server possible to allow for solid and consistent performance of our apps. 
  • In the Cloud however, you don't plan for stability, you plan for fluidity. That being said, there are tons of challenges to be faced when making your app truly harness the full potential of the Cloud. 
  • One example is being fault tolerant. This means you plan on host machines going unavailable. However, through: Chef, Puppet and APIs, you can have your architecture and app auto-heal to overcome the host machine failure. 
  • Generally speaking it's faster and less expensive (starting up) to develop in Cloud than on dedicated servers, especially if you think PaaS like Heroku (heroku.com Heroku | Cloud Application Platform) rather than EC2 or DigitalOcean. 
  • Your choice of platform (Azure, Google, Heroku) does influence which language, because although most will support a standard set, each platform has subtle biases. 
  • We run everything in the Cloud including the whole development environment, test servers, build servers, and source control. 
  • A traditional web application is meant to run on the most heavy duty server you can afford while being as stable and well-performing as possible. This usually requires VERY expensive, high-end servers, which  are prone to going down and making the application unusable. 
  • Cloud-base applications are less concerned with stability as they are scalability and redundancy. Whereas an application may be too demanding for a dedicated server unless an expensive one is chosen and needs to be scaled back, cloud hosting and distributed computing allow for a more “no-compromises” approach to processing power. 
  • This is a trade-off, as some programming languages are better suited for the cloud (as there is a higher likelihood for conflicting code than others. 
  • Additionally, programming for a cloud-based application requires the programmer to be far more aware of the interactions between multiple instances of the same application, and how the load needs to be distributed across the cloud.