When it comes to public Cloud, there are some key terms you need to know. This mostly all revolve around the "as a Service" concept. This means the thing being offered "as a Service" is fully managed for you - all you have to do is provide a credit card (or some other way of paying) and you can use the service.
Here are some of the key terms we'll cover:
- IaaS - Infrastructure as a Service
- PaaS - Platform as a Service
- MBaaS - Mobile Backend as a Service
- FaaS - Functions as a Service
Finally we'll cover the AWS billing model, because anything that costs money should be well understood.
Remember back when we covered physical servers and then covered how virtualisation replaces them? Well IaaS is, in essense, a fully managed virtualisation platform. This means AWS are taking care of all of the hardware that the Virtual Machine is backed by:
- The physical location
- The physical racks and server case
- The hardware inside the system
- All the power, networking and other infrastructure
- The security of the datancentre
And way more. On top of this they're also handling all of the work required to create the Virtual Machine. You use their interface, which makes the process very simple, and they talk to the hypervisor for you. Here's a visualisation:
IaaS is managed Virtual Machines and everything underneath them (the hardware, the people, the location, the 24/7 security, etc.) They even install the operating system for you. All you have to do is login to the OS and configure it to your requirements.
Your responsibility is to manage the OS and its updates, and everything else up from the operating system layer.
Going up a level from IaaS, PaaS is like someone uses IaaS to create a VM for you, logs into it, installs Python and all the packages you need and then provides an interface to run your code on that server. You don't have to manage the OS, Python or any of the packages.
So PaaS is yet another layer of abstraction on top of IaaS.
The benefits of PaaS don't seem very clear at first, but imagine you've got an application you want to run written in Java. You could use IaaS to setup a server, install the Java runtime and all the packages/libraries you need, and then install and run your application. That would take up your time, and you'd have to maintain the server, software versions and deal with security updates.
For most the IaaS option is more popular, but PaaS is popular too because it takes care of all of the above:
- The provider of the PaaS deal with the OS
- They install Java for you
- They make sure your packages are available based on some configuration you provide
- They deal with OS, Java, and secutity patching
All you have to do is write your code and run it on the PaaS provider's platform. It's very efficient and greatly reduces the amount of work you need to do to run your application.
Software as a Service is the next step up from PaaS, further abstracting things again.
With PaaS you wrote and provided your own Java software stack. With SaaS, someone is hosting the software stack for you. You don't need to manage anything - you simply login and start using the software.
SaaS is very simple to understand: someone else is hosting the software for you for a (usually monthly) fee.
This is an interesting service. A mobile backend is a special kind of service used by mobile application developers. Mobile applications generally always use a remote server (or service) for saving user state (their personal information, image they've uploaded, their high score in a game, etc.)
A MBaaS takes away all of the work required with creating and managing your own backend for your application. Instead, you use a MBaaS your mobile application simply talks to the MBaaS' API (Application Programming Interface - more on these later.)
These services provide user management, interaction with social networks, databases, notification services, and more.
A MBaaS can also be referred to as just a BaaS - Backend as a Service.
Functions as a Service (FaaS) is very similar to PaaS, but with a few key differences: scaling and prices.
With a PaaS you still have to configure, up front, how much "infrastructure" you need to operate your application. With a FaaS you don't - they scale up, and up, and up based on demand, theoretically forever. PaaS doesn't offer the same sort of automatic, endlass scaling based on dynamic demand as and when it comes in.
FaaS is a pay per execution of your code. It can be extremely efficient from a billing perspective because if you're not getting any requests nothing is being executed. And if nothing is being executed, you're not paying anything. With PaaS you agree to upfront costs.
Billing/costs can be complicated and not just a simple case of "X is better than Y". You'll have to identify the correct service for the task at hand.