Nomenclature can be confusing - like using the word “Xerox” as a verb when making a copy of something. Heck, even the more generic “photocopy” term implies a photographic process that isn’t the same as the film based process we used to use. So, this isn’t unique to IT.
The elevator summary for Nutanix is that it makes software that enables companies to setup computing servers on their own premises really easy. The configuration of storage, networking, compute, and virtualization resources is unified, simplified, and scalable. (“Scalable” means that hardware can be added to meet rising demand without major configuration changes.)
HyperConverged Infrastructure is just a phrase that is short-hand for the unified configuration of the components. If you must know, there is a “Converged Infrastructure” that brings all the components together, but the components there are individually configured and so it’s more difficult to do (however, that may be beneficial in some circumstances where you want individual control). So, the “Hyper” word was added to indicate even more “Converging,” which equates to more simplicity in everything, ironically, except the label.
I’ve previously described Virtualization and Virtual Machines (VM) thusly: Like people living in The Matrix, an application running inside a VM thinks it’s running directly on real hardware, but it’s really running in a simulation. Yes, at some point there’s real hardware involved (just as people in The Matrix actually have bodies somewhere in the real world), but the real hardware may not look at all like the hardware the applications think it is. For instance an application might think it’s running on a Windows desktop when it’s actually running on a Mac, or perhaps it’s running on a monitor-less rack box sitting in someone’s basement. I actually think the Wachowskis missed out on a big opportunity to have people in the Matrix not look like their real physical bodies in the pods (have you seen Surrogates from 2009?), but I digress.
Finally, there’s the over-used “Cloud” terminology. Some here have equated it to mainframe computing, others to anything accessed over the internet. The truth is that while there’s no universally accepted definition of what the “cloud” is, we all know the prototypical examples of Amazon Web Services (AWS), Microsoft Azure, and Google Cloud. They are indeed all examples of Clouds. It gets confusing because companies doing other things want to grab a piece of that “Cloud” magic. Ever watch an old black and white movie from the “RKO” studio? You know, their logo was an earth globe with a big radio tower spanning the upper hemisphere? Yeah, well the “R” in RKO stood for “Radio,” which was a hugely popular technology at the time, and so the film company wanted some of that radio magic, even though it had nothing to do with radio or radio technology. Same with Cloud today.
I’ll grant this is arguable, but in my view, to be a Cloud, the following attributes must be present:
- Applications running in it don’t care about the actual infrastructure. That includes where the hardware is located, what the hardware actually is, what the Operating System really is, where or how the data is stored, etc.
- Users writing and deploying applications on it don’t care about how the system is configured, run, etc. They have access to an API for configuration of the VMs in which their applications run.
- The computing, storage, and networking resources uses scale automatically as the applications demand.
In some looser definitions, #2 is not required, in which case the old-fashioned (meaning 10 years ago) J2EE servers qualify as clouds, which is why I require that part. In even tighter definitions, a requirement that data backup and recovery is taken care of automatically, or a requirement that the resources are shared among various users/companies is needed, or even that metering (payment) is determined by actual application usage. Those may exist in clouds, but they’re not part of my definition, and so my clouds may not provide those. Others may have differing opinions, of course.
Essentially, my 3 attributes of Cloud define a computing delivery model in which application writers don’t worry about how the resources are provided to the applications, instead they just program to an API.
Thus, the only difference between a public cloud and private cloud is whether the cloud services are sold to anyone who signs up, or restricted by the company running the servers. I could use Nutanix’s HCI to setup servers in my attic and then structure a private cloud for use only by my family. I could also enable anyone with a credit card have access and then it would be a public cloud: The SmorgaCloud™.
Note that I don’t believe that Nutanix provides the cloud functionality part, at least as I’ve defined cloud. You get running servers, but as the HCI admin you still need to apportion the storage and networking access and compute limits and so on, and application writers still need to stand up VMs in which their applications will run. Nutanix (or any HCI) provides a easy way to setup server infrastructure, but the part that hides that that infrastructure from application writers is still needed to be a cloud - in my definition anyway.
Most people should stop reading now. I think the above captures the main salient points without too much detail (corrections/discussion welcome, btw). But, if you want more:
Another way of looking at this is via SaaS, PaaS, IaaS, and now FaaS. More acronyms, yeah.
SaaS is Software as a Service. I think it really should be AaaS, Application as a Service. Ever use Google Docs? That’s a word processing application that you don’t install on your own computer because it runs on Google Cloud. In essence, word processing services are being provided to you over the internet. Same for GMail. Same for Facebook (social networking as a service).
PaaS is Platform as a Service. An example of this is the Google App Engine, or AWS Elastic Beanstalk. Essentially the platform encapsulates and provides the services your application will need. The idea behind a platform is to make it easier to write applications by providing standardized things like runtimes, databases, web server functionality, etc. If you write an application that runs on Windows, Windows is your platform. When that Windows platform is provided to you in a VM over the internet, that’s a PaaS.
IaaS is Infrastructure as a Service. At its most basic, these are the services that Clouds provide. Platform virtualization, storage, compute, and networking are all provided as services to applications to use. I’m comfortable considering anything that provides IaaS as a “Cloud.”
You can think of these in layers. An application writer can use the IaaS layer directly, but then he’s responsible for a lot of the management of his applications, and even installation of services from other applications he wants to use. One level up, PaaS, and a number of additional services are provided, and there is less management responsibility needed. The top level, SaaS, well you’re not writing applications, you’re using them. As a user you manage your own data - that’s about it.
The new kid in town is FaaS (creative, eh?). That’s Function as a Service. A bit of background first: Rather then having a single application that has many features, like GMail or Google Docs, imagine a really small application that does just one thing. Like an application that only finds all the Spam in your inbox and deletes it. That kind of thing - not so much an application that a user would run, but a single purpose service to be used by other applications, is called a micro-service. With a complete selection of micro-services at your disposal it’d be easier to write a complex application. This is cool because now you easily provide slightly different applications for different parts of your business that leverage common micro-services, but provide unique features or capabilities or ease of use.
What FaaS does is hide not only the server part of the micro-service, but the application part. It’s a function to be called, that’s all. You don’t know there’s an application or even a server there. Your application calls the API and someone else takes care of finding the application on a server that can provide that service. You don’t know or care. That’s called serverless - not because there isn’t a server, but because you don’t know or care about any server thing that might be running.
The best example of serverless computing is AWS’s Lamda. With that you not only don’t worry about finding the application to provide the service, Amazon takes care of starting the application for you, then terminating it when the service is performed. Thus, Lamda runs as many applications as is needed to support your workload, so it scales very nicely, and you’re not paying for an application that’s running all the time even when it’s not being used.
Sometimes, people think that FaaS is another form of PaaS, but the difference is this scaling aspect. With PaaS you’re still thinking about scaling your application(s) within the platform, but with FaaS the cloud service just starts up as many applications as needed - and you only pay for what you use.
Don’t you now wish you had stopped at the dotted line, above? ;^)