I have been living under a rock for the past 5 - 8 years, and am just now getting up to speed with virtualization, virtual machines and platforms like VMware or VirtualBox. I think I am starting to get them, but there are two concepts about VMs that I'm just choking on for some reason; one has to do with their intrinsic benefit to the enterprise, and the other has to do with their practicality when being used.
So I understand that you can have multiple VMs running on the same physical machine, all doing their own "thing" as if they were separate machines. So let's say I want to make a nice little virtual network of servers in my home office so I can have a big sandbox to play inside of for all my projects. I set up 2 physical machines as servers, and on each of them I have, say, 4 virtual machines running (1 might be an app server, another might be a RDBMS, another might be a message broker, etc.).
Besides saving me money (as I only have to provide 2 physical machines instead of buying 8 servers), what instrinsic benefit/purpose do these VMs serve here? I don't care how clever virtual machines are, if my computer only has 8GB of RAM, and I have 4 VMs running on it, those VMs only get 8GB of RAM to share between them. Putting 4 VMs on my server doesn't endow it with 4 times that amount of RAM! So, as far as I see it, VMs save you money on hardware, but just end up bogging down that hardware as you have multiple machines competing over the same pool of resources. What am I missing here?
Can VMs communicate with each other over your network using high-level protocols like TCP/IP, HTTP, FTP, etc.? Otherwise, it just doesn't make sense to implement all these VMs if you have to feed them separate and independent chunks of data/requests to process.