A mixed-method empirical study of Function-as-a-Service software development in industrial practice

https://doi.org/10.1016/j.jss.2018.12.013Get rights and content

Highlights

  • The first systematic study of serverless and FaaS cloud offerings.

  • Combines analysis of grey literature, interviews, and Web-based survey.

  • FaaS services are commonly used in the backend, although frontend usage is possible.

  • Adopting serverless requires a different, composition-oriented mindset.

  • Tooling availability and maturity remain barriers to entry.

Abstract

Function-as-a-Service (FaaS) describes cloud computing services that make infrastructure components transparent to application developers, thus falling in the larger group of “serverless” computing models. When using FaaS offerings, such as AWS Lambda, developers provide atomic and short-running code for their functions, and FaaS providers execute and horizontally scale them on-demand. Currently, there is no systematic research on how developers use serverless, what types of applications lend themselves to this model, or what architectural styles and practices FaaS-based applications are based on. We present results from a mixed-method study, combining interviews with practitioners who develop applications and systems that use FaaS, a systematic analysis of grey literature, and a Web-based survey. We find that successfully adopting FaaS requires a different mental model, where systems are primarily constructed by composing pre-existing services, with FaaS often acting as the “glue” that brings these services together. Tooling availability and maturity, especially related to testing and deployment, remains a major difficulty. Further, we find that current FaaS systems lack systematic support for function reuse, and abstractions and programming models for building non-trivial FaaS applications are limited. We conclude with a discussion of implications for FaaS providers, software developers, and researchers.

Introduction

Since its emergence, the programmable cloud has been a rapidly growing area of interest for application deployment. Various providers, including Amazon Web Services, Google Cloud, Microsoft Azure, and IBM Cloud (formerly Bluemix), offer services on different levels of the cloud stack, e.g., Infrastructure-as-a-Service (IaaS) or Platform-as-a-Service (PaaS). IaaS services often lend themselves to a “lift-and-shift” style migration, where entire applications can be migrated without deep changes as mostly self-contained virtual machines (VMs) or containers. However, PaaS services, which provide a higher level of abstraction, ask for more concessions in how applications are architected, built, and deployed in return for a richer development experience and more built-in features (Sharma et al., 2013). Ultimately, many applications deployed in PaaS clouds are “cloud-native”, in the sense that they are specifically built for the cloud, or even a specific combination of services, and cannot easily be operated anywhere else. This introduces a certain amount of lock-in, which practitioners are still often willing to accept in exchange for built-in elasticity and resilience, lower costs of operation, and a relief from having to manage their own infrastructure (Cito et al., 2015).

In recent years, the term “serverless computing”1 has gained momentum to describe the pinnacle of the cloud-native model: a “serverless” cloud application is deployed to infrastructure components that are entirely transparent to the application developer. The fundamental promise of serverless is sometimes pointedly described as “NoOps”, a wordplay on the well-known DevOps movement (Bass et al., 2015) that stresses that “no operations” is, at least in theory, required to maintain a serverless application.

The most prominent implementation of the serverless model are Function-as-a-Service (FaaS) offerings, such as AWS Lambda, Azure Functions or IBM’s and Google’s Cloud Functions. When using FaaS offerings, application developers provide source code of relatively atomic and typically short-running functions, and define triggers for executing these functions, for example HTTP requests or system events. The FaaS provider then, on-demand, executes and bills functions as isolated instances and scales their execution horizontally as needed. Ideally, application developers using FaaS benefit from simple deployments, reduced operation efforts, and pay-as-you-go pricing, while providers have the chance to efficiently serve large numbers of users and functions with relatively few resources.

Unsurprisingly, these advantages of FaaS do not come for free. FaaS-based applications need to adhere to a multitude of technical and architectural restrictions to ease their transparent management. For instance, functions deployed to AWS Lambda cannot, at the time of writing, retain state between invocations, need to finish processing in 5 minutes or less, have unpredictable execution time deviations and cannot make use of more than a single CPU thread (Malawski et al., 2017). More importantly, AWS Lambda and other FaaS services are ultimately intended to host small microservices implemented in a few hundred lines of program code. Composing larger applications from such stateless microservices, or decomposing an existing monolith into them, is still a challenging open issue (Mazlami, Cito, Leitner, 2017, Bass, Weber, Zhu, 2015).

In this paper, we present the first systematic study of software development for FaaS-based applications. Our study addresses the following research questions:

  • RQ1: Which types of applications is FaaS-based computing used for in today’s industrial practice? Which types of use cases is this technology valuable for?

  • RQ2: What are the key architectural patterns and best practices for building FaaS applications?

  • RQ3: What are the major advantages and challenges of using serverless and FaaS in practice?

Given the immaturity of our study subject, we use an exploratory mixed-method empirical research design to address these questions. We initially conduct a structured review of multi-vocal (“grey” Garousi et al. (2016)) literature (e.g., online blogs) and semi-structured interviews with 12 practitioners in the field. We use grounded theory, as well as open and axial coding, to generate a number of initial findings and hypotheses related to our research questions, which we then validate and refine based on a Web-based survey with 182 valid respondents.

