Considerations for Cloud Application Design

Instructor: Muhammad Wannous

Muhammad has been teaching Computer Sci. and Eng. and has a Ph.D. degree in Computer Sci. and Electrical Eng.

The cloud environment makes resources available in a flexible and easy-to-access way, and application developers can utilize these resources to the best level by carefully designing their works based on some simple principles.

Design for the Cloud

Jane is a developer, and she is working on a software project for a client who is planning to host the project with one of the cloud computing service providers. So, Jane needs advice on the considerations for cloud applications. Her friend Teresa, a specialist in the cloud computing environment, is trying to help her.

Cloud Applications, Not Applications in the Cloud

Jane asks, ''Are you saying that I should consider certain points when I design for the cloud environment?''

''Yes, you are right,'' Teresa responds. ''Developing for the cloud is different from developing for the on-premises environment. The cloud environment has some constraints but offers additional features to enable autoscaling, securing, enhancing availability, and elevating performance. If you want to benefit from these features, you should plan the application design for the cloud.''

''Please tell me more about that,'' Jane responds.

''Let's start from a simple but essential matter, that is, access to the machine resources in the application. You should be considering the type of service you are renting from the provider when designing your application. Take a look at Figure-1 which shows a comparison of the control level over resources for local, Infrastructure as a Service (IaaS), and Platform as a Service (PaaS) environments. You can see that if you go for a PaaS environment, you will not be able to access the file system of the machine your application is running on! So, if the client is planning for PaaS, then you should expect to use a storage service for the files your application generates or uses.''

Figure-1: Access control levels in different environments
Access control levels in different environments

Planning the Application for the Cloud

Jane states, ''I see your point, so how do I plan my application for the cloud?''

Teresa explains, ''There are some concepts that help developers design for the cloud.

  1. The composition of the cloud and more specifically virtualization and elasticity.
  2. Loose coupling of components (as in the case of web services).
  3. Fault tolerance and high availability.
  4. Multitenancy.
  5. Platform-agnosticism.
  6. Performance enhancement.''

The Cloud Composition

''I know the cloud is based on virtualization technology, but do I have to understand how the technology works in detail?'' Jane asks.

Teresa responds, ''No, you don't have to. However, it is necessary to have a basic idea of the virtualization technology and rapid elasticity since they enable auto-scaling and dynamically networking resources as the four directions in Figure-2 demonstrate. Scaling out/in is about increasing/decreasing the number of resources while scaling up/down is about enhancing/degrading the specs of a resource.''

Figure-2: Scaling in the cloud environment
Scaling in the cloud environment

Loose Coupling of Components

Teresa continues, ''To utilize the auto-scaling feature, it is necessary to refer to the second concept, which is about the coupling of components. The use of loosely-coupled stateless components and asynchronous communication allows scaling one component up/down and creating/destroying components as per the need (scaling out/in). Standard, consumable web services are good examples of such loosely coupled components.''

Fault Tolerance and High Availability

Jane pipes in, ''The on-premises environment scaling is a big task, and normally it is in two directions, only up and out. What about fault tolerance and high availability? Traditional applications already address this point through the use of exceptions, so what's new in the cloud environment?''

Teresa explains, ''Imagine a situation where a server is experiencing high CPU usage and therefore is unable to handle new requests. The cloud environment allows launching a new application server automatically. Another situation might occur when a component of your application becomes unresponsive. The cloud environment ensures that the remaining parts are still available.''

''I can see that this is also connected to the previous considerations,'' Jane responds.

''You are right. So, for example, if you don't design loosely coupled components, then you won't benefit from the auto-scaling and high-availability.''


''What about multitenancy? This concept is well established for on-premises development.'' Jane inquires.

''Right. But it is extended in the cloud environment which is based on shared resources. This model is even enhanced with the advanced security features available for the service consumers.'' Teresa replies.

To unlock this lesson you must be a Member.
Create your account

Register to view this lesson

Are you a student or a teacher?

Unlock Your Education

See for yourself why 30 million people use

Become a member and start learning now.
Become a Member  Back
What teachers are saying about
Try it risk-free for 30 days

Earning College Credit

Did you know… We have over 200 college courses that prepare you to earn credit by exam that is accepted by over 1,500 colleges and universities. You can test out of the first two years of college and save thousands off your degree. Anyone can earn credit-by-exam regardless of age or education level.

To learn more, visit our Earning Credit Page

Transferring credit to the school of your choice

Not sure what college you want to attend yet? has thousands of articles about every imaginable degree, area of study and career path that can help you find the school that's right for you.

Create an account to start this course today
Try it risk-free for 30 days!
Create an account