Designing and developing applications for the Cloud requires a different approach than traditional, “real-machine” systems. And this change in approach requires discussions about what design options available. This is not to say that a traditional development approach will not work in a Cloud environment, but to fully leverage the Cloud as a platform (rather than as an infrastructure), each application must consider Cloud-specific architecture to get the full benefit. While there are a lot of factors to think about, there is a certain peace of mind that you get because you have to deal with fewer IT-related tasks.
There are many benefits of applications made specifically for the Cloud, one of them is how your application scales in response to user load (increasing or decreasing). With traditional hardware-based applications, IT staff would add more power to existing servers in response to an increase in active users. IT personnel would identify the limiting factor of each machine, purchase additional/more powerful hardware, wait until a time when the server could be down, and then install the equipment. This model is typically slow and expensive and can takes weeks of planning for even a simple server upgrade. Moreover, this approach doesn’t allow for a scale-down. That means the servers are always ready to handle the maximum predicted spike at all times, so the same operating costs occur on the slowest day of the year as it does on the busiest.
Luckily, it is possible to avoid all of that and “virtualize” existing servers in the Cloud. This is referred to Infrastructure as a Service (IaaS). This approach is recommended when scaling up and down is required but the existing application does not support horizontal scalability (adding more servers rather than making your existing server larger). As a result, this approach is very common when deciding to move to the Cloud, but IaaS does not provide the all the benefits the Cloud has to offer. Applications using IaaS typically require the same effort from the network/server administration and are treated like physical machines by most IT staff. IaaS applications do benefit from easier and quicker modification to server power.
However, when an application is designed specifically for the Cloud, the application can be run without much intervention or maintenance. This is referred to Platform as a Service (PaaS) and is where the Cloud really starts to shine. With a well-configured Cloud application, scaling is automatic and is appropriately sized for the number of active users. Additionally, instead of scaling the entire application, sections of the application scale independently providing more processing power only where needed. Another great benefit of PaaS is the peace of mind you get because the Cloud eliminates periodic IT maintenance. This reduces the overall cost of supporting the application servers as well as providing a reliable solution that will handle the needs of its users, even if your application becomes popular overnight.
Once you decide to use the Cloud as the platform, there are some core concepts that provide a good start for developing scalable Cloud-centric applications. I will dive deeper into these design and architectural elements in my next two blogs of this series.