Our study shows that FaaS is commonly used in backend scenarios, where the technology is often used to handle batch jobs. Building user-facing FaaS applications is possible, but requires careful design to deal with slow tail latency due to container startup. Adopting serverless requires a different mental model, where systems are primarily constructed by composing pre-existing services, with FaaS often acting as the “glue” that brings these services together. FaaS offers technical and business-related advantages, but managing and predicting deployment costs is difficult for larger applications. Further, tooling availability and maturity, especially related to testing and deployment, remains a barrier to entry. Finally, limited support for function sharing and the absence of a service ecosystem is seen as a challenge.

The remainder of this paper is structured as follows. We provide details on FaaS offerings, development of cloud functions and other important concepts in Section 2. In Section 3, we discuss our study design in detail, followed by an extensive discussion of results and study outcomes in Section 4. Section 5 discusses the main implications of these results and presents the central lessons learned for FaaS providers, users, and researchers. Section 6 puts our work in context of the existing body of research. Finally, Section 7 summarizes and concludes the paper.

Section snippets

Background

This section introduces the main concepts and architecture of Function-as-a-Service (FaaS) offerings. It further introduces selected technology stacks, providers, and developer tools including their characteristics and limitations.

Study design

We express the goal of this study based on the template defined by the TAME project (Basili and Rombach, 1988). The purpose of this study is to characterize the use of FaaS. Characterization helps in understanding and guides practitioners and researchers in the evolution of FaaS offering, related tools, and related software engineering processes. This study reveals common practices, advantages, disadvantages, challenges and opportunities of using FaaS. The here presented perspective is that of

Study results

We now discuss the main outcomes of our study based on the raw results published as open research data (Leitner et al., 2018). As not unusual for current trends in Web development, we have experienced that concepts and terminology around serverless are less than well-defined. Particularly, the very name “serverless” is a source of confusion, as there certainly are servers running any serverless application – they are simply invisible to the application developer, as also mentioned in A39.

Implications

The results of our study reveal implications for FaaS providers, consumers (i.e., application or system developers), and researchers, which we address in the following subsections.

Related work

