One of the big trends of 2016 was the rise of “serverless” application architectures. The most visible was AWS’s Lambda product, but Microsoft has Azure Functions, and Google has Cloud Functions. But what about organizations that want serverless but must run their IT on-premises? Cloud services are not an acceptable option for some businesses, often due to regulatory limitations. Other businesses need a range of options to suit different needs, such as different cost and performance profiles. Is there any way to have serverless on-premises? The cloud fan’s usual objection is scalability: no on-premises data center has the scale of a cloud provider. On-premises clouds only need to cope with the scaling of one organization. Private clouds also benefit from far greater visibility to the business cycles. Private cloud peaks are somewhat predictable. I think that more relevant issues are complexity and skills. Does the IT team have the expertise to build and operate a serverless platform?
First off, what parts do you need to run a serverless platform? Serverless products all work by running a small piece of application code in response to an external trigger. One element is the ability to run the application code. You need a runtime for that code. The runtime needs to be able to rapidly start new code instances and provide some isolation between those instances. Containers are an enabler for that runtime. When a function needs to run, a container is started, and the application code is passed into the container. When the code completes, the container exits or resets to a clean state. A crucial part of any serverless platform will be a good container management tool that can scale out to fit the serverless workload. Another crucial part is a dispatcher that will watch for the trigger event and launch the container with the application code. Like the remaining parts, the dispatcher will probably run in containers on the container platform. There are a few other essential functions, like a user interface and integration into a source control system. While the main work is done by the dispatcher and container platform, there can be a lot of additional complexity. Cloud providers need to accommodate massive scaling as well as the massive burden of multi-tenant isolation. Building a serverless platform is a complex undertaking for both cloud providers and in-house business users.
How hard is it to build these parts into a serverless platform on-premises? The good news is that there are options. One open-source option is IBM OpenWhisk, its Functions as a Service (FaaS) platform. FaaS is just another way to say serverless. OpenWhisk may suit customers with a large infrastructure team or a budget for consultancy around building out a production deployment. One nice feature is the ability to deploy OpenWhisk on a public cloud platform or on-premises. Having the same FaaS platform on multiple platforms is great for application lifecycle management. Cheaper and lower-performing FaaS will suit development. Production deployment will probably demand high performance and more costly FaaS. Another multiplatform and open-source serverless platform is Iron.io, which favors functions created as containers. Directly using containers allows Iron.io to support far more programming languages for functions.
There is another option: you can deploy a managed serverless platform on top of your managed cloud, private or public. I am sure there will be more products in the category, but the one I have seen is by Platform9. You may recall that Platform9 launched with managed OpenStack as a service. It runs the OpenStack components in the cloud for you. You run the workloads in your data center but can manage them with OpenStack APIs. Platform9 has recently added managed Kubernetes as a service. Right now, Platform9 can manage your container platform from the cloud. In fact, it can deliver managed Kubernetes on top of public cloud as well as on your private cloud. The latest thing from Platform9 is an alpha version of Fission, which will deliver a managed serverless platform on top of the managed Kubernetes platform. The central value proposition here is that Platform9 is a cloud provider with scale, yet your workloads can run on-premises or in public cloud. Platform9 runs a multi-tenant cloud service provider infrastructure, just like AWS or Google, but does not run the workload part. Its customers get the benefits of a cloud platform managed by a cloud provider and can choose where they want the workloads to run. Platform9 provides a simple way for customers to run both Kubernetes and serverless without building or managing unfamiliar infrastructure.
On-premises serverless is available in different forms for different organizations. You can build your own serverless platform, or you can engage a professional services organization to build it for you. If that all sounds too expensive or too slow, then you can get serverless as a managed service.
Disclosure: I learned about Platform9 at Tech Field Day 13. See my standard TFD disclaimer here. I also did some writing about its managed Kubernetes for Platform9. Platform9 did not commission or review this article: it is all my opinion, and any assumptions, conclusions, or inaccuracies are mine.