[From the last episode: We saw how virtualIn our context, refers to what are usually software models of some physical thing. The model behaves like the real thing except, in some cases, in performance. machinesIn our context, a machine is anything that isn't human (or living). That includes electronic equipment like computers and phones. (VMs) are softwareIn this context, "software" refers to functions in an IoT device that are implemented by running instructions through some kind of processor. It's distinct from "hardware," where functions are built into a silicon chip or some other component. versions of real machines that help keep different applications separate within the same serverA computer with a dedicated purpose. Older familiar examples are print servers (a computer that controls local printing) and file servers (a computer used for storing files centrally). More modern examples are web servers (the computers that handle your web requests when you use your browser) or application servers (computers dedicated to handling the computing needs of a specific application). Servers are often powerful, expensive machines since they have to handle a heavy load..]
VMs are a relatively old concept. These days, there’s another concept that’s very popular in the cloud-computing world: the container.
The word “container” is used a lot of different ways in the computing world. In some cases, they’re about keeping things together – like video and audio pieces of a movie. In other cases, they’re about keeping things apart. Your browser may have containersA way of separating applications running on the same server. It’s lighter-weight than a full virtual machine. (Firefox does, anyway), and they’re about keeping websites like Facebook from seeing where you’re browsing.
Gotta Keep’em Separated
In our case, it’s also about keeping things apart – just like VMs are. The difference between them and VMs is that they’re “lighter-weight” – meaning they require fewer resources to handle.
A VM sits atop a regular-running machine. You have your application running over a virtual OS, and that runs over the hypervisor (which manages the VM). The hypervisor runs over the “native” OS, and that OS sits atop the hardwareIn this context, "hardware" refers to functions in an IoT device that are built into a silicon chip or some other dedicated component. It's distinct from "software," which refers to instructions running on a processor.. This is illustrated below.
So, really, each application has two operating systemsSoftware – or firmware – that handles the low-level aspects of a computer or IoT device. It gets direct access to all the resources. Software asks the OS for access to those resources.: the virtual “guest” OS and then what I’m calling the native one – the one that runs out of the box on the computer before you load the other stuff. And, of course, there’s the hypervisor that allows all that virtualization.
Containers eliminate some of that middleman stuff. They run directly over the native OS, making them much less resource-intensive. Container management works directly over the OS to allocate actual resources while keeping the applications isolated from each other.
If you occasionally see write-ups about cloud technology, then two names might be familiar: Docker, which is a container project, and Kubernetes, which is a way that IT folks can manage the containers. Those names have been flying around for a few years, and they’re a big part of what’s happening.
Good for the User, Good for the Developer
By the way, there’s another reason why this is a popular way of doing things going forward. Not only can deployed applications – the ones you can interact with – remain apart, making them more secureRefers to whether or not IoT devices or data are protected from unauthorized viewers. and private, but it’s also easier for application developers. Rather than having to worry so much about which machine and which operating system they’re going to be working with, they can just develop in their own private space, disconnected from where the application will run.
Since cloud hardware isn’t all the same, that removes a worry from the developer. In theory, anyway, the application should work no matter which machine they run on. It’s that management layer that adapts the generic application to the specific computer.
This is one of many situations where there’s a separation between something generic – in this case, an application – and something specific – in this case, the computer. Ideally, you want to be able to develop applications at an abstract level, not worrying about “the details” of where it’s going to run. It’s sort of like the Dell computer plug thing: they want to make one basic powerplug for their computers – the three-prong thing, with some kind of adapter or something to connect it to the different international power plugs.
(Image credit: Dell Computer)
The container management layer is kind of like that adapter: it adapts each application to the specific computer. And so, generically, such layers are often referred to as abstractionFor our purposes, it’s the removal of all unnecessary details, leaving only what’s required for operation. layers or adaptation layers.
Leave a Reply