VM (Virtual Machine) is awesome. It really is.
When I was studying in the University, no one even mention Virtual Machines and such, and that’s a shame. I have a lot of thoughts about the difference between what we learn and what is implemented in our jobs, there will be another post about that.
VM is a technology that allows you to install an OS on-top of your OS. Terminology speaking, your OS is called a “Host” and the OS you installed in your Virtual Machine is called a “Guest”. Microsoft has its own implementation called “Hyper-V” where your Host is a Windows Server OS that has the Hyper-V feature turned on.
Another big player in this field (bigger than Microsoft in my opinion) is VmWare. They have many products in this world, one of the biggest is the “ESXi” OS. It’s a simple linux-based OS that takes very little place and works as a Host for VMs.
I’m sure you can find better explanations for this on the web.
I’ll give an example that I think (and hope) most of you will end up saying “Well, dah” but for me it was the exact opposite, it was (and still is) a “WOW” moment.
My team is responsible (among other stuff) for a pretty large system. It consists of many servers, databases and more.
I started working in that team ~4 years ago. We had a Production environment and a Testing environment. It was a real mess; the Testing environment was physically far from us and we had to walk to it in order to test our changes. Found a bug? Go back to your room, fix it and bring it back. Sounds like the 90’s right? Oh, and obviously it was all bare-metal (meaning each physical server had Windows installed on it and our system would work right “from the metal”).
About two and a half years ago we started an overall upgrade to the system.
The first thing we did was to move the Testing environment from that far room to a room next to us (physically moved the servers). Great win! Now my pedometer was a bit more rational.
My WOW moment
Then we brought a DevOps to our team. The first thing he did was to build us an Integration Environment. It took him a few weeks, and at the end we had, right in the Development Environment, the whole system! It was virtualized and we could Remote Debug our changes! Now it’s the time some of you say “Well, Dah”. But try to see it from my eyes, that was “WOW”.
After that, we changed the whole system to be virtualized (VMWare ESXi as hosts). This simple (it was really simple) upgrade opened a lot of doors and brought this old 90s system to the 21st century.
For example, we were able to add real-time statistics monitoring and business logic monitoring to the system. You can read more about that here.
I remember my boss telling me that we turned that system from the ugly kid that nobody wants to play with, to the most popular kid in the block.
Scale-Out? Easy Peasy
Moreover, before the upgrade we noticed we needed to scale up the system in order to keep up with the natural-growth requirements. Trying to do that, we realized we had no more free NICs on the server to add more cables!. We had to add an USB-To-Ethernet adapter to enable that scale. During the upgrade, beside moving the servers to virtualization, we added switches between all the servers. Now, if I want to scale-out I just add another VM. And if I have no more capacity on that server, I just add another server.
That was the beginning of my love to VMs. With very few effort, it turned the system I hated (I really hated it, it had issues all the time that literally woke me up at night) to a system I now loved and (’till now) treat it like my baby.
After that, our DevOps left and I took over the Integration Environment. I implemented all our systems in it to ease the process of developing, testing and deploying. It is really beautiful.
Now we don’t even run the programs we build in our own computer, we do it all in our own small cloud and each one of us can continue working wherever he is.
No more “it works on my machine” because now you are running it in the same VM (literally the same one, they are all clones) of the production and testing Envs.
I’m furious it took me so much time to learn this “standard” and I hope I could save you some time to learn this as well.
Redundancy And Backup
Another upside that this virtual world has is that it gives you, for free*, a lot of necessary stuff that you had to work very hard to accomplish them by yourself.
VmWare has a cool technology called “vMotion” that, when installed, it will automatically take care of your VM redundancy between two servers. Before installing this in one of our systems, the struggle to maintain it was real. Every deployment had to be done twice. If there was a bug, you had to firstly find in which server it happened. And more. Then we installed “vMotion” in it and all the duplications were deleted. We now had one instance of our application. The deployment is easy and finding bugs is straight forward.
Even backups are easier, just periodically backup the whole VM and that’s it! You can replicate it to use in any other environment!