Wednesday, May 6, 2009

Playing with the Cloud

This post is a work and progress and will be updated periodically to reflect industry trends and new methodologies . . .

In general a cloud is the abstraction of a variety of networked services to be used in a generic fashion by many different applications, desktops, etc.

Citrix has done some interesting things to express and extrapolate their cloud (C3) product for use by customers and allow use for labs and other items.  Right now, the cloud is a generic hypervisor layer teamed with some other resources to allow for more robust demonstrations with minimal effort.  Amazon is using the Xen Hypervisor in its EC2 offering, but has wrapped its proprietary tools around the infrastructure in order to monetize and control its generic infrastructure for its customers.  I have not yet seen nice tools to push VM formats in and out of this infrastructure for seamless migration between public and private clouds, but I am sure I am not the only one thinking of this automation.

Hierarchically, there are several layers to this approach (Citrix and Amazon):

Infrastructure as a service  (eg. Citrix C3)
Platform as a Service (eg. Citrix C3 labs)
Software as a Service  (eg. Citrix online --and I assume Dazzle) 

C3 is basically a branded bundle of Citrix Xenserver, Essentials and Workflow management used for creating a private cloud.  There is a cloud "bridge"  that is nomenclature for a bundle of Netscaler products with Wanscaler for acceleration between the corporate DC and the cloud itself . . . (public or private)

Now, the trick of setting up your own cloud and using it for real applicaitions is understanding the limitations and soft factors that will impact application performance and enduser experience for applications deployed within the cloud infrastructure.  There are "easy" applications to leverage cloud infrastructure, and there are difficult ones.  

In general, the deterministic factors in "easy" and "hard" come down to I/O and workload predictability.  Easy workload examples are stateless services and items like web services and applications.  Difficult items to deliver in a commoditized cloud are data services with transactional requirements that are very state or time sensitive. (like a big-ole Oracle DB.)

So, there are a number of tricks employed to make cloud management and workload management simpler as the challenges and demands on the cloud become more dynamic.  
lets take a nice example--  I have a lab environment that I can test in the Amazon cloud-- it involves a few machines running several windows hosts with Sharepoint and other services.  I can test a proof of concept of the interoperability and other items in the cloud, but as we near a production or "live" deployment of the architecture, I will need a different set of architectural elements in order to meet the enduser experience requirements:  with 10,000 users on the system, my I/O and backend storage requirements may explode in an unpredictable manner-- this may require that I deploy in my own cloud where I can scale the backend components that drive the enduser experience quality.  the reality really comes to economics . . .  I may be able to make production versions of the above exaple work in the cloud, but will it be cost effective versus the granular approach that I can take on my own?

Now, the realities of the industry are that the easy workloads can now be deployed in commoditized clouds, but difficult workloads like my example require more granular control.

The market is maturing however!   
Some interesting technologies that will enable this sort of difficult workload in commodity datacenters will include the following:
  1. Virtual Switching technologies in multi-tenent hardware environments (XenServer Vswitching, Cisco V1000 stuff as examples)
  2. I/O shaping and QOS to VMS
  3. Application security and workflow Management for provisioning service and migrating workloads depending on application workload across all factors that influence the application delivery.
  4. The ability to migrate workloads seamlessly between personal hypervisors, lab environments and private clouds.
Knowledge comes from experience, so you should get playing with this stuff now and see what the economics mean for you and your applications.

So, how the heck do I get started?  Well a couple of things you can do--
Go to the Amazon EC2 cloud and use your credit card to stand up some nice simple services that can be used to do simple demos.  Geek out!

If you happen to have some hardware sitting around, you can also create some things with your own hardware.
This might involve creating a pool of server resources with Xenserver locally in the most simple sense.

If you really want to make things work in an interesting fashion, workflow studio along with some automated provisioning would allow for some interesting use cases like watching server load on particular infrastructure elements, and then automating the start of more capacity based on increased requirements.

A truly automated environment could become quite complex, but the end result is automated simplicity once the market is mature and ready for your particular scenario.  I will be posting some details on how to set up application specific infrastructures in different clouds as we have more practical experience in this area . . . .