With the progress of cloud computing technologies, it has become much easier for a technology company to provision resources for the software products that are being developed. However, there are many ways to provision these cloud resources and issues to consider between these options.
There are many terms being thrown around such as SaaS, PaaS, IaaS, CaaS and FaaS. There are also variants of cloud computing ranging from a private cloud, a single or multi-tenanted public cloud to a hybrid cloud. Why do we need to understand all these?
Technology problems are also business problems, and it is increasingly important to keep sight of technological innovations to grasp how they will change the way that businesses are run.
We will get a brief overview of how these cloud computing technologies work in the realm of products, how they impact the way customers structure their relationships with product companies, and the leverage that companies have when utilizing certain technologies.
Firstly, let's get a broad understanding of what different terms mean in the way of SaaS, PaaS and IaaS.
SaaS is software-as-a-service, which refers to software provisioned and licensed to different customers over the internet as a form of "service". Typically, this is based on a subscription model, where a new customer can sign up to get a new license and pay for it on a recurring schedule.
In the past, sales representatives will do product demos to get new customers after being contacted through a website form or phone call. With the exception of enterprise customers due to more complex legal and compliance requirements, this is increasingly not the case in the world of SaaS.
Customers are starting to trial software over the internet by themselves, after which their software is automatically provisioned if they are willing to pay after the trial period ends. Freemium plans also allow customers to try out software at a free tier and progress up the value chain to a paid plan for more advanced capabilities.
Instead of a top-down approach to selling B2B SaaS software by targeting department heads through an enterprise sales process that "forces" everyone in their department to use a certain product, product companies are adopting a bottom-up approach.
This is when someone within a company discovers a great product over the internet and advocates for it to be adopted. Adoption tends to be easier across the board when there is a strong internal customer advocate within the company.
It is only human for people to want to recommend great products that have a positive impact for their companies.
At the same time, SaaS companies are starting to realize that moving to a model where customers can be self-serviced makes a lot of sense. Sales staff may be valuable for targeting businesses, but hiring them can be expensive.
With a lower cost of acquisition from not employing sales executives, payback period per customer is shorter and products can be offered more cheaply.
A customer in any part of the world can get the software without meeting a sales representative, due to the acquisition process being low-touch. These cost savings can be redirected back into research and development.
The shift from being sales-driven to customers' self-servicing of SaaS products is accompanied by the shift from the customers' self-hosting of the infrastructure for the software to letting the SaaS provider do it.
This has an impact on the customer's expectations of the SaaS provider and the SaaS provider's way of running its business.
Self-hosting enabled the SaaS provider to save on infrastructure costs for maintaining and optimising cloud infrastructure, while enjoying mostly profit by selling the software copy to these customers who want to control their own cloud.
There are also situations where clients are willing to pay the SaaS provider additional service fees for helping to install the software, if there is a lack of engineering staff in the customer's office who can perform such duties.
However, customers are shifting away from self-hosting to save on costs and expect SaaS providers to provide a packaged solution in the cloud for them.
For some of the enterprise customers needing full control of their infrastructure, moving from self-hosting on-premise (managed servers and/or private cloud) to a single-tenanted public cloud will be a logical step forward. This is before progressing to a multi-tenanted public cloud, which will need additional measures to make sure that data is segregated.
What all this means is that scaling the product is much easier and at the same time, software can be licensed to customers at a cheaper rate. Cloud providers like Amazon Web Services, Microsoft Azure and Google Cloud provide SLA (Service-Level Agreements) guaranteeing security, performance and reliability.
The next step for a SaaS provider expected to host cloud infrastructure for their customers is to determine whether to go for PaaS or IaaS.
The simplest way to understand the difference between PaaS and IaaS is to first understand what IaaS is.
IaaS is infrastructure-as-a-service, where you deploy different virtual machines within their own subnets, network security and firewalls, all contained within their own virtual network with secured entry and exit points. Each virtual machine needs to be configured from scratch or from existing operating system images. Some of the type of servers that you can configure a virtual machine to be include:
These virtual machines allow a greater degree of control over how they work at the operating system level and any kind of software can be installed on them. Anyone can RDP (Remote Desktop) / Secure Shell (SSH) login into the virtual machine (configured as a certain type of server) to troubleshoot issues if there are any problems. HTTP Requests from the internet are routed through an entry point to a load balancer, which distributes the requests to different servers based on how busy each server is.
The image above shows a clear distinction between the 4 types of service model in software provisioning. In the rightmost diagram (SaaS), the cloud vendor, Microsoft, is also a SaaS provider that provides various software for users to "consume" like OneDrive and Office365. It manages everything from the application to the networking layer. The customer does not need to do anything at all, and just consumes the SaaS software on demand.
In the leftmost diagram is a company having its own legacy IT infrastructure, preferring to manage everything on-premise and managing physical servers on site to host the infrastructure required.
In the middle are different levels of management by the cloud vendor, Microsoft, for its Azure cloud technology. This ranges from companies renting the operating system servers from Microsoft Azure and managing them in the cloud (IaaS), to companies focusing on the building of the application and data (PaaS) while Microsoft Azure manages the rest.
Customers and the SaaS provider alike have the option of choosing from IaaS and PaaS for their cloud.
Remember when we said that the virtual machines need to be configured differently to become WEB/ENG/SQL servers and monitored closely to make sure that they work properly? This complexity is abstracted away at the PaaS level, as everything is already preconfigured by the cloud vendor.
All the SaaS provider needs to do is to determine how many workers it needs for the application at any given point in time and scale it up/down accordingly.
The SaaS provider only needs to take care of the application (developing the software) and scale the number of workers required to have the application working in Microsoft Azure's hosted PaaS.
The SQL server is configured by default and the SaaS provider just needs to take care of the database storage and retrieval. All the virtual machines that are needed at the IaaS level are working "under the hood" and taken care by Microsoft, computing power is scaled up/down to whatever is required and security features for the resources are enabled easily from the portal.
With all these benefits of PaaS, why would a company go for IaaS?
IaaS is needed when there is a lot of customization to the servers needed at the operating system level.
This is usually in the areas of performance (CPU/Memory/IOPS) or security. Third party software for these areas, as well as for server monitoring purposes, may also be needed within these servers. PaaS does not have that flexibility, since it is abstracting away the complexity at the cost of customizability.
When the customer chooses to self-host the infrastructure on their own premises, the responsibility of provisioning and maintaining these resources will lie with the customer. Enterprise customers usually prefer this, as they tend to have significant investments into their own infrastructure.
This could be managing physical servers and data centres deployed on their premises, and utilizing a private cloud that allows them to enjoy the benefits of cloud while running on these physical infrastructure.
Private cloud solutions like Red Hat's OpenStack Platform, Amazon's Virtual Private Cloud or Microsoft's Azure Stack allow customers to gain the benefits of cloud, without giving up the control of their own data centre architecture or connecting to the internet.
Private clouds are driven by concerns around security and compliance, and keeping assets within the company's firewall which is shut off from the internet.
Their IT teams look after high performing databases and network security, while the SaaS provider just needs to provide a copy of the software for customers to install into their own infrastructure. Whenever an update is needed for a new code release version, an update window is maintained to update the software to the latest version.
In contrast, the public cloud is run on the physical servers and data centres around the world of cloud vendors like Amazon and Microsoft, and computing resources are provisioned over the internet.
There is no control over which servers on the server racks within the data centres are yours, and the most that the customer can control is to choose which region the data centres have to be located in order to maintain data sovereignty and security compliance.
Hardware, application, bandwidth and security costs are covered by the cloud vendors. This makes it less expensive than having your own physical infrastructure, which is more economically-feasible for most small to medium sized businesses.
On the other hand, private clouds are quite expensive with medium economies of scale when compared to the public cloud, so they are usually used by enterprises.
If the SaaS provider is using IaaS as its primary cloud infrastructure, the customer may request to have a single-tenanted public IaaS cloud.
This is where its cloud infrastructure is managed by the SaaS provider, but it is totally isolated from other customers of the SaaS provider. Do note that the cloud resources are still running on cloud vendors' physical servers and data centres around the world and deployed over the internet, so it is slightly less secure than a private cloud running on customers' own infrastructure.
A single-tenanted public cloud is usually requested by customers who do not want to host their own cloud resources on-premise, but still want the control and security that comes with it.
The customer pays additional fees (on top of the usual subscription fees) every month to the SaaS provider in order to maintain these servers.
This allows the customer to have full control over what is deployed in this environment and have their own WEB servers, SQL server and so forth. A formal approval process is required every time the SaaS provider does a code release, which is similar to how it will be done on-premise.
The extra maintenance costs required to maintain a single-tenanted public cloud for every customer, even with the injection of additional revenue for this setup may limit a SaaS provider's ability to scale, if every additional customer requires such a solution.
On the other hand, code release updates are usually controlled by the SaaS provider in a multi-tenanted public cloud. This means that in a multi-tenanted public cloud, the SaaS provider can be infinitely more flexible and agile in terms of product development.
Multi-tenanted public cloud is when multiple customers are hosted in a shared public IaaS cloud.
The customers share the cloud resources within the multi-tenanted public cloud, and the SaaS provider uses a pay-as-you-grow business model where customers can choose to upgrade to the next tier of payment plan provisioned with more cloud computing resources.
Since the infrastructure is shared, it results in greater flexibility in terms of deployment for the SaaS provider, since every customer in the public cloud will enjoy the latest updates to the software at the same time.
There are economies of scale in terms of resource provisioning, as resources can be scaled according to bulk analysis of the usage of all customers at different periods of time.
It is absolutely critical to make sure that cybersecurity is paramount in such cloud systems. A malicious cyberattack such as DDOS, virus or malware can easily bring down the whole virtual network of servers and impact every customer within it.
A balanced solution is needed to serve the business needs for both the SaaS provider and customers.
It is one that embraces performance and security, while allowing the SaaS provider to scale fast and keep their maintenance costs low.
This is where a semi-shared public cloud comes into the picture, enabling the SaaS provider to combine shared and dedicated cloud infrastructure together.
For the usual multi-tenanted shared public cloud, multiple customers' databases are contained within the same disk of one virtual machine.
If one customer is hitting the disk hard, the performance of other customers will be impacted in terms of IOPS (Input/output operations per second).
To improve the IOPS, different customers can have their own data disk for their own SQL database. This improves IOPS, but not CPU and Memory performance, since they are still hosted on the same virtual machine.
To improve CPU and Memory performance, the customer can have its own virtual machine configured for its SQL server and database that is running on its own disk. This allows each customer to have optimal IOPS, CPU and Memory performance that is not affected by other customers. Other cloud resources such as web servers can still be shared, so that it is more scalable than a full-blown single-tenanted environment.
The next level to this is a hybrid cloud, which combines the customer's own physical infrastructure for some applications with the public cloud infrastructure provided by the SaaS provider for other applications.
Customers maintain control of an internally-managed private cloud, while relying on the public cloud as needed. During peak periods, some software can be migrated to the public cloud. This is also beneficial during predicted outages, such as scheduled maintenance windows.
Container technology such as Docker allows the virtualisation of a single application into an isolated instance at the application level rather than the server level, while sharing the host operating system with other containerized applications in order to deploy application-specific functionalities.
This is sometimes known as CaaS, or container-as-a-service.
A virtual machine is an entire instance of an operating system, with a kernel and device drivers competing with other virtual machines on a hypervisor to access system resources. Each needs its own guest operating system to run on the host operating system through a hypervisor, which is more resource-intensive than a container.
Unlike virtual machines, containers use just enough resources while running on one shared host operating system to perform the tasks needed and are started up more quickly.
Because they share a common operating system, only a single operating system needs care and feeding in terms of operating system updates, bug fixes and patches. After the shared operating system is updated, the containers will inherit all these updates since they are running on it through memory cloned copies of the same shared libraries.
Containers can also be copied easily to other servers and private/public cloud deployments, and do not require configuration which means less setup time and testing.
Docker Swarm also enables clustering capabilities that allow grouping of containerization hosts (each with their own set of containers) together, and is available on major cloud providers like AWS and Azure.
This technology is misleading in its name, referring to itself as "serverless" when it still runs on servers, but the name comes from the ability of customers to pay only when a function within a program is executed.
A pre-defined event that triggers the code within a program will cause the "serverless" cloud to execute the task using the most precise amount of compute resources of which customers pay for.
This is in contrast to the usual cloud computing payment model, where customers pay the cloud vendor according to the number of servers or worker roles that they use.
The amount of precision with this form of technology goes even further than the application level of containerization or the operating system level of virtual machines.
It is still early days for this form of technology, since management tools for this form of technology is still scant, developers will need to write code in a different way and these serverless functions do not store state which limits its capabilities to certain use-cases.
As cloud computing technologies push into the next frontier, we see the costs for cloud computing go down while its capabilities go up. The ones to benefit the most from this evolution are the end-customers, as cloud vendors like AWS, Azure, Google and Alibaba fight to get their market share of the multi-billion dollar cloud enterprise market.
This will greatly improve the ability of customers to deploy software at scale over the coming decades while keeping costs low. However, this can only happen if companies keep up-to-date with cloud technologies, in order to reap their benefits.
Leave me a message to comment about this blog post!