Cloud Development: Creating Services to Run in a Cloud Environment
Learn how to create services that can be run in a cloud environment. Running in the cloud allows you to start quickly, with minimal expenses and lots of flexibility.
by Guest Author
Mar 26, 2013
Page 1 of 3
By Jos Dirksen
Running in the cloud allows you to start quickly, with minimal expenses and lots of flexibility. This article based on chapter 6 of SOA Governance in Action shows how you can create services that can be run in a cloud environment.
Suppose your company defines a policy that it should be possible for their applications to run in the cloud. Before we look at this policy, and show you an example of how you can create a service that can run in the cloud, we'll look a bit closer at what running in the cloud means.
When we talk about cloud computing, we usually mean that instead of accessing computing resources (for example, CPU and storage) locally we access them remotely. For instance, we can create a set of services, deploy those to a cloud provider, and this provider will make sure enough CPU, IO, and storage is available for our services. The big advantage of this model is that you, as a company, don't have to make big investments in hardware and datacenters. You can use the resources from your cloud provider and don't have to worry about adding extra hardware when the number of consumers grows. Besides this, an added advantage is that with most cloud providers you only pay for what you use. So, running in the cloud allows you to start quickly, with minimal expenses and lots of flexibility.
Different types of cloud services
There is a lot of talk about running services in the cloud, but this doesn't mean you can just select one of the cloud providers, upload your service and it will work. We have to make sure we select a cloud provider that offers the functionality we need. If we look at the cloud providers out there, we can divide these into three distinct categories:
Software as a Service (SaaS) -- When you use a SaaS environment, you get access to a full application or service hosted somewhere online. You don't deploy your own applications or services on this cloud but make use of what is offered by the SaaS provider. Google Docs, SalesForce, and Office 365 are all examples of SaaS.
Platform as a Service (PaaS) -- If we want to deploy our own applications, we might use a PaaS. With a PaaS, you are offered a complete computing platform or software stack that you can use to create your own applications and services. Google Apps, Amazon AWS, Microsoft Azure, and many more, provide this service.
Infrastructure as a Service (IaaS) -- Finally, we have IaaS. This service provides computing infrastructure such as CPU resources, datastorage and network IO. Often PaaS makes uses of the services provided by IaaS. There are many IaaS providers: cloud.com, Rackspace, Amazon and HP to name but a few.
As we're looking for a platform to run services on, we'll focus on PaaS. We aren't interested in using computing resources or already available software services such as SalesForce. Since we'll be deploying services, we need to take governance into account. If we want to run a service in the cloud, we have to closely look at the features and functionality provided by a specific provider. Next, we show an overview of what to look for in your cloud provider.
Requirements for the cloud provider
There are many cloud providers available. On the one hand, you've got very specialized cloud providers that offer computing resources for CPU-intensive tasks to analyze complex mathematical problems. On the other hand, you've got general cloud providers that offer complete software stacks with which to build your applications. This makes choosing the correct cloud provider for your specific requirements rather hard. The following list shows a number of requirements that can help you to determine which cloud provider to use:
Functionality -- Not all cloud providers offer the same functionality. Some might only offer computing resources, while others offer a complete software stack. When looking at a possible cloud provider, determine the functionality you need. Do you need an online database, email functionality, or maybe a messaging system? Try to find one that covers all these requirements. If you can't find one, try to find a few that can integrate well with each other.
Software stack -- Not all services are created using the same technology. You could just as well be developing in Java, .NET, Ruby, Python, Scala, or something else. When choosing a cloud provider, look for one that supports your development stack and, if it offers additional features (for example, key/value based storage), look for one that provides an API in your language.
Portability of data -- When you run your services in the cloud and use of the storage options provided by the cloud, make sure this provider allows you to easily export your data.
Scalability -- An important advantage of using a cloud provider is that you don't have to worry about adding extra resources when your application grows. When looking for a cloud provider, look for one that provides transparent scalability. Should your resource requirements grow, the cloud provider should automatically be able to scale up. If your resource requirements are lower, than the cloud provider should scale down.
Data security -- When you use a cloud provider, you store your sensitive information in the cloud. This data might even be stored in a different country. When selecting a cloud provider, make sure that the data security options provided by this provider match your and your customers' requirements.
Backup policy -- If you use the cloud platform for storage, it's important to determine the backup policies of the cloud provider. Do they back up the data regularly, are databases replicated, and do you have the control to restore backups yourself?
Manageability -- The cloud platform should be easy to manage. There should be a management interface with which you can easily see the resource usage of your services and add extra functionality. Besides this, you should also be able to easily view the logging and audit records for your application.
Cost -- Cost is always an important factor. Look at what you have to pay for the services offered. Is there a minimum price you have to pay each month? Does your average price go down when you use a lot of resources?
Now that we've got a set of requirements we can use to determine a cloud provider, let's look at how to run one of our examples in the cloud. For our example, we'll use Amazon AWS. Amazon provides an easy-to-use cloud environment with all the features we require for our architecture. The Amazon AWS environment is also free to use the first year. If you want to use the Amazon cloud, you have to register an account. An account can be created from http://aws.amazon.com/. After you've created an account, you would set up the AWS environment we use for testing.