First off, I wanted to thank VMware for giving my blog post a home last week. I appreciate the feedback we recieved from the article - we're looking forward to working with VMware on a blog series coming up!
I focused a lot on the pragmatic last week; now my brain has bounced the other way and started to wonder about what managed cloud hosting will look like in the future. Today there is a huge amount of interest from enterprises in leveraging Infrastructure as a Service in order to have a more agile datacenter without the capital expense, but what will be the next big thing?
Currently bubbling up from the cloud crowd is a lot of interest in upcoming Platform as a Service offerings that are increasingly vendor-agnostic with a wide range of supported languages and frameworks. CloudBees RUN@cloud promises to be the PaaS to watch in 2011, especially considering how well the team has done in implementing continuous integration services with cloud technology. VMware's OpenPaaS initiative might be interesting as well, judging by their announcement at RubyConf. Still, I have to wonder if building PaaS as a layer on top of IaaS is the way to efficiently architect a Platform as a Service solution.
Bare-metal hypervisors, like VMware's ESXi, provide hardware and even processor architecture abstraction to the virtual machine it hosts. Traditionally a VMware BIOS bootstraps a guest operating system within a virtual machine, then we install a software stack into that guest operating system. For example, we may create a virtual machine within ESXi and install RedHat Enterprise Linux 6. After the machine is built we may install our runtime environment, maybe the frameworks and libraries to host a vFabric application. Then we install our own application running with tcServer, tweak configuration files and hook it up to our deployment scripts. True, we can do this setup once and then save this application as a vApp for future use, but we consume a lot of memory, compute and (especially) disk space for the guest OS, runtime environment and framework libraries.
What if we removed the guest OS setup, BIOS and runtime environment installation? What if we ran our runtime environment directly within the hypervisor, bypassing the OS and going straight to the cloud computing infrastructure itself? The Java runtime environment itself runs within a self-contained virtual machine of its own - does it need an OS to add another layer of abstraction?
Work already done by IBM, BEA and Sun have demonstrated a Java runtime that interacts directly with the hypervisor can yield significant gains. BEA (and now Oracle) provide a way for the JRocket JVM to skip the OS entirely by using LiquidVM and WebLogic Suite. IBM had a slightly different route with Libra, creating an isolated execution environment that could host a Java virtual machine. In my mind the ultimate solution was Sun's Project Guest VM, allowing the JVM to sit entirely on the hypervisor with no operating system at all... only a microkernel augments the Java virtual environment. The VM itself is entirely written in Java, allowing for a highly optimized Java runtime residing within a cloud computing infrastructure.
Imagine if you no longer deployed "Windows" or "Linux" virtual machines with our cloud technology - but could deploy "Windows," "Linux," "Java 6 EE," ".NET Runtime" or "Python" as stand-alone VMs. No OS tweaks, no hacking of open file handle limits, but instead a very thin virtual machine instance that is 100% dedicated to running your application. Managed cloud hosting providers could then augment this stack with their own specialized tools for automated deployment, monitoring and security policies.
The possibilities for such a cloud computing platform go beyond just making applications easier to deploy and more efficient to execute. We can move away from worrying about hardware drivers and chipsets... our hypervisor and the new virtual machines worry about that for us. Now that we've sufficiently abstracted away the underlying physical infrastructure we can change the hardware architecture completely. Why not ditch your conventional CPUs and now accelerate our code by adding hardware for more efficient vector processing? NVIDIA is already creating "GPU clusters" so that one can have their own cloud-based super computing instances, allowing for certain types of algorithms and applications to reach unthought levels of performance and power efficiency. Why not tune the Java or .NET runtime environment to take advantage of GPU clusters as well and allow cryptographic or streaming operations to run at insane speeds?
With this type of bare-metal PaaS you can save massive amounts of disk storage, since you no longer need the entire operating system just to host an application. VMs that once needed 8 GB disks could now live inside of 256 MB, possibly less if you leverage SAN de-duplication or virtual disk technologies like linked clones. Memory overhead would be reduced, since you only need enough memory to keep your application running. Compute could not only be augmented to crazy-fast levels, it could also run with much less power consumption. Application developers also have less infrastructure to deal with, allowing them to focus on their application rather than supporting the layers the application runs on top of.
If 2011 shapes up to be the year of the PaaS, I can only hope 2012 is the year we blur the lines between IaaS and PaaS. With bare-metal PaaS, cloud technology could give every hosted application their own supercomputer.