I finally managed to attend a London CloudCamp last Thursday, which conveniently co-incided with a #storagebeers evening. For two hours of listening to the collective wisdom of the presenters and the “unpanel” we were offered free beer and food. Now free beer is good, however I’m not sure it’s good enough to make me want to listen to yet another presenter confuse Cloud with Virtualisation. This may have been a genuine misunderstanding, however it may also have been quite deliberate, as the speaker in question works for a VMware partner. However moving on, here’s what I think Cloud is, should be and will be.
My Cloud View
Cloud is not virtualisation. Virtualisation is virtualisation. It’s a way of consolidating the physical entities we know today and making them available in the same manner in a virtualised form. Moving 1000 Windows servers to 1000 virtual machines changes nothing. You’re still offering IT to customers in the same way – using the concept of that physical entity called a server. This is a step forward in reducing cost, but not in delivering cloud.
Cloud today is a hybrid of two things; virtualisation & services and service abstraction. In the first form, Amazon, Rackspace and the others are offering the same physical objects (i.e. servers) but packaged nicely so they can charge you efficiently for them. What makes this kind of environment a step above virtualisation is that you have no view, concern or interest in how, where or by whom those servers are being provided as long as they meet your requirements for security and availability. The hosting company is effectively offering you elasticity over and above the basic virtualisation offering you could achieve yourself. If you need more compute, then they guarantee to provide it and they manage the pain of ensuring resources are available. Second, is service abstraction; some things are non-server dependent. For instance; generic databases or email outsourcing. The hosting company offers you a service, rather than a virtual device. This leads on to the next step; what Cloud will be in the future.
To see what Cloud Computing can offer, we need to move forward away from the fixed view of infrastructure and start thinking about data and applications. In the future I want to move away from thinking about fixed data types like files and block devices and think about objects and metadata. These objects need to be modifiable in a way that gives me consistency, so if I lose a node, or device that’s processing the data, I can recover it from elsewhere and continue working. I want to process my data in parallel and without geographic constraints, so I can run or move my workload anywhere; presumably to the provider who is offering me best price on that day.
The treatment of data in this form means I need to rethink how applications are written. I can’t rely on a simple client-server hierarchical architecture but need to move to one where my processing and data is distributed.
Re-writing distributed applications will be the hardest part of delivering Cloud Computing.
Application development in a completely distributed environment creates significant challenges. Here are a few of the most obvious issues;
- How do I ensure consistency (multiple updates in multiple locations)?
- How can I manage performance?
- How can I move my data around easily and quickly?
- How can I back my data up?
- How can I move my application and/or data to make best use of cost savings?
- How can I ensure my data remains secure?
The ultimate Cloud Computing model needs to remove almost all the aspects of infrastructure structure we know today (server types, storage arrays, block devices, NAS) from the customer. It will offer abstracted programming concepts – store, retrieve, search, update – to process data. Customers will be charged for their consumption of these resources. Abstraction will allow applications to be run on (almost) any environment. These services will still be delivered on infrastructure, but we won’t care or need to care what it looks like. Now there’s a challenge…