My first attempt at writing this article failed miserably, mainly due to the fact that I have been involved with so many virtualization projects over the years that my first crack missed the basic questions which the article aimed to answer: What is Virtualization? Why is this term important to you, your organization, and potentially the livelihood and success of your project? Why should you care? Or, should you care at all? Or better yet, under what basic scenarios should you care?
As an architect, system or software, virtualization is very important to the overall architecture of your project. The main question you are asking yourself is, “How can a virtualized [fill in the blank here] reduce the risk of project failure and better ensure on-time and on-budget delivery?” As developers, you need to be aware of this methodology and players in the market to better develop your application. The main question that you as a developer is asking yourself is, “Will virtualization save you development time and shorten your project life-cycle?”
Virtualization 101
Let me start with the basics for those who are not familiar with the concept of virtualization.
Computer Science theory 1: when in doubt, add [yet] another layer of indirection.
That is all that virtualization does. This is nothing new really. You see and practice this every day as professionals in the field, when you write code, when you are setting up a network, and so forth. Polymorphism is the perfect example of code-level virtualization. For those of us who still like to write code, the name Virtual Functions has a certain ring to it: It is a difficult but very powerful feature that, when used properly, can save lots of coding time. The fact is that everything you have known to be true is one or more layers of abstraction of the underlying pieces (in other words, virtualization). You have seen the ever-growing popularity of the Virtual Machines over the past decade. You are somewhat familiar with the concept, and some of us have actually used a Virtual Machine or two such as the Java Virtual Machine or the Microsoft Common Language Infrastructure.
The fact of the matter is that Virtual Machines have been around since the mid-70’s with the good-old IBM super computers (now known as the AS/400) having implemented one so that the software developed for the machine need not be tied to the proprietary hardware and processors of the time. Does this sound familiar to you? To me, that is exactly why the Java VM took off in the early 90’s. “Write once—run everywhere” was the motto, if I recall. The same applied with the creators of the OSI stack: virtualizing the physical layer, or the network layer, or now and days the virtualization of the transport layer with Web services. Having covered the basics, you can turn to something more practical and useful. Before you do that, I wanted to add one rather important point. Virtualization can occur for any number of reasons and ways. You can virtualize your storage, your database, your data, your computation and services, and so on. For the purposes of this article, I will simply refer to these as virtualization, and won’t distinguish one versus the other unless necessary.
Road to Service Virtualization
As you guess by now, the main goal of virtualization is simplification. Simplify access by users, simplify maintenance while in production, and simplify development for your developers. A service is a self-contained component, but what happens when you have a number of these services that need management and provisioning? As the number of these so-called services increase, so will your cost-of-ownership. One user might need a higher level of resiliency than others; one department might have a higher concern for security; the list goes on. How can you keep up with the demands of your users and still stay under budget? See how virtualization can help along this path.
The chances are that you have a number of services or better known as reusable software components running around your enterprise. As an architect, it is your desire to provide a one-stop access to these services, and maybe add a number of other ones as business requirements tend to change or grow. This will assist your developers with reducing their development cycle because they don’t have to re-invent the wheel at every turn anymore and can simply access a remote service. If this sounds like Web services and SOA, it is because it is! The concept behind Web services is virtualization: of network protocols, software components, service interface, and so on. Web services virtualize network protocols by the use of the SOAP protocol; they virtualize software components by the use of UDDI; they virtualize access and use of services by the use of WSDL. There are other requirements, however, that can make your job more difficult as an architect or a developer. Most of these requirements will be part of your Service Level Agreement (SLA) between you—the service provider—and your users [1].
What if you could have a manger process that has a number of nubs and buttons that you can turn and twist for each user so that you can keep up with the user’s demands? The users won’t notice anything other than the fact that they are getting what they were promised by the service provider. This manger could potentially have different settings for security, resiliency, and so on. The access to the service itself is abstracted or virtualized by this manger that sits in the middle of the user’s access to the service and the service itself. This service could simply be a database service, file storage service, a business process that is exposed as a Web service, or whatever else that you might need across your enterprise. The manger manages both the user and the service from a single point allowing you to gain access of your resources and usage.
There are a number of vendors that provide this manger-type that I just spoke about: DataSynapse with its GridServer product allows service virtualization like what you just learned, IBM and one of its many Websphere and messaging products virtualize hardware components such as servers, EMC virtualizes back-end storage systems, and VMWare virtualizes the OS layer along many others. The question becomes: What aspect of your enterprise needs virtualization and what is it that you are trying to achieve?
Directions to Service Virtualization
“You need to virtualize a resource if …” You have learned about the road to virtualizing services. The question that I have not yet answered is, “Why is virtualization important to me and why I should care?” Let me emphasize here that this discussion is not a discussion around buy versus build; that discussion would be after you have decided to move forward with virtualization. You can purchase an off-the-shelf product that virtualizes practically any component of your enterprise these days, or if you do not like what is out there, you can certainly take on the task of writing one of your own. Before any of that, however, you need to understand the reasons why.
To me, the reason is very simple. I need to answer the following two questions:
- Do I need sheer performance from that resource? If so, can virtualization assist with scalability or that resource is a single point of the bottleneck?
- How big of an issue is managing that resource to me? For example, do I have a team to manage a single resource and that team is under constant stress and I am still unable to meet my SLAs?
Remember that virtualizing a resource is essentially adding a layer of indirection to that resource. This layer of indirection adds overhead and could potentially slow access time. That is why one needs to determine, before moving forward with the virtualizing, whether performance is a concern and, if it is, how can virtualization assist with scalability? Remember that virtualization can assist you with things like load-balancing the access, so performance can certainly be gained by virtualizing a resource.
The bigger question for me is the management of that resource. If you are talking about Web services, I would like the option of deploying a service on the fly and still have the older versions of that service running. I like to have a single point of management and provisioning interface to look at what is going on in the enterprise and how my resources are being utilized. DataSynapse’s GridServer does exactly that for me. I can mange resources, services, users, and access by those users from a single console. TIBCO’s BusinessWorks (BW) does a very similar thing. It can mange my Web services and find out about my resources and access to those resources. BW also does a great job at virtualizing my services, and allows me to deploy Web services seamlessly throughout my enterprise.
Virtualizing a resource can be very useful, but by the same token it might be more than what you need. There are times that it is perfectly fine to be “tied” to the underlying OS or processor architecture. There are times that accessing a database directly is more appealing than having the access managed by a data-grid. The two questions that I mentioned in this section can get you started in figuring out whether virtualization is the way to go or not.
Service Virtualization thru Software
Software virtualization is more common these days than ever before. A Web server can be thought of as a component that virtualizes access to a set of services provided by the back end. Generally speaking, all software virtualization vendors work in the same manner, and differ only in the thing that they are virtualizing.
VMWare, for example, virtualizes the host operating system and the underlying hardware [1: http://www.vmware.com]. You can run your Windows applications inside a Virtual Machine (VM) that is running on a host machine running Linux. Virtualizing the Operating System (OS) is a very powerful and useful thing to do. If you need to provide remote access of local resources within your enterprise to your employees, you can use a product like VMWare to do so as shown in Figure 1.
Figure 1: Providing remote access of local resources within your enterprise to your employees.
In this figure, users gain access through the VPN to a set of VM sessions running on a limited number of boxes located in the Demilitarized Zone (DMZ). Instead of using VPN to gain access to the internal network, each user accesses the internal resources by going thru a VM session. This added layer of security allows you to control users’ access and what specifically leaves your network. If a VPN is used to gain access to the network, a user can copy files to his/her personal computer at home, but if a user goes through a VM session to access the network, you can control your VM sessions to disallow illegal copying of confidential documents.
Another great example of service virtualization is the whole idea of Grid and Grid Computing that has risen in the past decade or so. In a product like DataSynpase’s GridServer, service virtualization is built-in to the infrastructure. GridServer manager virtualizes the services and where they are ran by controlling a client’s access to a service that is part of the Grid. Services are controlled and managed to meet a user’s Quality of Service (QoS) requirements such as security or resiliency. Figure 2 better demonstrates the GridServer at work. A user can access the Grid from a remote location (desktop or otherwise) and use the resources available on the Grid. Resource provisioning at runtime is one great example of virtualization provided by the GridServer. Implementation allows your datacenter to be managed from a central location while keeping your resources dispersed across your enterprise, wherever they might be.
Figure 2
Figure 2: Grid manager at work.
The users will not know where a given request is being fulfilled. This allows you to manage utilization and resiliency based on a required QoS for each user.
Each product mentioned focuses on virtualization, but at a different level. One thing to realize is that a number of these technologies can work together harmoniously. VMWare virtualizes at the Operating System level, and GridServer virtualizes the application and the service itself. Creating a farm of available services virtualized by a number of VM sessions will enable you to:
- Meet a higher level of utilization of resources: Adjust the number of VM sessions on the fly to achieve the highest utilization possible
- Meet QoS requirements: Based on the traffic profile and usage, you can adjust the number of service instances running, thus lowering the wait-time to completion
- Reduce datacenter complexity: VM sessions can be copied, duplicated and managed. A single VM image can be used across the datacenter without being affected by the underlying (host machine) infrastructure.
Figure 3 better demonstrates this deployment. Virtualizing a resource allows you to gain control and better manage that resource in the long run. In the short run, you might have to go through the headache of virtualizing that resource, but it is well worth the trouble.
Figure 3: Combining virtualization resources to increase efficiency.
Summary
There are lots of things to consider before you undertake a virtualization project. The first thing you need to determine is whether virtualization is the right thing for you, followed quickly by the question of what exactly needs to be virtualized. I gave you a number of ways that you can figure out the answer to both of these questions.
Looking Ahead
I will be covering the topic of virtualization and how it pertains to technologies such as Grid Computing, SOA, and later down the road, Utility Computing. I will start by covering the basic technologies and methodologies and will get to more detailed and advanced topics as we move forward. Please do not hesitate to contact me if you any questions of comments about the topics covered.
Footnote
[1] You will learn how these non-functional requirements make themselves into the SLA, and why the success or failure of your project solely depends on this SLA in a later article.
About the Author
Mr. Sedighi is currently the CTO and founder of SoftModule. SoftModule is a startup company with engineering and development offices in Boston and Tel-Aviv and Sales and Management office in New York. He is also the Chief Architect for SoftModule’s Grid Appliance product that has risen from a current need in the market to manage excessive demands of computing power at lower cost.
Before SoftModule, Mr. Sedighi held a Senior Consulting Engineer position at DataSynapse, where he designed and implemented Grid and Distributed Computing fabrics for the Fortune 50. Before DataSynapse, Mr. Sedighi spent a number of years at TIBCO Software where he implemented high-speed messaging solutions for organizations such as the New York Stock Exchange, UBS, Credit Suisse, US Department of Energy, US Department of Defense and many others. Mr Sedighi received his BS in Electrical Engineering and MS in Computer Science, both from Rensselaer Polytechnic Institute.