Tuesday, December 29, 2020

Cloud Computing, Background Knowledge for a Future Post

My company is pushing for us to learn more about cloud computing (Amazon Web Services, Microsoft's Azure, Google, etc.) Since we will be working with whatever our clients choose, that generally means learning all of the above.

Anyways, it's interesting seeing the business from this side of things. Most of them - Amazon in particular - are known more for what the average person uses it for. Ordering all sorts of goods and services. (I wonder how much of Jeff Bezo's fortune comes from the consumer side of things, and how much from cloud computing and serving other businesses.)

I want to talk a little bit about another topic, but understanding the cloud will help with that discussion. The training sometimes feels like a really long sales pitch, but the point they're making (and the benefits they're selling) are undeniable. Let me explain.

Your average person is most familiar with the PC. Well, these days it might be a laptop (and many do everything with a cell phone), but most are at least a little bit familiar with how a personal computer works. 

Maybe you've got gigabytes of music, or videos, or movies. The computer doesn't access all of them all the time, but it's saved on your hard drive. You might even buy an external hard drive, which you can attach to your computer if/when you want to access anything.

Sometimes your computer stops working. Maybe an update went wrong, or the hard drive failed. Maybe you got a 'blue screen of death'. You cuss and grumble and either fix it or find an expert who can fix it for you.

A business can't afford that, though. Customers expect the ability to access a website, to make a purchase, to check their balance or file a dispute 24/7. It's one thing to lose out on an hour or two of work because you can't get the blasted computer to work, it's another thing for a business to lose out on millions of customer transactions. (And if outages happen too often, you may lose your customers entirely.)

So quite a bit of what makes the business side of things so different is ensuring high availability (HA) of services, as well as making sure you can operate at the necessary scale. It's one thing to use your PC to play a movie every evening. It's another thing to stream video to millions of people all at the same time.

And oh, btw. That heavy business level use puts far more wear and tear on business computers than an individual puts on their laptop or PC. You, as an individual, might have a hard drive that lasts well beyond the time when you replace your computer. A business? They're using and abusing their machines continuously, so failures are far more likely.

Okay. Let's talk about the old legacy way of doing things before I start discussing the cloud.

You're a business, and you offering up some sort of product. Maybe it's just a web site where people can reserve spots on a summer kayaking trip, maybe it's a small business that sells cute little knick knacks. Whatever. You need a website, you need a way of letting people look through your catalog, and you need a way of handling the purchasing. You probably have a database to store all the information on your product, plus maybe your customers (if they create accounts).

You need to make sure your website is up 100% of the time, or as close to that as possible. You have a computer (or two or three) that acts as a server. It serves up the website, which customers (i.e. client machines) access. But one server might go down, so what you really want is two or three computers serving up the website - and a load balancer that receives the website requests and sends them to whatever server has the lightest workload.

You have to figure out what the likely requirements are going to be. How many people will access your site at any given time? Large businesses might have a department called 'capacity planning', which tries to predict what sort of traffic you'll get and make sure you have enough resources to manage it. Is two servers enough? Three? How large do they need to be? What's their processing power? When will they get old and obsolete and need to be replaced?

Getting the calculation wrong can have serious consequences. If you don't have the customers you expect, a lot of your equipment will be idle. Hardly doing anything but collecting dust. 

The opposite is also a problem - if some crazy fad makes you popular, you might have far more traffic than you expected. More than your servers can handle, which means it starts dropping requests and potential customers can no longer access your website.

It's even worse if your business is seasonal. That kayaking site might get a lot of hits in the summer, and almost nothing in winter. The site selling knick knacks might sell a lot during the holiday season, and almost nothing the rest of the year. Which causes problems for capacity planning.

Do you purchase what you would need during the busiest time of the year, and let the equipment sit idle the rest of the time? Do you purchase enough to satisfy average use (and maybe a little more), but accept the potential losses when the busy season rolls around and your site gets overwhelmed?

Now... let's talk about cloud computing.

For most users, cloud computing is practically invisible. You surf the net, you access a site, and you have no idea what is going on behind the scenes. You get your website or your streaming video, or a game on your cell phone, and as long as it works it's all good.

But the business world has long worked with virtual machines. After all, your computer functions because of a bunch of 1's and 0's, stored in sequence. You can copy over those 1's and 0's and run them on a much larger machine to do the same thing. Hence, a 'virtual machine', that operates just like your personal computer or laptop. It's just that it's one of many programs running on an enterprise level computer. (There's a lot of technical terms here - a hypervisor that hosts images. I'm trying to keep this simple so I'm kind of avoiding them.)

They're still running on a physical computer somewhere, sure. But you can make a virtual duplicate of just about any of the hardware you used to manage yourself. There's actually quite a bit of advantage in doing so. After all, for most home users they generally use only a fraction of their computer's processing power. If you're on a windows machine and you open the Task Manager (just right click on the task bar. A menu pops up and Task Manager is one of the options) there's a section for 'Performance' where you can see how much your CPU - i.e. central processing unit, or computer processor - is using. Mine is fluctuating around 10-15%.

For various reasons businesses like to have one application per machine, but that one application may not use a lot of processing power. If you make them virtual, then the processor on the machine hosting them can process everything more efficiently. 10% to your web server, 10% to your database, it can allocate CPU time as needed.

Cloud computing takes that idea and runs with it. There are still extremely powerful physical machines running everything. Somewhere. The cloud provider decides where, and does the capacity planning, and manages all of that.

The business just uses a small fraction of that hardware to run the virtual machines it needs for its business. Instead of two or three web servers sitting in a closet somewhere with a load balancer, there are two or three virtual web servers and a load balancer operating on a cloud provider's machine somewhere (along with other companies, and only the cloud provider knows how many are on each actual piece of hardware.)

Here's where the advantages come into play.

Instead of trying to predict how much your business will grow over the next year (or five) and purchasing the hardware needed to support that, you can order just what you need to handle your current level of traffic. If your business grows and you need more web servers, you can easily make a copy of your existing virtual machine and create another. Those two web servers easily become three or four (or ten, or twenty) as needed.

You can easily adjust to seasonal differences. You don't have to try to plan for the Christmas rush, or the March/April tax season. You don't have your machine sitting idly by during slow periods.

The cloud provider hands all the icky hardware decisions. They get the physical machines, they handle the physical network cables, they handle the high availability processes that allow your virtual machine to continue running even if some of the hardware breaks.

The cloud also makes it easier to come up with disaster recovery plans. If one site gets hit by a tornado or earthquake it's not too hard to have another duplicate site up and running some distance away. (This is more complicated then it sounds, and a Disaster Recovery plan on paper might not be as good as it needs to be... which is why good businesses actually test their Disaster Recovery procedures. But that's another topic.)

There are a lot of buzz words used to describe these benefits. Scalability. Pay-as-you-go. Software-as-a-service. They describe a very real, tangible benefit to businesses. After all, that small kitschy business doesn't really want to spend a lot of time trying to decide how much hardware they need to manage their web traffic. They just want to make and sell cute little knick knacks. That kayaking business doesn't really want to worry about whether they need to order another server, or retire their existing equipment before it breaks. They just want to help people schedule a fun and exciting adventure.

And cloud providers can generally work on a scale that makes them efficient than having one hundred small businesses managing their own equipment. 

It's interesting, though, that transitioning to the cloud generally creates a more confusing structure (even if it is more efficient and scales more easily.)

No comments:

Post a Comment