What is the Cloud, and why is it "Magical"?Posted: 2021-09-30, last modified: 2021-09-30.
Tags: Computing Thoughts.
Well, obviously I know what "the cloud" is. Upload more RAM (or compute or bandwidth or whatever it is you happen to need). You rent computing resources from Amazon or IBM or whomever, and instead of furnishing a brand new box to keep on your premises, you upload your data to it via the internet.
But there seems to be some magic to the cloud which I can't put my finger on. I know, I'm probably a decade late on figuring this out, but the cloud has never seemed that novel or meritorious to me. Today I'd like to take a look and figure out what it is that excites people about the cloud.
Break it down, and there are just a few components to the cloud. You have pools of computational resources, and people buy into the pools. And on top of that you have a layer of billing and resource allocation tooling to make sure that people are paying for what they use and are provisioned with the resources for which they have paid.
You have grumps like me who say things like "code is code", and "you can run it here, you can run it there, you can run it anywhere". Which, of course, assumes you have the right platform and dependencies here, there, and anywhere, which isn't a terribly big ask these days. But this leaves me right back where I was, not understanding the magic of a cloud.
So I guess I should look at what differentiates a cloud computer from an on-premises computer.
- Large pools of compute resources (RAM, CPU, bandwidth, storage, and static-IPs)
- Instead of being on your premises, other people share these resources, and yet more people have physical access to them
- You write code, instead of purchase orders, to provision these resources
the first and third item are quite interesting, the second rather concerning, so lets do what most folks do and think about it later. An interesting attribute of the first point is that you can get more or less computer, basically whenever you want (up to some unconscionably large limit, of course). The last is that the provisioning of your computers is written in code. These two in combination form what has been termed "Infrastructure as Code" (IaC).
In principle, this makes setting up your infrastructure easy, and replicating it for testing, or rebuilding infrastructure after a disaster. It also means you can destroy a large fraction of your unused computers at the end of your work day when your load drops, and the next day, when your load picks back up, you can just rent new computers. What actually happens, of course, is that "the cloud" just turns off those, or provisions them to another of their customers.
Well you can do most of that on premises too. Use the same or similar automation tooling -- ansible, vagrant, kubernetes, or whatever happens to be in these days. And if you're very sophisticated, you might even be able to use net-boot things to automatically start and stop some of your hosts, and save power during down-time.
I suppose that if you go to this effort, all you've done is set up a "private cloud". This would deal with point two, that other people have physical access to your rented computers, if you want to go to the effort. If not you have to think quite hard about cloud security. Cloud providers are actually in the business of securing customer's data for them. If they were out to steal customer data, they'd be out of business pretty quick. If that doesn't cut it for you, then you can use various forms of encryption to protect your data and applications from a malicious cloud provider. For some applications, secure Multi-Party Computation (MPC) could enable you to secret-share your data and application across multiple cloud-providers, preventing any one of them from spying on you, while still yielding you the computational results you wanted.
I think I'm still missing the magic. Looking at this from a non-technical perspective, perhaps some of the magic is in that the cloud is on the internet. A lot of on premises setups were never available over the internet. The company NFS or ERP or whatever it was they used was only available from the office, and with the cloud now they can use it at home and sometimes from their mobile phone.
This seems to me a conflation availability via the internet with simultaneous advances mobile technology. When you think "mobile computing", you think games, social media and messaging. But how about the ability to open a doc on your smart-phone; that one is "in the cloud".
Think about migrating from an on-premises NFS to a cloud file-share. Both systems did roughly the same thing -- backup files and replicate them across devices. One just has further availability, and came about at the same time that mobile computing did. The cloud delivers documents to your mobile device, but the mobile device is the one to display and edit them. Thus the conflation of mobile and cloud technologies.
Perhaps I'm just a grump, but nothing about the cloud seems all that magical to me. The cloud doesn't come without its cost, either. The internet was designed for survivability in the face of the cold war. It did this with redundancy for communication paths and automatic rerouting. Well now that all our compute for a given city is concentrated in one (or a few) cloud datacenter(s), well, now, that's a pretty juicy non-nuclear first-strike for a cruise missile. Even if you consider a lot of the geo-redundancy that is built into most cloud providers, if you knock out enough datacenters, resource contention for the remainder is likely to cripple the system. Before the cloud, to wipe out the equivalent computing infrastructure (logistics, inventory, ERP, and etc. for many businesses), a far more destructive act would have been necessary.
So, in conclusion... Infrastructure as Code is really neat. The magic of cloud computing is actually a conflation of internet availability and mobile computing. And the cloud actually ruined the internet.