The term cloud computing is used for a new service model that allows a client to scale or decrease resources rapidly to an application, without the need of investing on new infrastructure.
On this post we present the architecture viewpoints, you need to understand when you are designing a product that will leverage cloud resources. This post is the second of four post series. You can read our introduction post here
A Software Architecture presents a blueprint that allow us to understand the system design, the functional and quality attributes. Cloud computing architecture can be divided on two major viewpoints: 1)service models and 2)deployment models. The infrastructure architecture depends on the cloud computing providers. i.e. Google defines how there servers are design and deploy to support the cloud services.
The service models are the different approaches the services are provided to the final user. What level of configuration the user is allow to handle the infrastructure. This models are provided since the users could need simply check their email, or actually have a server on a data center to provide its own email software.
1 – Software as a service (SaaS)
This model provides production applications that can be used by companies or individuals. Applications such as email, CRM’s can be provided without you needing to know anything about the infrastructure that supports it. In general this model has a low price, and requires low configuration, since usually are services provided by applications that have very standard processes.
2 – Platform as a service(PaaS)
PaaS is a model for tailored software developed by the client using the provider tools, frameworks and languages. The user in most of the cases is not aware of the infrastructure used to support its solution. Google App Engine ,IBM Bluemix and Microsoft Azure provide its own PaaS model for developers, so they can use and create apps that can be quickly scalable. PaaS major disadvantage is portability, even though the apps are developed using major languages such as Java and C#, to mention a few, port from one system to the next will be highly complex.
3 – Infrastructure as services(IaaS)
Lastly we have IaaS, that allows the user to provision detailed resources to be used by the software, such as CPU, RAM memory, storage and so on. Even though you can not actually setup the infrastructure, you can modify the resources you are using. On IaaS you can set your own OS and the services that are running on it. The most common IaaS provider is Amazon Web Services which has build a set of tools to allow server administrators to provide fast and scalable applications. IaaS can be complex to setup and run, however provides the flexibility and portability from developing local applications to cloud apps using whichever OS, frameworks and other technologies the client requires.
4 – Bare Metal Servers
Even though this is no usually included into the service models, we include Bare Metal Servers witch are physical servers. The servers usually can be configure as needed and be rented by month. Usually This type of service is selected when you required intensive workloads processes and you don’t want to pay by bandwidth or hours used on the month.
The deployment models are differentiated by the physical location and configuration. The most common cloud deployment models are: 1) Public, Private and Hybrid Cloud models.
1 – Public Cloud
This is the most common model that has leverage the scale economy. Allowing providers to standardize better services to thousand of users for lower prices. The services are public for any user that need the services. The most common challenge for this type of deployment is security, each user has to manage and assure the security of its information.
2 – Private Cloud
The private cloud is handle usually by an organization on its own data center or a third party. The challenge for private clouds usually is to scale beyond the size of the data center and off course the high costs.
3 – Hybrid Cloud
This last deployment model leverages the problems of both the public and the private cloud. The data is usually stored on the private cloud for security reasons, and the public cloud is use for high scalability purposes.
Each service and deployment model have its own benefits and challenges. The prices, the computing speed and power, the reliability, scalability and many other quality attributes are highly different. Since these options provide us with a high variability of options. It is up to the Cloud Software Architect to choose the correct model for a specific project.