Say Hello to Serverless Architecture & Nanoservices

Published on 7 Nov 2017

In the beginning

Life before the "cloud" meant a software development and deployment process usually quite dependent on the underlying hardware and operating system of your web servers, even when you were using virtual machines (VMs) where the actual physical hardware was abstracted.

Deploying to each server instance would usually mean copying files into a specific folder (for example, "inetpub/wwwroot" for a Windows server) via your preferred means; old school robocopy/xcopy, ftp, Octopus Deploy, or more recently even a fancy Docker solution to wrap up your entire app into a container that could be deployed virtually anywhere (more on Docker in another article though).

Whatever method you went with you would still be aware of what was hosting your application to some degree; the OS, the folder structure, the available memory, storage, and CPU for example.

Then came The Cloud

Cloud computing is all about abstraction; like VMs which slightly abstract the underlying server and can provide multiple concurrent systems (each of which utilise a percentage of the entire server's capacity), The Cloud takes this to another level. In general, we can talk about these levels of abstractions as Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

IaaS

Infrastructure as a Service is pretty much another name for Virtual Machines, but where you don't really know anything about the underlying server itself; you can just specify the capacity of the VM you need, and that’s what you’ll get.

One significant benefit of IaaS is how easily and quickly you can create your required environment, with scalability limited only by cost - and not by your own hardware.

However, you still need to be the caretaker of that machine, ensuring all security updates are applied, debugging any operating system level issues, keeping an eye on the CPU usage and disc space.

Who has time to worry about that??

PaaS

Platform as a Service is another level of inception.. uh.. abstraction. Assuming you’ve selected a suitably robust provider, you no longer need to worry about the underlying operating system, resources, security patches, processing power, available storage and so forth…

You can deploy your application to as many instances as you like, configured to scale up with whatever capacity requirements you think it may need (e.g. is it compute intensive? Do you expect huge amounts of concurrent requests? These questions will determine how much you spend on your PaaS offering…)

PaaS is well suited to a “Microservices” architecture, since you're able to think about each actual application in isolation; they can have their own development and deployment process and cadence, meaning it's well suited to an agile methodology that isn’t limited to a specific technology stack.

But with PaaS you still need to write and deploy entire applications for something potentially extremely small, like reacting to an event and updating a data store, or raising an alert. You may also need to scale the entire application no matter which slice of it is the most active, so you could end up with many instances of the application all being severely underutilised; this impacts the overall cost of your estate. If only you could just scale each tiny part independently and just pay for that. This is where "Serverless Architecture" comes in.

So what is Serverless Architecture?

Say hello to FaaS

Functions as a Service are synonymous with Serverless Architecture; whereas with PaaS you can only scale your entire application, with FaaS you can completely decompose it to the smallest scalable units: individual functions.

Deploying these can be as simple as copy-pasting code into a textbox in your cloud provider's interface - that's how incredibly small they're meant to be. One function, one capability, one task.

FaaS is well suited to the reasonably new concept of “Nanoservices” architecture. However, cohesive development and deployment solutions are still in development. Continuous Integration and automated testing is a bit trickier, but not at all impossible.

They support many languages and can run on many operating systems, but that's no longer something you need to care about. Your function will automatically scale according to use of that one function, and you will only pay according to the compute resource utilised by that function.

The big cloud providers all have Serverless or FaaS offerings, so have a browse and see if you can make use of them.

Call us on 020 3137 3920 to find out how we can help