Is application portability possible in the cloud?
As companies try to get a handle on the costs involved in running data centers. In fact, this is one of the primary reasons that companies are looking to cloud computing to make the headaches go away. Like everything else is the complex world of computing, clouds solve some problems but they also cause the same type of lock-in problems that our industry has experienced for a few decades.
I wanted to add a little perspective before I launch into my thoughts about portability in the cloud. So, I was thinking about the traditional data centers and how their performance has long been hampered because of their lack of homogeneity. The typical data center is filled with a warehouse of different hardware platforms, operating systems, applications, networks – to name but a few. You might want to think of them as archeological digs – tracing the history of the computer industry. To protect their turf, each vendor came up with their own platforms, proprietary operating systems and specialized applications that would only work on a single platform.
In addition to the complexities involved in managing this type of environment, the applications that run in these data centers are also trapped. In fact, one of the main reasons that large IT organizations ended up with so many different hardware platforms running a myriad of different operating systems was because applications were tightly intertwined with the operating system and the underlying hardware.
As we begin to move towards the industrialization of software, there has been an effort to separate the components of computing so that application code is separate from the underlying operating system and the hardware. This has been the allure of both service oriented architectures and virtualization. Service orientation has enabled companies to create clean web services interfaces and to create business services that can be reused for a lot of different situations. SOA has taught us the business benefits that can be gained from encapsulating existing code so that it is isolated from other application code, operating systems and hardware.
Sever Virtualization takes the existing “clean” interface that is between the hardware and the software and separates the two. One benefit of fueling rapid adoption and market growth is that there is no need for rewriting of software between the x86 instructions and the software. As Server virtualization moves into the data center, companies can dramatically consolidate the massive number of machines that are dramatically underutilized to a new machines that are used in a much more efficient manner. The resultant cost savings from server virtualization include reduction in physical boxes, heating, maintenance, overhead, cooling, power etc.
Server virtualization has enabled users to create virtual images to recapture some efficiency in the data center. And although it fixes the problem of operating systems bonded to hardware platforms, it does nothing to address the intertwining of applications and operating systems.
Why bring this issue up now? Don’t we have hypervisors that take care of all of our problems of separating operating systems from applications? Don’t companies simply spin up another virtual image and that is the end of the story. I think the answer is no – especially with the projected growth of the cloud environment.
I got thinking about this issue after having a fascinating conversation with Greg O’Connor, CEO of AppZero. AppZero’s value proposition is quite interesting. In essence, AppZero provides an environment that separates the application from the underlying operating system, effectively moving up to the next level of the stack.
The company’s focus is particularly on the Windows operating system and for good reason. Unlike Linux or Zos, the Windows operating system does not allow applications to operate in a partition. Partitions act to effectively isolate applications from one another so that if a bad thing happens to one application it cannot effect another application. Because it is not possible to separate or isolate applications in the Windows based server environment when something goes bad with one application, it can hurt the rest of the system and other application in Windows.
In addition, when an application is loaded into Windows, DLLs (Dynamic Link Libraries) are often loaded into the operating system. DLLs are shared across applications and installing a new application can overwrite the current DLL of another application. As you can imagine, this conflict can have really bad side effects. .
Even when applications are installed on different servers – physical or virtual — installing software in Windows is a complicated issue. Applications create registry entries, modify registry entries of shared DLLS copy new DLLs over share libraries. This arrangement works fine unless you want to move that application to another environment. Movement requires a lot of work for the organization making the transition to another platform. It is especially complicated for independent software vendors (ISVs) that need to be able to move their application to whichever platform their customers prefer.
The problem gets even more complex when you start looking at issues related to Platform as a Service (PaaS). With PaaS platform a customer is using a cloud service that includes everything from the operating system to application development tools and a testing environment. Many PaaS vendors have created their own language to be used to link components together. While there are benefits to having a well-architected development and deployment cloud platform, there is a huge danger of lock in. Now, most of the PaaS vendors that I have been talking to promise that they will make it easy for customers to move from one Cloud environment to another. Of course, although I always believe everything a vendor tells me (that is meant as a joke….to lighten the mood) but I think that customers have to be wary about these claims of interoperability.
That was why I was intrigued with AppZero’s approach. Since the company decouples the operating system from the application code, it provides portability of pre-installed application from one environment to the next. The company positions its approach as a virtual application appliance . In essence, this software is designed as a layer that sits between the operating system and the application. This layer intercepts file I/O, shared memory I/O as well as a specific DLL and keeps them in separate “containers” that are isolated from the application code.
Therefore, the actual application does not change any of the files or registry entries on a Windows server. In this way, a company could run a single instance of the windows server operating system. In essence, it isolates the applications, the specific dependencies and configurations from the operating system so it requires fewer operating systems to manage a Microsoft windows server based data center.
AppZero enables the user to load an application from the network rather than to the local disk. It therefore should simplify the job for data center operations management by enabling a single application image to be provisioned to multiple environments- enabling them to keep track of changes within a Windows environment because the application isn’t tied to a particular OS. AppZero has found a niche selling its offerings to ISVs that want to move their offerings across different platforms without having to have people install the application. By having the application pre-installed in a virtual application appliance, the ISV can remove many of the errors that occur when a customer install the application into there environment. The application that is delivered in a virtual application appliance container greatly reduces the variability of components that might be effect the application with traditional installation process. In addition, the company has been able to establish partnerships with both Amazon and GoGrid.
So, what does this have to do with portability and the cloud? It seems to me that this approach of separating layers of software so that interdependencies do not interfere with portability is one of the key ingredients in software portability in the cloud. Clearly, it isn’t the only issue to be solved. There are issues such as standard interfaces, standards for security, and the like. But I expect that many of these problems will be solved by a combination of lessons learned from existing standards from the Internet, web services, Service Orientation, systems and network management. We’ll be ok, as long as we don’t try to reinvent everything that has already been invented.