2.3 Summary
3.1.3 Cloud Applications Requirements
Characterization should not be limited to building blocks of the application. It should also consider the applications’ requirements and feature that can affect the application’s behavior (e.g., Distributed, Real-Time, Embedded), and its lifecycle. The following are some of the requirements that should be satisfied in order for an application to be considered a cloud application:
• Req1: Self-aware: A cloud application should be aware of the following: (i) Its architecture (i.e., Tasks and relationships diagram).
(ii) Its resource requirement (i.e., the required resources to successfully deploy the application on any platform).
(iii) Its status (the runtime model and the configuration under which it is currently running).
(iv) Its service level operational requirements e.g., (desired required availability, scal- ability and performance).
(v) Its cost model constraints and status.
(vi) Its location: In order for the cloud application to support high-availability and automatic failure recovery, the cloud application architect should have the abil- ity to decide how the different component instances should be distributed on different fault domains. For example, depending on the availability level re- quired the architect should be able to decide whether the different instances of a certain component should be located in the same datacenter, or distributed across different geographical locations (regions).
• Req2: Malleable: A cloud application should have the ability to be composed from components that can be reused, re-combined, and re-configured. These units of composition should:
(i) Follow microservices architecture style [151]. This means that it should be possible to partition the application into fine-grained services. Each service perform one task.
(ii) Components should use smart endpoints that embed the logic of communica- tion (i.e., naming, discovery, and connectivity) within the endpoint to remove dependency on the infrastructure connections (pipes) (e.g., Enterprise Service Bus (ESB)).
(iii) Building asynchronous communication wherever possible in the application ar- chitecture would allow for loose coupling amongst components. Asynchronous behavior is at the heart of cloud native applications.
(iv) Components should use standardized interface to facilitate automating the pro- cess of establishing communication between the components. This makes it easy to build configurable workflow applications. Today, the most common APIs in the cloud are the REST based or RESTful APIs. This is because REST APIs use the standard HTTP methods (i.e. GET, PUT, POST, DELETE, etc.) to standardize the way services and resources are exposed to the user.
• Req3: Self-adaptive: A cloud application should have the ability to utilize the re- siliency and autonomic capabilities of its underlying platform. Accordingly, it should have the ability to specify policies, constraints, rules and actions to maintain its behavior under various condition, scenarios and environments.
• Req4: Multi-Cloud : A cloud application should be architected from platform inde- pendent components that can run in the same way on different platforms. It should also have the ability to run and migrate at runtime from one platform to another, and between on-premises and off-premises environments.
• Req5: Multi-Tenant : A cloud application should support a hybrid (single/multi) tenancy model at the component level granularity. Multi-tenancy is the ability of a component to be shared with multiple users by having a single logical instance of that component. On the other hand, single tenancy allows creating several logical instances of the same component, one for each user. Supporting a hybrid tenancy architecture at the component level provides flexibility of choice for the developers and architects, as they can select the tenancy model that fits their application. This
process can be done for each individual component and at any of the software archi- tecture tiers (i.e., presentation, business logic, and data storage). For example, for components that have high-demand and require high-performance each user can have a separate instance of the component; in contrast, the same instance can be shared between multiple users to allow full utilization of the resources when demand is low. Enabling a hybrid tenancy model is a prerequisite feature to support both dynamic elasticity and high availability.
• Req6: Manageable: Cloud applications should provide management interfaces that allow monitoring the applications and changing their properties at runtime. This is an important prerequisite to automate the applications lifecycle management, and support the applications self-adaptivity.
• Req7: Measurable: Cloud applications should provide mechanisms to quantify the resources they use. This is important for the cloud application to support the dy- namic price models, as well as testing and monitoring.
• Req8: Distributed at the enterprise levels: A cloud application is a distributed ap- plication. It supports distribution at the presentation level, the business logic level, and the data level. At the presentation tier, a load balancer handles the distribution of requests into a number of distributed web tasks, which process the requests, then assign jobs to the appropriate background (business logic) task. Usually a cloud ap- plication performs jobs that can be divided into a number of atomic tasks (workloads) that can be processed in different machines and then accumulated. Finally, at the data tier, a cloud application can make use of distributed cloud storage (i.e., blobs, tables, queues) to support fault tolerance and availability, while maintaining eventual consistency. These distribution capabilities are what make a cloud application highly available and elastic.
• Req9: Accessible through web-enabled interface: Each application should have at least one web-enabled endpoint . Having a web-enabled interface does not mean that the application should be publicly accessible from the internet, but instead it should be enabled to be widely accessible whether this is through intranets, extranets, or the internet.
• Req10: Has the capability to be upgraded modified and updated with minimal service interruption: Cloud applications should provide mechanisms that allow tracking the location of each component, and group related components within the same update- domain, as to be updated or modified at the same time.
By satisfying the previous requirements the cloud application will comply with the cloud computing’s main characteristics previously defined by NIST. The cloud application will be available, support fault tolerance, scalable on-demand, and elastic. A cloud application is an application that supports reuse of software services and components with affordable prices based on a pay-per-use model. On the other hand, if an application does not utilize the cloud computing infrastructure or platform,then this application cannot be called a cloud application.
Note that many of the cloud application characteristics are shared with existing paradigms, such as real-time, service oriented, and distributed computing. What is unique about cloud computing is its ability to combine all these paradigms and provide simple and efficient reuse mechanisms. These mechanisms allow users to get the intended benefits from the existing technologies with minimal efforts and basic knowledge of technicalities.
In a nutshell, a cloud application is a special Service Oriented Architecture (SOA) appli- cation that runs under a specific environment (the cloud environment). This environment is characterized by horizontal scalability, rapid provisioning, ease of access, global reach, high-availability, and so on. Cloud applications share lots of concepts with SOA such as: focusing on reusability at the large scale, creating applications by composing pre-existing autonomous components, and focusing on evolution. However, being a specific case of SOA applications mandates addressing the Cloud domain specific issues and variations. The relationship between cloud applications and SOA is similar to the relationship be- tween Web-Services and SOA; both can be considered as SOA implementations. However, cloud applications are more generic than Web-Services. In fact, Web Services are a type of cloud application services. The detail of the relationships between cloud computing and the paradigms it has evolved from is explained in detail in the background chapter.