FaaS platforms have been subject to a growing body of published findings. The covered fields include cloud functions in scientific computing (Ishakian, Muthusamy, Slominski, 2017, Spillner, Mateos, Monge, 2017) and edge computing, further application domains such as data analytics, and economic aspects. For a broad overview on general serverless computing research activities and literature, we refer to the summaries by the participants of the International Workshop on Serverless Computing (

Conclusions

In this paper, we presented results from the first systematic study of serverless and FaaS development. We conducted a mixed-method study that combined qualitative and exploratory elements with a structured, quantitative survey. Our results are based on the analysis of 12 interviews with professional developers who use, or have used, FaaS in the past, 50 frequently-discussed online articles or blogs related to the topic, and 182 survey responses. Our main findings are that successfully adopting

Acknowledgments

First of all, we would like the thank the twelve interviewees, for kindly taking the time to talk to us and share their knowledge, and the many respondents of our online survey. Furthermore, we would like to thank Jim Laredo for providing feedback on our questionnaire.

Philipp Leitner is an assistant professor in the software engineering division of Chalmers University of Technology and the University of Gothenburg, Sweden. He leads the Internet Computing and Emerging Technologies lab. Philipp received a PhD from Vienna University of Technology in 2011. He has published around 100 papers in the area of software engineering for service-, cloud-, and web-based systems, with a particular focus on performance testing and improvement.

References (40)

  • G. Adzic et al.

    Serverless computing: Economic and architectural impact

    Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering

    (2017)
  • Asay, M., 2018. AWS won serverless – now all your software are kinda belong to them. The Register website:...
  • A. Balalaie et al.

    Microservices architecture enables devops: migration to a cloud-native architecture

    IEEE Softw.

    (2016)
  • I. Baldini et al.

    The serverless trilemma: function composition for serverless computing

    Proceedings of the 2017 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, Onward! 2017, Vancouver, BC, Canada, October 23, - 27, 2017

    (2017)
  • D.M. Barbosa et al.

    Beethoven: an event-driven lightweight platform for microservice orchestration

    Software Architecture - 12th European Conference on Software Architecture, ECSA 2018, Madrid, Spain, September 24–28, 2018, Proceedings

    (2018)
  • T. Barik et al.

    I heart hacker news: expanding qualitative research findings by analyzing social news websites

    Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering

    (2015)
  • V.R. Basili et al.

    The TAME project: towards improvement-oriented software environments

    IEEE Trans. Software Eng.

    (1988)
  • L. Bass et al.

    Devops: A Software Architect’s perspective

    (2015)
  • L. Bratthall et al.

    Can you trust a single data source exploratory software engineering case study?

    Empir Softw Eng

    (2002)
  • G. Buchgeher et al.

    Microservices in a small development organization - an industrial experience report

    Software Architecture - 11th European Conference, ECSA 2017, Canterbury, UK, September 11–15, 2017, Proceedings

    (2017)
  • K.S. Chang et al.

    Visualizing serverless cloud application logs for program understanding

    2017 IEEE Symposium on Visual Languages and Human-Centric Computing, VL/HCC 2017, Raleigh, NC, USA, October 11–14, 2017

    (2017)
  • J. Cito et al.

    The making of cloud applications: An empirical study on software development for the cloud

    Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering

    (2015)
  • Conway, S., 2017. Cloud Native Technologies Are Scaling Production Applications. CNCF website:...
  • M. Crane et al.

    An exploration of serverless architectures for information retrieval

    Proceedings of the ACM SIGIR International Conference on Theory of Information Retrieval, ICTIR 2017, Amsterdam, The Netherlands, October 1–4, 2017

    (2017)
  • G. DeCandia et al.

    Dynamo: Amazon’s highly available key-value store

    Proceedings of Twenty-first ACM SIGOPS Symposium on Operating Systems Principles

    (2007)
  • T. Erl et al.

    Cloud Computing: Concepts, Technology & Architecture

    (2013)
  • G.C. Fox et al.

    Status of serverless computing and Function-as-a-Service(FaaS) in industry and research

    CoRR

    (2017)
  • V. Garousi et al.

    The need for multivocal literature reviews in software engineering: complementing systematic literature reviews with grey literature

    Proceedings of the 20th International Conference on Evaluation and Assessment in Software Engineering

    (2016)
  • V. Garousi et al.

    Guidelines for including grey literature and conducting multivocal literature reviews in software engineering

    Inf Softw Technol

    (2018)
  • W. Hummer et al.

    Deriving a unified fault taxonomy for event-based systems

    6th ACM International Conference on Distributed Event-Based Systems (DEBS)

    (2012)
  • Cited by (95)

    • A reference architecture for serverless big data processing

      2024, Future Generation Computer Systems
    • The uphill journey of FaaS in the open-source community

      2023, Journal of Systems and Software
      Citation Excerpt :

      Another consequence of autoscaling is that in an application with several functions, most dependencies are only available at runtime. As a result, local integration testing and debugging can be impossible in particular cases (Leitner et al., 2019). Even though a single function can be unit tested locally before deployment, there is still a lack of tool support for testing, debugging and continuous integration of serverless applications with more than a single function (Lenarduzzi and Panichella, 2020; Nupponen and Taibi, 2020).

    • A case study on the stability of performance tests for serverless applications

      2022, Journal of Systems and Software
      Citation Excerpt :

      Therefore, information such as the number of provisioned workers, worker utilization, worker version, virtualization stack, or underlying hardware is unavailable. Furthermore, cold starts (requests where a new worker has to be provisioned) are a widely discussed performance challenge (Leitner et al., 2019; van Eyk et al., 2018). This begs the following question:

    • Migrating monolithic applications to function as a service

      2024, Software - Practice and Experience
    View all citing articles on Scopus

    Philipp Leitner is an assistant professor in the software engineering division of Chalmers University of Technology and the University of Gothenburg, Sweden. He leads the Internet Computing and Emerging Technologies lab. Philipp received a PhD from Vienna University of Technology in 2011. He has published around 100 papers in the area of software engineering for service-, cloud-, and web-based systems, with a particular focus on performance testing and improvement.

    Erik Wittern is a Research Staff Member at IBM Research in Yorktown Heights (NY, USA). His Research focus is on microservice architectures, Web APIs and their discovery and use, and the evolution of new API paradigms like GraphQL. He has published and presented his research at renowned conferences like ICSE, MSR, or ICWE. Erik is furthermore co-author of a book on benchmarking cloud services and holds various patents. Erik received his PhD in computer science from the Karlsruhe Institute Of Technology prior to joining IBM Research.

    Josef Spillner is a senior lecturer (associate professor) and head of the Service Prototyping Lab at Zurich University of Applied Sciences in Switzerland. His research interests include cloud-native applications, service tooling and cloud accounting & billing. With his team, he works on challenging topics such as microservices, function-as-a-service and time series analysis. Before founding the lab, he conducted research at TUD, SAP, NTUU, UFCG and UniBZ and founded the Open Source Service Platform Research Initiative to promote re-usable software for scientific work. His work approach continues to promote international exchange, most recently at PTI and IIT, and modernisation of research and publication approaches. He published a doctoral dissertation about metaquality of services and a habilitation treatise about stealth computing in multi-cloud environments.

    Waldemar Hummer is a Research Staff Member at IBM Research AI in Yorktown (NY, USA), where he is currently leading projects on software engineering and systems for building efficient, reliable, and trusted AI applications. He has published several peer-reviewed papers and patents, with core contributions in the area of scalability and reliability of elastic cloud computing and AI platforms. His work has received best and distinguished paper awards at major conferences, including Middleware, ICST, and OOPSLA. Prior to joining IBM, he spent about two years in leading technical roles at Atlassian (Sydney, Australia). Moreover, he is an avid supporter of open source, having led and contributed to several high-impact projects on Github.

    View full text