Many types of workloads can be hosted on the cloud. Making the right choices for the best way to run your particular workload on the cloud is critical to success. One fundamental type of workload is services that are consumed by other applications, and another type is applications for end users. The optimal approach depends on whether you're hosting an existing application or developing a new application. In this article, I discuss several types of cloud services and various approaches to hosting and maintaining them.
Cloud services may exist at different levels:
- Infrastructure as a Service (IaaS). Example: Object storage, where files can be stored in a cloud-based distributed file system.
- Platform as a Service (PaaS). Example: Data storage, which provides a similar service to object storage, but for a relational database.
- Software as a Service (SaaS). Example: Applications such as customer relationship management systems.
If you plan to host an existing application, you'll most likely need to provide the operating-level services for the application using IaaS, in order to be compatible with the requirements of running the application in a traditional environment. This will include customizing a virtual machine image with your application installed, and running one or more virtual machine instances of that image.
With an IaaS cloud, you still have to provide monitoring, backup, failover, load balancing, and other support for your hosted application, which can be a lot of work. Some features in IaaS cloud offerings assist in this area, such as the storage availability areas in IBM SmartCloud Enterprise, which can help with data backup. However, these are mainly tools for administration; as the IaaS cloud service user, you'll still be responsible for making the proper user tools for backup, monitoring, and so on. Management of these utilities is where PaaS can help.
PaaS provides a platform for running custom-developed applications. PaaS can save a lot on maintenance costs above the IaaS level for production applications, where availability and reliability are important. One challenge, however, is that many PaaS offerings require applications to be developed with proprietary languages, APIs, and data stores. That requirement can be a problem if your organization doesn't have the skills to use those proprietary technologies or doesn't want to be locked into a proprietary platform. Some PaaS services support standards such as Java 2 Enterprise Edition (J2EE) and SQL, which can make it possible to host well-behaved J2EE applications on the cloud.
You have the most freedom to build a cloud-centric application if you're developing a brand-new application. In that case, you can build a highly scalable application by using technologies such as MapReduce and NoSQL. In using those technologies, you need to have a specific mindset, which involves being tolerant of failure and relational inconsistencies. Certain kinds of applications, such as social networking applications, can be built with those technologies very successfully, but many applications cannot. In particular, business applications usually need relational consistency so that accounts balance, which means that NoSQL may not be appropriate in those situations. This requirement can make it challenging to be successful hosting traditional business applications with cloud-centric technologies, including clusters based on MapReduce and NoSQL.
Automation of cloud resource management can be relatively easy and provide the ability to scale quickly via cloud-management application programming interfaces (APIs). The most popular type of API in cloud computing is the Representational State Transfer (REST) API, because it can be used conveniently and securely over the Internet.