And the lowest level implementation that we’ve discussed, which is infrastructure as a service, whereby when using something like Amazon, you literally click the button that says give me a load balancer. How good is Microsoft Cloud?
You literally click a button that says give me two servers. You literally click a button that says give me a firewall or any number of other features. So Amazon and Microsoft and Google, to some extent, have all implemented these low-level services that still require that you understand the technology, and you understand networking, and you understand scaling and availability.
But you so much more easily and inexpensively and efficiently– literally with just a laptop or desktop, without any data center of your own– stitch together the topology or the architecture that you actually want, albeit in the cloud.
Platform as a service, though, has arisen as a middle ground here, whereby you might have services like Herouku, which you might have heard of, which themselves actually run on infrastructures like Amazon or Google or Microsoft or the like.
But they provide themselves a layer of abstraction that isn’t quite as high level, so to speak, as what you get from software as a service. In fact, these platforms as a service don’t provide you with applications. They just make it easier for you to run your applications in the cloud.
Now, what does that mean? Well, it’s all fun and exciting to understand load balancing and understand networking and understand the need for multiple servers and the entire conversation that we’ve had thus far. But at the end of the day, if I’m a software developer or I’m trying to build a business, all I care about is making my internet application available to real users.
I really don’t care about how many servers I have, how many databases I have, how the load balancers talk to one another. That’s all fine and intellectually interesting.
But I just want to get real work done. So I’m willing to pay a bit more for this. I’m willing to pay some middleman, like a Herouku, or any number of other services, a platform as a service, to abstract away those kinds of details.
So I have the wherewithal, and I have the willingness to actually say host this as a web server. So give me a web server. I will pay you some number of dollars per month to give me a web server. But I want you, Herouku, to deal with the auto scaling of it.
I don’t care how many servers it is. I don’t care how they are connected. I don’t care anything about these heartbeats. I just want to have the illusion, for my own sake, of just one server that somehow grows or shrinks dynamically to handle my customer base.
Meanwhile, things like load balancing, I just want my customers to be able to reach my server. I don’t care how it’s implemented. I don’t care how it’s made to be highly available.
I just want that to work. And so companies like Herouku provide these platforms as a service that just make your life a little bit easier. And you don’t have to think about or know about or worry about as many of these details.
Now, to be fair, if something breaks, you might not understand exactly what’s going wrong, and you yourself might not be able to solve it. Indeed, you might be entirely at the mercy of the cloud provider, or the PAS provider, to solve the problem for you.
But you’re saving time. You’re saving energy elsewhere by not having to worry about those lower-level implementation details, at least in the common case. But odds are you’re paying a little more to Herouku than you would to an Amazon directly because they’re providing you with this value-added service.
So as cryptic as these acronyms really mean, they’re really just referring to disparate levels of abstraction, all of which somehow relate to the cloud. But infrastructure as a service is a virtualization of these hardware ideas, the physical cabling that we drew here on the screen.
Software as a service really is just that application that the user interacts with. And platform as a service is an intermediate step, whereby you, in building your software in the cloud, can worry a little bit about how to actually make it available to users.
But let’s consider one other challenge now– that of database replication since, of course, thus far, we’ve been talking about a web server as though it’s the entire picture. But the reality is most any business that has a web-based presence or a mobile presence is going to be storing information.
When users register, when users check something out, add something to their shopping cart, so to speak, all of that data needs to somehow be stored. So let’s consider now what the world really likely looks like. So here is my laptop again.
And here is the cloud that’s between me and some service that I’m interested in. We’ll assume for now that there is some kind of load balancing. And I’m just going to draw it a little bigger this time to suggest that– let’s just think of it now as a black box. And maybe it’s one server.
Maybe it’s two. Maybe it’s more. But somehow or other, load balancing is implemented. Then I’m going to have all of my servers here, which we’ll abstract away as maybe three or more at this point– one, two, and then we’ll call this n. But a web server typically does not do everything these days.
In fact, it’s been trending for some time to actually have different servers or different virtual machines, or even more recently, different containers. Each provide individual services.
Sometimes people call these micro services if a container only does one, and one very narrowly defined thing, like send emails, or save information to a database, or respond to HTTP requests. So these back end web servers are not the only types of servers we have. Odds are we at least have one database.
So let’s consider now the implication of all of these architectural decisions we’ve made thus far on how we actually store our data.