Cue the obligatory “There still servers in serverless” and “There is no cloud; it’s just someone else’s computer.” Like many, I’m not a fan of the term but it’s seemingly here to stay. I’ll get over it, just like I did with private cloud. In any case, the more interesting question is what’s going on with serverless—which is what took me to Serverlessconf in cool, gray San Francisco last week.
This is the point where it makes sense to introduce serverless for anyone who may have heard of the term but hasn’t studied it closely. And that turns out to also be a good segue for discussing the conference as a whole. As recently as last December, I was on a panel and a member of the audience asked us about the difference between serverless and Function-as-a-Service. We were able to offer the beginnings of an answer at the time—not that everyone was quite singing from the same hymnal—but my sense is that most everyone is in alignment now, with a caveat that I’ll get to presently.
So what are serverless and FaaS? For that I’ll turn to a recent blog post by my Red Hat colleague William Markito Oliveira who wrote in a recent blog post:
Functions-as-a-Service (FaaS) is an event-driven computing execution model that runs in stateless containers and those functions manage server-side logic and state through the use of services. Serverless is the architectural pattern that describe applications that combine FaaS and those hosted (managed) services. MartinFowler.com has a great article that provides more details and the origin of the terms.
In other words, FaaS is one component of serverless. But an application written using serverless patterns will also generally use a variety of standard building blocks to provide common services across many applications. Databases, authentication, and proxies are examples of services that many different applications require. These will be managed by an operations team; from a developer’s perspective, it doesn’t matter if that team works for the same company and runs them on-premise or if the team is employed elsewhere, such as a public cloud provider.
This brings us to my caveat. While most everyone agrees on what makes for a serverless architectural pattern, there’s far less unanimity on the degree to which this pattern mostly applies to public clouds only, fits with various hybrid application development and deployment models, and over what timeframe the assumed shift to increased serverless usage takes place.
Serverlessconf itself rotates fairly far on the public cloud angle. But that really shouldn’t be surprising. The organizers of the show are a training organization focused on public clouds. Of course, they’re not the only ones to see serverless as part and parcel of the rich set of public cloud services that complement FaaS on public clouds. The finer pricing granularity of many of these cloud services (including FaaS) relative to per-hour or even per-minute on Amazon Web Services EC2, for example, is also seen as a feature that doesn’t really translate to an on-premise environment. (That said, there was far more emphasis at this conference on developer productivity advantages than on pricing models; I want to say this represents at least a shift of degree from this conference in New York last year.)
At the same time, a number of talks expressed a pragmatic recognition that serverless and FaaS isn’t for everyone, at least today. Amiram Shachar disused “Shipping Containers as Functions.” Yochay Kiriaty pointed out “Mistakes and Anti-Patterns in Serverless (or when NOT to use Serverless).” Kiriaty noted that serverless best fits with a specific async and event-driven programming model. Other characteristics that are mostly needed to benefit from serverless include: stateless logic, idempotence of functions, one task per function, and functions that finish quickly and avoid recursion.
More generally, Erica Windisch argued that 12 factor provided guidelines. But serverless enforces them. 12 factor is most associated with early hosted platform-as-a-service, so this may give you some sense of the type of applications that are primary serverless targets today.
A tweet from Andrew Clay Shafer that I assume was inspired by this or another talk stated: “Serverless is a particularly opinionated PaaS.” This is worth pondering, if only because I think there are a lot of hard and fast lines being drawn around what are essentially architectural patterns: serverless, containers, PaaS, VMs, IaaS, CaaS (containers-as-a-service) whereas it’s more of a continuum with adjacencies that blend into each other and combine features. A topic for another day.