Buzzed is an ongoing series of articles about buzzwords that have lost all meaning.
Cloud is everywhere. Everyone wants to move “to the cloud.” They want that sweet cloud mana to supercharge their applications and businesses. I’ve heard cloud used as a verb, noun, mystical spell to cast on legacy software and everything in between. One thing all business-types know is cloud is the future. And the future is cool and sexy. There is money to be made “in cloud.” Cloud is commonly used to mean superset of technologies like infrastructure/platform/software-as-a-service, clustered computers, high availability, redundancy, data replication, commodity hardware, and cheap computation. For the most part, that’s fair enough for the layman. But what the heck is cloud, really?
In its simplest form, a cloud is a connected set of independent computers working together to perform one or more tasks.
Cloud computing can be big or small, public or private, virtualized or bare metal, enterprise or managed. It can literally mean 5 HP desktops with Hadoop installed on them (micro-cloud) or a giant data center. The confusion with the term comes down to two things: scale and managed services.
Does your cloud sit in a closet managed by the IT department? Or is it essentially infinite like Amazon Web Services (AWS)? When discussing cloud, scale is critical because it is all about economies of scale. If you want to build your own private cloud, the initial investment in going to be enormous. And you won’t be able to update your hardware very frequently. But maybe this is okay. Maybe you are in a remote location with terrible Internet access and security is incredibly important. And you need cloud computing just for a single task for a defined amount of time. For example, you need a supply chain management application in a forward operating base (FOB). On the other end, maybe you want to launch a global marketing campaign for your new product in a manner of minutes.
This spectrum is huge. With it comes very different design choices for security, performance, reliability, time and costs. It also varies the available service offerings. Most importantly it affects the future of your application. If your business needs change, how will you adapt? When will the newest technology be available and how much will it cost? Do you have a migration plan to move to a different cloud provider or solution? Will your vendor or third party support be around in five years and do you care?
This is the bread and butter of the cloud discussion. It’s where the vast majority of obfuscation comes from when using the term “cloud.” At a high level, managed services just means you’re paying a vendor to manage part of your cloud. There are four levels of managed services…<record scratch noise>…wait, what? There are three types shouts the internet! Yes, most people talk about infrastructure, platform and software-as-a-service. I like to include a fourth, application-as-a-service. To be frank, there is a lot of overlap between the four types. The boundaries are fuzzy. Let’s go into more detail, from the most customizable option to least.
Infrastructure-as-a-service (IaaS). IaaS is when a vendor manages the physical hardware: servers, racks, storage, routers, etc. Think of it as a data center where the vendor provides the power, cooling and physical security. You pay for all of that and get access to bare metal in return. You can install whatever you want. That’s why it’s the most customizable. Rackspace is a great example of a primarily IaaS provider.
Platform-as-a-service (PaaS). PaaS is pretty much just virtual machines (VMs). This might be a bit of an over generalization, but it’s close enough. You pay for a VM that has an operating system and you can install whatever you want. For example, you can get a Linux VM and then install MySQL on it with your own configuration. You can think of PaaS as the tools that enable developers and sysadmins to build applications. Newer PaaS offers are “serverless” such as AWS Lamba or Google Functions. These are platforms where a developer can deploy code straight into the cloud. PaaS is still very customizable but less so than IaaS. Pure PaaS vendors are heroku and digital ocean.
Software-as-a-service (SaaS). SaaS is when the vendor manages the hardware, virtualization, and everything else. You pay for using a piece of software on demand. To continue from the previous example, MySQL could be a SaaS. AWS Relational Database Service (RDS) offers 6 types of databases-as-a-service. You don’t worry about the operating system, how it’s installed or even the updates. You just use the software. SaaS is the least customizable. AWS, Azure and Google offer countless examples of SaaS like Google Maps APIs and AWS Lex.
IaaS, PaaS and SaaS are the building blocks for: Application-as-a-Service (AaaS). AaaS is different from SaaS because provides you business value. It’s not just a database, but a feature rich website. Dropbox, Amazon Drive, Github, Google Docs and Slack are all examples of what I mean by AaaS. I can use them by themselves to provide business value to my team and customers. Or I can integrate them with other tools. Like PaaS I don’t have to worry about their security, durability or scaling. The major difference is almost no customization, just implementation options.
People could, and probably will, argue about my definitions. But like I said, there is overlap between the boundaries. And it really isn’t a big deal. Besides understanding that you get less customization as you move further into managed cloud services you don’t need to worry about these definitions. And you could rightfully argue there should be more types such as Desktops-as-a-Service. (For the record, I would put that in AaaS). Here are some other terms you should be familiar with when talking about cloud:
Scalable and elastic. Similar terms meaning the service can change to meet computation, memory or bandwidth requirements. Did your website go viral? I hope you set it to “scale” so all of the redditors trolling you don’t crash your site. Hah! That’ll show them. Note, this is different than ‘high availability.’
High availability. Doesn’t have to do with changing compute or memory. It just means what percentage of the time is your resource available. Architecting a system to have high availability means having duplicate servers or databases behind a load balancer.
Durability. How many 9s protection does your data have? The measure of redundancy is provided in terms such as 99.99999999999% durable. That means there is a .00000000001 percent chance of total, unrecoverable data loss.
Tenancy. The whole reason to use services like AWS is sharing resources. Tenancy means that other people might be on the same physical hardware as you are e.g. multi-tenancy. For some, this may be a concern. You can have dedicated hardware for extra money.
Cluster. Clustering computers is technically the same as a micro-cloud. It’s a group of interconnected computers working together. Clustering allows for improved performance and durability through redundancy of data.
Serverless. The latest buzzword refers to some really awesome technology that will revolutionize how systems are built. It means developers can deploy code straight to the cloud without worry about anything else. There is a lot more to say about this that I’ll hold off for later.
Docker and containers. Containers are the technology and Docker is the tool (and company). A container is an abstraction layer between software and a VM. Software is put in a container and the container is deployed. Because all containers operate the same, they are more portable. Additionally, containers drastically reduce the size of your application and increase security.
Hopefully this gives you a better understanding of “cloud.” At the very least, it should get you thinking about what questions you should ask the next time ‘haha’ business man tells you about how much you need cloud!