One of my first blogs was an introduction to non-technical people about Docker (https://www.linkedin.com/pulse/docker-dummies-joris-lochy) and last year I wrote a similar blog on DevOps (https://www.linkedin.com/pulse/devops-dummies-joris-lochy). Recently I joined the "Merit-VC" platform (i.e. https://www.merit-vc.com/ - a platform to train yourself in VC-funding), where I got the assignment to write a report on the trend of "Serverless". I thought it would be interesting to share my conclusions in the form of a third "for dummies" blog, introducing another innovative technical concept to non-technical people, namely the concept of "serverless".
Before introducing serverless it is however important to have a notion about cloud computing. Cloud computing allows to "rent" servers from cloud companies instead of having to setup and maintain your own infrastructure (data centre). The advantages are a switch from CapEx to OpEx (you pay only for what you use), a much higher flexibility to onboard/offboard servers (scalability based on your business needs) and you can avoid having to attract the specific skills required to properly operate infrastructure. Additionally most cloud providers have built all kind of abstraction layers, which allow to setup and maintain servers and the software deployed on them easier and faster.
This cloud market has known an exponential growth in the last years, which was even further accelerated by the Covid-crisis. Based on a report of Canalys, the market was estimated to around $142 billion for the year 2020. In the market there are 4 dominant players, i.e. Amazon AWS (31% market share), Microsoft Azure (20% market share), Google GCP (7% market share) and Alibaba Cloud (6% market share, although this is mainly in Asia). This means also that there are dozens of other parties with less than 5% market share still forming together a total market share of 35% (like Oracle, IBM, Tencent, DigitalOcean, SalesForce, Verizon Cloud…).
The most common service bought from a cloud provider are still servers (which are actually virtual machines at the cloud provider), like Amazon EC2, Azure Virtual Machines, Google Compute Engine or DigitalOcean Droplets. These servers can be added/removed via a simple user interface (with the user being able to choose the size of the virtual machine, the availability…), giving a very dynamic server management. On the server, the company can then install any software.
Over the years cloud providers have however started to offer more and more services, which abstract away the underlying infrastructure. The most common ones being:
Storage services, i.e. a simple service where files can be stored and retrieved via an easily accessible API. Most known examples are Amazon S3, Azure Blob Storage, Google Cloud Storage, DigitalOcean Spaces…
Database services in all forms, like the most common SQL databases (like PostgreSQL, Oracle, MySQL or Maria DB) and noSQL databases (like MongoDB, Cassandra, ElasticSearch, HBase…). Typical examples being Amazon RDS, Amazon Dynamo DB, Azure SQL Database, Azure Cosmos DB, Google Cloud SQL, Google Cloud BigTable, MongoDB Atlas….
Docker container management, like running containers in a flexible, scalable and reliable way, all or not on Kubernetes. E.g. Amazon ECS, Amazon EKS, Google GKE, Azure AKS, Red Hat OpenShift Container Platform…
Content management systems and eCommerce platforms, like Wordpress, Drupal, Magento…
Identity management, like Auth0, Amazon Cognito, Azure AD…
But this is just the tip of the iceberg. Every cloud provider has an offering of hundreds of managed services, making it sometimes extremely difficult to find your way in this offering.
These abstractions have led to the new term of serverless. This doesn’t mean that there are no servers anymore, but rather that the underlying servers are fully abstracted away for the consumer of the service, i.e. the allocation of the infrastructure (server) is fully managed by the cloud provider.
The services can be the services described above (also called managed services, managed cloud, backend-as-a-service or BaaS), but it can also be services directly offered to developers in the form of functions which can be requested to be executed via an API. This type of serverless is called "Functions-as-a-service" (FaaS), with the most known ambassador being AWS Lambda, which is the implementation of Amazon of this service. Of course the other cloud providers have in the meantime similar offers like Google Cloud Functions, Azure Functions or IBM OpenWhisk.
Simplified, this type of serverless means the consuming company requests to execute a specific function (a piece of code). The cloud provider then deploys the software component (at run-time) on one of their servers (totally abstracted away for the consumer) and executes it. Theoretically this means that a company does not have the deal anymore with servers, has almost unlimited (auto-) scalability and only pays for what it consumes (i.e. you never pay for idle resources). The downside is the complexity and the performance. The complexity comes mainly from the fact that applications become a complex orchestration of small units (most cloud providers set quite strict time-out times to execute a FaaS requiring software to be split in small units) which are executed and from the fact that each function needs to be fully stateless. This means any data (used as input or generated as output by the function) and logging/tracing information needs to be stored by a separate service. The performance impact comes mainly from the time needed to deploy the function on a server. This is a domain where cloud providers try to optimize, by keeping certain functions "hot" (already installed) on a server and by optimally predicting (and pre-installing) which functions will (soon) be required (in the near future). However these techniques have their limits, as obviously a cloud provider cannot keep all functions installed on several server instances (to cope with potential loads), as this would make the economic model for the cloud provider impossible.
The ultimate goal of both serverless techniques (i.e. BaaS & FaaS) is of course to save money for a company. While in many cases these techniques can save money, this is not always the case. As always, it depends on the specific needs of the customer. Typically if you have a high and consistent (not a variable) usage and are a large corporate, these solutions might not be the best option (as price will likely be higher and the increased complexity and potential performance impacts outweigh the advantages). However for other use cases, like e.g. a start-up or scale-up, with very bursty and changing loads, and with a limited team having to cope with all IT and infrastructure aspects, this kind of services can be ideal.
However next to the infrastructure and scalability impacts, it is also important to know that FaaS is also a methodology, i.e. a way to implement software, with following characteristics:
Code is split into small modular components (microservices), which are orchestrated together for the software
Every component needs to be stateless and its execution should be finished in a limited time. The result is that such a component is by definition fault tolerant, as the function can be relaunched without any specific action in case of issues
The gains that can potentially come (in the long-term) of this development methodology can outweigh the possible infrastructure cost gain. In most companies, although infrastructure is a big cost, it is still marginal compared to the human cost of IT people working in IT change and in run departments.
As such the following questions should also be raised:
How much time can I gain in the IT teams with this new way of implementing software?
How easily can people collaborate together in this architecture?
How easy is it to onboard additional people?
How sure I am, I will not have to refactor everything, because the associated technology has become obsolete?
How easy can I find IT people mastering the underlying technology?
…
The division of software applications in such smaller components is one way to give a more positive answer to those questions, but it depends of course on the type of software, the maturity level and culture of the organization and the character and style of the IT resources.
Independent of those reflections, it is clear that serverless is here to stay and will likely increase in the coming years.
As such following trend are clearly visible in the market:
Managed services offered by cloud providers become more and more powerful and functional (business oriented). While initially limited to storage and database services, the services are becoming much more business oriented, making the line with Software-as-a-Service (SaaS) and Business-as-a-Service (BaaS) more and more blurry.
Cloud providers build more and more abstraction layers on top of technical components. This makes the consumption of those services easier, but it also means that the setup becomes more opinionated and less flexible (cfr. my blog "Abstraction in Financial IT - How far can and should we go? - https://bankloch.blogspot.com/2020/02/abstraction-in-financial-it-how-far-can.html)
With software becoming more open source, cloud providers can provide excellent tooling, with very little investment. This creates a strong tension between cloud providers (like Amazon) on the one-side and (open-source) software companies (like MongoDB, Elastic, Confluent or Redis Labs) on the other side. A new form of alliance between both types of companies will be essential, with cloud providers bringing the infrastructure and DevOps tooling and the software providers providing the in-depth expertise of the specific software. Till now many software companies have tried to fight the cloud providers by changing their license policies (cfr. story of Redis), but this makes their product at the same time less future-proof and less desirable.
Functions as a Service will become more common, as companies switch more to the cloud, microservice based architecture become more popular, developers become more acquainted with this technology, the prices of FaaS become more competitive and the potential performance issues linked to FaaS (to deploy a function) become better managed.
After a first wave of companies shifting from on-premise infrastructure to the cloud, now you see a 2nd wave to multi-cloud setups. This gives the advantage of not being locked-in by one cloud provider, being able to offer a higher worldwide availability and better performance (as none of the cloud providers have data centres in every country) and allowing to choose the best managed service of every cloud provider. E.g. while AWS has the richest and most customer-centric offering, GCP has probably the best offering when it comes to Big Data and Machine Learning processing, while Azure has a lot of advantages via its link with the productivity tools (like Office 365, Teams, Sharepoint…). However in order to be able to able to work multi-cloud it is important to use a little as possible specific abstractions of cloud providers. This means for FaaS that the specific cloud provider frameworks (like AWS Lambda) should be avoided and open source frameworks like Knative, OpenWhisk, Kubeless or OpenFaaS should be adopted.
Even though enormous steps have been made in serverless in the last years, it is clear this domain is still in its embryonic stage, meaning significant developments can be expected in the coming years. I am looking forward to further following the exciting innovations.
Comments
Post a Comment