The Serverless Illusion
๐ Abstract
The article discusses the concept of "serverless" in cloud computing, exploring the benefits and challenges it presents. It examines the "serverless illusion" - the idea that serverless reduces operational complexity but increases the need for distributed system design skills. The article also explores approaches to simplify the composition and programming model of serverless applications, and the potential role of AI in addressing these challenges.
๐ Q&A
[01] Building Abstractions Instead of Illusions
1. What is the key distinction between abstractions and illusions in software development? Abstractions hide relevant concepts, setting false expectations, while illusions pretend that the system is something that it isn't and likely can't be. Illusions are the antithesis of mechanical sympathy, as they hide the true nature of the underlying system.
2. How does serverless technology relate to the concept of abstractions and illusions? Serverless provides a high level of run-time abstraction, allowing developers to focus on writing business logic rather than managing infrastructure. However, this abstraction can also lead to "run-time illusions" where developers may not fully understand the distributed, asynchronous nature of serverless functions.
[02] Run-Time Illusions
1. What are some of the key run-time challenges associated with serverless functions? Serverless functions can experience cold starts, which cause latency spikes, and throttling, where incoming requests exceed the available function instances, resulting in errors. Developers need to understand and manage these run-time characteristics, which are not present in local method calls.
2. How do AWS and GCP recommend managing cold starts and throttling in serverless applications? AWS recommends using Reserved and Provisioned Concurrency to manage the number of active function instances, while GCP Pub/Sub has complex scaling behavior that developers need to understand.
[03] The Simplicity Illusion
1. What is the "simplicity illusion" associated with serverless development? Serverless applications favor fine-grained, distributed, and concurrent architectures, which can be complex to design and operate. Developers need to manage scaling, quotas, queue sizes, dead-letter queues, and other run-time considerations, even though serverless reduces the need for traditional infrastructure management.
2. How does the author characterize the "serverless illusion"? The author states that "Serverless reduces the need for (readily available) ops skills but increases the demand for (less readily available) distributed system design skills." Serverless shifts the complexity from infrastructure management to distributed system design.
[04] What if I Want the Functionality but not the Distributedness?
1. What is the challenge the author describes in wanting the functionality of serverless without the associated distributed run-time model? The author notes that serverless "marries functionality with the run-time model," meaning that to access specific functionality, developers must also accept the associated distributed run-time characteristics. This can lead to complexity even when the distributed nature is not delivering much value.
2. How does the author characterize the coupling between functionality and run-time architecture in serverless? The author describes a "strong form of coupling" between the availability of functionality and the specific run-time characteristics, such as pull-vs-push control flow. This can make it difficult for developers to access the desired functionality without also having to manage the associated distributed run-time model.
[05] Can I Have my Serverless Cake and Eat it too?
1. What are the two main approaches the article discusses for improving the developer experience of serverless? The article discusses two main approaches: 1) Simplifying the composition of distributed serverless components, and 2) Reducing the composition by allowing more coarse-grained components.
2. What is the author's perspective on a "monolithic programming model for distributed applications" as a potential solution? The author finds this approach most promising, as it aims to decouple the programming model from the individual cloud services, reducing the amount of infrastructure complexity that shifts to the programming model. Examples of this approach include Azure Aspire, Durable Functions, and efforts like Winglang and Ampt.
[06] Simple vs. Intuitive vs. AI
1. What are the three different levers the article discusses for making serverless development more delightful? The article discusses three approaches: 1) Making serverless development simpler, 2) Making it more intuitive, and 3) Leveraging AI to help overcome the challenges.
2. What is the author's perspective on the tradeoffs between these approaches? The author notes that making distributed system development truly simple is challenging, as it can lead to illusions or forfeit essential properties. However, the author believes that making serverless development more intuitive, where the system behaves as the developer expects, is a promising direction. The use of AI is also seen as a potential way to boost developer productivity in this area.