5. Cloud computing architecture:
Understanding the cloud components may enable creative solutions to common cloud computing problems like availability, application migration between cloud offerings, and system resilience. an ontology of cloud computing will allow better understanding of the inter-relations between the different cloud components, enabling the composition of new systems from existing components and further re-composition of current systems from other cloud components for desirable features like extensibility, flexibility, availability or merely optimization and better cost efficiency. Understanding the implications of developing cloud applications against one cloud layer versus another will equip developers with the knowledge to make informed decisions about their applications’ expected time-to-market, programming productivity, scaling flexibility as well as performance bottlenecks. In this regard, an ontology can facilitate the adoption of cloud computing.
The architecture of cloud computing is divided into different layers based on composability. Each layer encompasses one or more cloud services. Cloud services belong to the same layer if they have equivalent levels of abstraction, as evident by their targeted users. For example, all cloud software environments (a.k.a. cloud platforms) target programmers, while cloud applications target end users. Therefore, cloud software environments would be classified in a different layer than cloud applications. Moreover, one cloud layer is consider to be higher in the cloud stack, if its services can be composed from the services of the underlying layer. Consider the cloud application layer as an example. Since we can develop cloud applications using cloud software environments, we say that cloud applications are composable from cloud software environments, and that the cloud application layer is higher in the cloud stack.
However, cloud architecture can be divided into 4 general layers that maps to the available business models those: the hardware/ datacenter layer, the infrastructure layer, the platform layer and the application layer. For research and developing purposes, each layer can be divided into sub layers as assumed by Youseff et al.  That: hardware, software kernel, software infrastructure, software environment, and applications. Other approaches assumes networking, storage, servers, virtualization, operating system, middleware, runtime, data, and application.
Infrastructure is the lowest layer and is a means of providing processing, storage, networks, and other fundamental computing resources as standardized services over the network. Servers, storage systems, switches, routers, and other systems handle specific types of workloads from batch processing to server-storage augmentation during peak loads. Cloud providers’ clients can deploy and run operating systems and software for their underlying infrastructures. The middle layer provides higher abstractions and services to develop, test, deploy, host, and maintain applications in the same integrated development environment. This layer provides a runtime environment and middleware to deploy applications using programming languages and tools the cloud provider supports. The application layer is the highest layer and features a complete application offered as a service. Figure 1 shows a cloud infrastructure’s general layered architecture, with the additional user interface layer, which enables seamless interaction with all the underlying everything-as-a-service layers.
 L. Youseff, M. Butrico and D. D. Silva, “Toward a Unified Ontology of Cloud Computing,” in Grid Computing Environments Workshop, 2008. GCE ’08, Austin, TX .