The paper Cloud Programming Simplified: A Berkeley View on Serverless Computing (2019) by Jonas et al. summarizes the current state of cloud computing. The authors provide a brief history of cloud computing, including an accounting of the predictions made in the 2009 Berkeley View of Cloud Computing paper. They discuss the emergence and motivation of serverless computing, and describe applications that stretch the current limits of serverless computing. The authors then discuss how they feel the state of serverless computing should progress and make predictions as to where they see serverless computing moving in the future.
The authors begin with a recounting of their 2009 paper and addressing the advantages that have been realized following the mass adoption of cloud computing as well as issues that have also surfaced. Here, the authors focus on the difficulty of managing cloud computing services. Although users moved to cloud computing due to clear cost and logistic efficiencies, users seemed to have preferred low-level services which mimic traditional server workflows, such as those offered by Amazon’s EC2, versus services which abstract the system administration tasks, such as those offered by Google’s App Engine. The downside of utilizing these lower-level services is that the users would have to manage the virtual machines themselves. As a result, users have essentially traded the complexities of self-hosting for that of cloud-hosting, so cloud-computing services have started offering more serverless computing in an attempt to eliminate unnecessary complexity for developers.
Serverless computing attempts to abstract away as much of the system administration tasks as possible, allowing users to develop the functionality of their applications directly without having to manage any servers. Serverless computing essentially consists of FaaS (Functions as a Service) and BaaS (Backend as a Service). Serverless computing has become a popular offering from many cloud platforms, including Amazon’s Lambda, Google’s Cloud Functions, and Microsoft’s Azure Functions, which all act as FaaS.
In a serverless platform, the user writes a function in a high-level language and defines the event which should trigger the function. The serverless system handles everything else, including scaling, deployment, fault-tolerance, etc. The authors offer three critical distinctions between serverless and serverful computing. Compared to serverful computing, serverless computing offers decoupled computation and storage, executing code without managing resource allocation, and paying in proportion to resources used instead of for resources allocated.
The authors contextualized serverless computing by differentiating it from other PaaS (Platform as a Service) offerings, such as Google App Engine, through the fact that serverless computing offerings charge users for the time their code was actually executing versus for the resources reserved to execute their program. The authors also note that BaaS offerings play an essential role in the success of serverless computing. BaaS offerings (such as Amazon’s S3 or Google’s Firebase) have been heavily utilized since the cloud computing started becoming popular. In a serverless setting, these offerings are required to construct the backend for the application. As cloud platforms started offering serverless solutions, users were able to easily transition from serverful to serverless since many of their applications were already utilizing BaaS offerings through these platforms.
Next, the authors present an overview of limitations in serverless computing platforms through experimentation with example applications they’ve constructed. These applications include real-time video encoding, MapReduce, linear algebra, machine learning training, and databases. The authors chose these applications as they represent different tasks which would gain great value through fine-grained autoscaling but offer challenges which are difficult to overcome in a serverless setting. These challenges include inadequate storage for fine-grained operations since serverless solutions are stateless in nature, lack of fine-grained coordination, poor performance for standard communication patterns, and predictable performance. The result of these experiments is that serverless solutions may be used to solve aspects of these kinds of tasks effectively, but other aspects are not yet feasible rendering the approach unusable.
With the limitations of serverless computing outlined, the authors describe potential improvements for the paradigm that can resolve these issues and bring serverless computing to more applications. The authors suggest that the inability for the user to control resource requirements and define data dependencies greatly hinders computation heavy processes. The lack of high-performance storage (both ephemeral and durable) that can be utilized between functions is also highly limiting for many applications, and relatively long startup time for functions as well as low-performance coordination also makes many applications infeasible. The authors also highlight general issues with networking, security, and hardware which make serverless computing less appealing than it could be.
The authors conclude the paper with predictions about serverless computing in the next decade. The authors predict new BaaS storage services which expand the type of applications that run well on serverless computing, new billing models which will be in favor of serverless over serverful computing, serverful computing will be to facilitate BaaS and applications which are difficult to write in serverless settings will be offered as BaaS from providers, and that serverless computing will overtake serverful computing as the default paradigm in the cloud era.
This paper’s biggest contribution is that it acts as a checkpoint of sorts for cloud computing (as did its predecessor and will likely be the case for its successor). Functionally, this paper serves as a wishlist of sorts- by describing the current limitations of serverless computing, the authors are implicitly prompting others to work to improve the state of cloud computing. As a side effect, this paper also serves as a historical audit which may allow future researchers and developers to assess the then-present state of cloud computing to see how this area actual did evolve so that they can extrapolate into the even further future.
The authors also managed to give some more precise definitions to these recent innovations in cloud computing. Since cloud computing is progressed by companies who are not necessarily interested in being confined to explicit descriptions or rigorously examined services, cloud computing evolves regardless of our understanding of it. This paper works to resolve some of this ambiguity.
Finally, the paper aims to explicitly call out limitations of serverless computing. One pervasive issue in the technology industry is that of “hype,” which can prevent users from realizing the short-comings of products and services offered by these companies. By providing examples of applications which fail to work effectively in serverless settings, the authors highlight areas which should be improved which otherwise may not have been emphasized.
The paper, itself, reads more as a discussion than of technical writing. The authors provide plenty of tables and diagrams to organize comparisons and outcomes, but otherwise rely on natural descriptions of their thoughts, experiments, and critiques so that the outcome of reading this paper is not convoluted. The structure of the paper helps with this, too. By starting with the history of cloud computing and incrementally including more lower-level information, the authors paint a narrative which is conducive to their goals of encouraging the improvement of serverless computing.
With this in mind, I feel the paper is hurt by the lack of technical descriptions and experiments. Although the authors give sufficient summaries of their experiments and issues relative to their goals for this paper, there isn’t a solid call-to-action which can be immediately inferred. This paper works well to excite the reader, but does little to direct the reader.
Although it may not be appropriate for this paper, I would like to see more granular examples and experiments explored and to see more conclusive results. It would be infeasible to reproduce their findings, and a lack of such a baseline in this respect means that those who may be looking at improving serverless computing face the challenge of having to do this themselves.
Another issue I found with the paper was a lack of creativity on the author’s part. Although their discussion and experiments focused on real-world applications and how serverless computing fits into the current state of cloud computing, the lack of discussion of new paradigms in cloud computing felt unjustified and apparent. For example, as FaaS becomes more and more popular, could there be a shift in general programming methodologies which focus on a code base to that of atomic functions? Will functional programming become more popular compared to OOP given this architecture? I imagine programs becoming more modular, where functions are combined to form program flows versus raw code and developers focus on reusability (something which is already becoming wide-spread due containerization).