You can’t virtualize UC applications. At least that’s what I’ve been told at various points over the years by vendors, consultants, and other so-called UC experts. I suspect that this myth got started in the early days of virtualization when people tried and failed to install real-time UC components under the hypervisors of the time. I myself tried and failed to run some of our media handling components under Xen in the 2007 timeframe. I remember the audio was all choppy and sounded horrible.
The key underlying issue that I hit—which turns out to be the key issue for virtualizing real-time UC apps in general—is one of timing. Real-time UC applications need very accurate timing in order to function properly. At a low level, timing functions are provided by the underlying server hardware. In a non-virtualized environment, the OS has full control over these hardware timing resources, so there is no issue. In a virtualized environment, the hypervisor sits on top of the hardware and provides an abstraction layer between the hardware and the virtualized OS instances. It turns out that this abstraction layer attempts to share the underlying timing resources with the virtual hosts, and sometimes you can get what is called “lost timer ticks.” This loss of timing resources can manifest as audio / video abnormalities or even call signaling issues in a UC environment. In general, this myth seems to have scared many people away from virtualizing their media handling components at all.
If you ask me, it’s basically crazy at this point to have non-virtualized physical servers in your environment. There is so much benefit to be gained from adopting a virtualization platform such as OpenStack or VMWare, that building bare metal servers the old fashioned way just seems like something from the Stone Age. Going into all of the benefits of virtualization is beyond the scope of this blog post, but suffice to say that scalability, maintainability, and platform responsiveness were three of the key overarching drivers for us.
So what about the real-time UC virtualization timing issues today? Since those early tests, we've found that you can virtualize real-time UC elements...it just has to be done in a careful and correct way. Hypervisor efficiency and features have dramatically improved since the early days, lessening the impact of timing issues. Regardless of which virtualization technology you are using, timing issues start to occur when you are heavily utilizing the underlying server hardware. So the most important thing is to keep hardware utilization to reasonable levels, and you will get close to bare metal UC server performance. The only downside is that you will not be able to achieve the very dense consolidation ratios that you see in VDI, and other more asynchronous app environments.
So despite these drawbacks, it has still been hugely beneficial to us to have an entirely virtualized environment that includes real-time elements. Even with the reduced consolidation ratios, we have achieved significant scalability and hardware leverage for our UC components. Our platform is much more maintainable as we can move virtualized resources around as necessary and perform changes and upgrades in non-intrusive ways. Having a virtualization platform in place has allowed us to bring automation deep into the underlying infrastructure. And as I’ve said elsewhere, automation is the key for any cloud service provider to run an efficient operation.