How are Cloud Applications Different?

May 27, 2015 Off By David
Article written by Leo Reiter
One of the most often misunderstood concepts in cloud computing is the architecture of the applications themselves. Cloud applications are different than traditional workloads in many ways, and getting the architecture wrong can mean the difference between something that scales while delivering reliable service and something fragile that falls terribly short.
 

Cloud “Hosting”?

The first thing to deeply understand is that there is no such thing as cloud “hosting”. This is a misused term to basically describe just ordinary hosting services. Hosting is something you use for traditional applications, which require predictable, stable environments with lots of persistence and high availability. Despite both delivering services over networks, a hosting environment could not be more different than a cloud environment. Here are some key distinctions:



 

As you can see from the comparison table, hosting is very different to cloud computing. Hosting makes perfect sense for migrating ordinary data center applications to service provider environments, without having to “reinvent the wheel”. This includes existing relational databases, middleware, and front-ends. Service providers offering hosting can meet the same levels of service assurance you currently have in a data center environment.
Cloud on the other hand, is about on-demand capacity at elastic scale. It’s not intended for long running workloads, high availability, or even much persistence. Modern cloud applications are designed with those qualities in mind. Traditional workloads are not – they don’t function well if machines suddenly fail, data is not consistent, or environment details change frequently. What’s more, on demand capacity is generally more expensive than negotiated contract capacity (e.g. hosting); so it’s very important that cloud applications take this into account in order to make their economics feasible. There are many important design principles – let’s take a look at a few…
 

Design Principles of Cloud Applications

“Design to Fail”

A very key consideration for cloud applications is the concept of “design to fail”, which generally means working with the assumption that the underlying infrastructure is unreliable. There are 2 basic tricks to achieving resilient design in this type of environment:
  1. Statelessness – whenever possible, cloud applications operate without persistence; if a machine or “instance” fails, another one can be brought up with the same application and nothing is lost.
  2. Replication – when persistence is in fact needed (e.g. to store and retrieve data), replication comes to the rescue. This basically means keeping multiple copies of data in different places at the same time. Data may be in the form of “objects”, or it may be in a distributed file system (e.g. HDFS for Hadoop). With replication, if part of the infrastructure fails, the data is still available in other places and processing can continue.
When it comes to reliance on databases specifically, most cloud applications can function without “ACID compliance”. ACID (Atomic, Consistent, Isolated, Durable) is a standard for traditional relational database management systems, and a staple of enterprise applications. While ACID compliance is convenient and safe, it also requires very persistent, synchronized management which is not something a cloud environment can guarantee. There are plenty of alternatives, including NoSQL-type data stores as well as technologies such as Cassandra, which at least offer many of the benefits of ACID without sacrificing performance and scalability. But most importantly, cloud applications themselves must be architected to deal with the lack of ACID compliance in their data stores, unlike their traditional enterprise cousins.
 
Elastic Scale

Scale-up and scale-down capabilities are critical to cloud applications. The former guarantees there will be enough of the application to handle demand, while the latter makes the application cost effective to operate. Thankfully, the “design to fail” aspect of the architecture makes elasticity both possible and relatively simple, since there’s very little state to configure each time scale changes, and there’s not much worry about losing data just because machine “instances” are turned off.
 
Service Oriented Architecture (SOA)

SOA gives cloud applications the flexibility to run in unpredictable environments without really having to care. Instead of the tight integration between components that is common in enterprise applications, SOA applications communicate through web service protocols and abstract the details on each end of exchanges. It also allows components to be changed or upgraded individually, without having to restart or even reconfigure the rest of the stack. As long as the interfaces remain consistent and stable, component changes are transparent to the system. SOA also enables hybrid cloud capabilities, allowing individual components to be distributed across different infrastructures without changing the overall functionality of the application.
 

Cloud Applications, Explained

In summary, cloud applications don’t just serve functionality over the Internet – they represent a new way to design and deploy services in general. The most important thing to understand is that cloud computing is radically different in architecture to traditional data center or hosting infrastructures. While there’s no doubt some overlap, it’s important to consider the differences or risk deploying applications that quickly break at scale, or cost too much to operate.
 
##
 
About the Author
Leo Reiter is a cloud computing pioneer who has been designing, developing, and evangelizing large scale, on demand systems and technologies since the mid 1990’s.  He co-founded Virtual Bridges and helped introduce VDI and desktop cloud (DaaS) to the market.  Currently, Leo serves as Chief Technology Officer of Nimbix, Inc., a global provider of High Performance Computing applications and platforms on demand.  

Leo is on a long-term mission to help more people from all walks of life derive more value from advanced technology, particularly in the cloud.

In his spare time, Leo enjoys reading, cooking, and exercising.

Follow Leo Reiter’s CloudCow Column – Demystifying the Cloud

 
Twitter: @VirtualLeo
LinkedIn: https://www.linkedin.com/in/leoreiter