#43: Containers, Docker, Kubernetes and Serverless - explaining Serverless

Over the current few episodes I am introducing a number of technologies from modern Software Delivery.

These are:

  • Containers
  • Docker
  • Kubernetes
  • And Serverless

There are "hot" technologies within Software Development at the moment.

They are helping Software Teams:

  • Get Better ROI when spending on Computer Servers
  • Improving the speed to market
  • Allowing for more complex and ambitious solutions

These are technologies that your Development Team may want to use or may even be using.

In episode 40, I explained Virtualisation; a technology that makes the other possible.

In episode 41, I introduced Containers and the Docker Container format - a technology that allow us to achieve greater ROI from our physical servers, improves our developer productivity and increase access to the tools they need.

In episode 42, I introduced Container Orchestrators and Kubernetes; a technology for running complex containers based solutions; helping us to:

  • Ensuring consistent load across our physical machines - giving better ROI through higher density usage
  • Starting and stopping containers based on load - again giving better density and being more resilience to inconsistent workloads
  • Self healing to avoid costly and embarrassing outages
  • Proving a platform to allow multiple containers to operate as single system
  • And automating many, previously, manual tasks

In this episode I will move onto the Serverless technology.

I will also close out this little series on "hot" technologies, by talking about them in the Cloud and the future of these technologies as I foresee it.

Or listen at:

Published: Wed, 03 Jun 2020 19:03:27 GMT


Let's start with "Serverless".

Wikipedia describes serverless as:

"a cloud computing execution model in which the cloud provider runs the server, and dynamically manages the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity. It can be a form of utility computing.

Serverless computing can simplify the process of deploying code into production. Scaling, capacity planning and maintenance operations may be hidden from the developer or operator"

For the purposes of this episode, I want to put cloud and the billing model to one side. I want to focus more with why to use serverless.

Amazon Web Service (AWS) answer that question with:

"Serverless enables you to build modern applications with increased agility and lower total cost of ownership. Building serverless applications means that your developers can focus on their core product instead of worrying about managing and operating servers or runtimes, either in the cloud or on-premises. This reduced overhead lets developers reclaim time and energy that can be spent on developing great products which scale and that are reliable."

I want to talk about the simplification that serverless can bring our development teams over containers and the container orchestration.

The promise of serverless is that the Development Team just turn up with their software and ask for it to be run.

They shouldn't need to even think about the underlying server that executes it - physical or virtual.

The term serverless doesn't mean that there isn't a server there ... Just that we shouldn't care about it.

Predominately serverless is talked about in terms of Cloud computing - such as via Amazon Web Services or Microsoft Azure - something I will come back to later.

But the same benefits can be seen on premise with the appropriate technologies - generally a platform over top of a Container Orchestrator like Kubernetes.

Adding serverless over something likes Kubernetes aims to make its use easier for software developers - thus increasing productivity.

And largely this is where the line starts to blur between Serverless and a Container Orchestrator like Kubernetes; a blurring that can make it difficult to see which one to use.

So would I recommend serverless or Kubernetes?

To be honest it depends;

There are trade offs in using serverless or Kubernetes.

There are certainly many passionate arguments in the software development community over which is better.

For me, it depends on the task as hand.

Both are great tools. But not every tools is right in every situation.

Largely I see Serverless as easier to start with, but can be quite difficult to manage complex situations.

Whereas Kubernetes can be more complex to start with, but seems to be a lot more suitable when it comes to complex situations.

With all things being equal, I would personally favour Kubernetes - but I have spent considerable effort to train myself in how to use Kubernetes - whereas most development teams haven't.

And even then it would depend what the solution is intended to solve.

In the future I expect to see much more synergy in Serverless and Kubernetes - a cross pollination of ideas - probably arriving at a similar destination.

Even then I don't see either as being the "last thing in software development".

Both are a step along the journey. Even their successor will be but another step.

This can be one of the must wonderful - but also most frustrating - part of Software Development - there is always something new to help us be more productive and innovate further.

I've always been a fan on the term "standing on the shoulders of giants"; a metaphor which means "Using the understanding gained by major thinkers who have gone before in order to make intellectual progress".

I said earlier that I would touch on the Cloud.

I first introduced the Cloud back in episode 9. A utility type service allowing us to purchase computing capability based on actual usage - similar to water and electricity.

The Cloud allows us to access computing capability without the need to purchase physical servers.

Cloud Computing is only possible because of the virtualisation that I've talked about in episode 40.

The Cloud providers - such as Amazon, Google and Microsoft - are still purchasing and running physical servers. Their business models are based on being able to rent out the capacity on those servers through virtualisation - achieving a significant enough density and utilisation to be able to rent them out for more than they cost.

The Cloud Providers allow us to start a virtual server easily and quickly - without the need to purchase and maintain the physical equipment in our own data centres.

The Cloud Providers also provide us with the means to run containers and serverless applications.

They have all invested significantly in both technologies.

Each have a variety of ways to run Container based applications - with most also including hosted versions of Kubernetes.

This allows us to gain the power and capabilities of Kubernetes without the overhead and complexity of setting up in our own data centres.

And the same is true with Serverless.

I would point out the differences in the Serverless implementations - they are generally quite proprietary to the specific Cloud Provider.

For example, it would be quite difficult to move a serverless solution from Amazon Web Services to Microsoft Azure.

There are technical approaches out there that can help with that, but I believe we are a distance away from that being practical across multiple providers.

Whereas, Kubernetes provides a much more standard platform.

In most cases, you should be able to move a Kubernetes solutions from Amazon to Azure to Google - and even to Kubernetes running in your own data centre.

Kubernetes, by its very nature and design, is intended to work consistently everywhere.

There will be edge cases - cutting edge new technology for example - that may not be available across all providers. But the core capabilities for Kubernetes can be relied on.

Over the last few episodes, I talked about a number of important technologies in use today to achieve better ROI. Better return achieved from

  • the spend on physical computer servers
  • productivity of our Software Developers
  • and reliability of our software solutions.

I've covered a variety of terms that you may hear from your Development Teams today;

  • Containers
  • Dockers
  • Kubernetes
  • Serverless

I talked about each and how they have evolved from a common lineage of the virtualisation of physical computing.

I've talked about the pros and cons of Kubernetes and Serverless - and how they represent themselves in both our own data centres and in Cloud Providers such as Amazon Web Service and Microsoft Azure.

I've also talked about the future as I see it for both Kubernetes and Serverless - and that neither are the end destination - and that many more innovations can be anticipated.

Thank you for listening.

I look forward to talking to you again next week.