Java Cloud Development: What Developers Need to Know
If you are a Java developer and your organization is jumping on the cloud computing bandwagon, you have to change the way you build and deploy applications. In this article, I will examine what is in store for you with each cloud delivery model and with both public and private cloud scenarios.
Cloud Computing Delivery Models: IaaS, PaaS and SaaS
The delivery model for cloud infrastructure can be broadly categorized as Infrastructure as Service (Iaas), Platform as a Service (PaaS) or Software as a Service (SaaS).
Infrastructure as a Service (IaaS)
Cloud computing vendors provide infrastructure services such as computers, storage devices, and routers to deploy your application. This is a not a very new concept. Web hosting companies such as GoDaddy have been providing infrastructure to host websites to small and medium-sized companies for more than a decade. However, this is becoming mainstream for internal enterprise applications. Companies such as Amazon, Rackspace, Microsoft and others are leading providers for IaaS. When you sign up for IaaS (e.g. with Amazon EC2), the cloud vendor will allocate a virtual machine for your use.
If you use Infrastructure as a Service, you may have to deal with installation and configuration of the software platforms such as application servers, databases, and so on. The cloud vendors provide tools to manage the infrastructure and provide options for elastic computing.
Most software vendors are working with cloud providers such as Amazon, Rackspace and coming up with machine images or appliances with pre-configured software platforms. For example, you can use a pre-built Amazon Machine Image for JBoss application server or Oracle WebLogic Server. You do not have to incur upfront costs for purchasing software and you avoid the mundane tasks of installation/configuration of the software. The cloud provider will charge you a fee based on the real usage of resources such as CPU, bandwidth, number of users, and so on.
Platform as a Service (PaaS)
The cloud vendor provides the application platform such as middleware, database, messaging system, and so on. You have to use your development tool s remotely to leverage the services offered by the cloud vendor. This frees companies to worry about computing resources, tracking licenses, cost of installation and configuration/administration of software. This is gaining popularity and there are several vendors that provide Platform as Service (PaaS).
Some examples of PaaS are Salesforce.com's Force.com platform, Google App Engine, VMForce (jointly launched by Salesforce.com and VMware) and Microsoft's Windows Azure platform. This aspect of cloud computing is very disruptive in nature and is going to impact Java developers the most. I will examine this in detail later in this article.
Software as a Service (SaaS)
This is the most popular aspect of cloud computing and has been for more than a decade. A SaaS provider offers software/application hosted in the cloud. Some examples are Salesforce.com CRM, Workday HRMS, GoogleApps, and BMC's RemedyForce. SaaS is primarily targeted to reduce total cost of ownership by avoiding expensive cost of development, deployment and maintenance, and so on. SaaS completely avoids having an internal IT infrastructure; the SaaS vendor takes the responsibility to ensure availability, scalability, security and performance of the applications. If SaaS is widely deployed and successful, then it will have great impact on the developer community. No IT organizations will require developers to build new applications--only the SaaS vendors!
Types of Cloud: Public vs. Private
Cloud infrastructure can be categorized based on the target user community. If the cloud infrastructure is open to everyone and is shared by a large number of customers, then it is referred to as a public cloud. The cloud infrastructure provided by Amazon, Google, Rackspace, Salesforce.com and Microsoft are examples of public clouds. Some IT organizations are adopting a cloud computing model inside their organization to serve their internal users. These kinds of clouds are being referred to as private clouds. A private cloud could be hosted inside an IT organization or a cloud vendor such as Rackspace can customize a part of their infrastructure for a specific company. A private cloud helps an IT organization to offer itself as a service to business users.
The concept of community cloud is gaining popularity. It is meant to service a known set of customers instead of being open to everyone. The community cloud will help share the cloud infrastructure between multiple companies and hence share the cost based on their usage.
The most interesting aspects of these will be the usage of the hybrid cloud. For example, you want to use a Java application deployed in a public cloud that accesses a database running on-premise or in a private cloud environment.
Using IaaS for Java Development
Using IaaS may not change your life drastically and may actually make it better. Most of us struggle to find computing resources in our IT organizations during development or testing. Cloud computing can make your life easier by providing a self-servicing model. If you sign up to use a public cloud, your cloud vendor provides tools to start and configure a virtual machine. For example, Microsoft Azure allows users to use remote desktops to connect to the virtual machine. You can choose to use your virtual machine however you want to.
Cloud management vendors such as VMware and BMC are providing infrastructure to manage, provision and configure virtual machine instances in a private cloud environment. They provide features such as a self-service portal to provision a new virtual machine instance.
Following is a screenshot of BMC Software's self-service portal for creating and managing virtual machine instances.
If you do not want to worry about installation and tracking licenses of your software while using a public cloud, then you can use a pre-configured virtual machine image or appliance provided by your vendor.
For the private cloud, your IT administrators have to create their own virtual image instance or use one provided by software vendors. For example, Oracle is providing virtual appliances for their software at that can be used with their private cloud infrastructure.
Here is an example of VMware's vCloud Director Product, which provides self-service capability to start a pre-configured virtual machine with a specific software stack.
Some cloud management software such as BMC Software's allows extending your virtual infrastructure with an application stack. For example, you can add LAMP or a Java stack to your virtual machine when you are trying to configure using a self-service portal.
This private cloud greatly reduces the pain of acquiring hardware, installing of pre-requisites and the software each time you need an infrastructure for developing or testing an application.
Similar to the pay-per-usage concept, the private cloud management vendors are providing capabilities such as billing and charge-back to internal business units within an organization based on their usage.