Title: Tiny functions for codecs, protocols, compilation, and (maybe) soon everything
AbstractNetworks, applications, and media codecs frequently treat one another as strangers. By expressing large systems as compositions of small, pure functions, we've found it's possible to achieve tighter couplings between these components, improving performance without giving up modularity or the ability to debug. I'll discuss our experience with systems that demonstrate this basic idea: ExCamera (NSDI 2017) parallelizes video encoding into thousands of tiny tasks, each handling a fraction of a second of video, much shorter than the interval between key frames, and executing in parallel on AWS Lambda. Salsify (NSDI 2018) is a low-latency network video system that uses a purely functional video codec to explore execution paths of the encoder without committing to them, allowing it to closely match the capacity estimates from a video-aware transport protocol. This architecture outperforms more loosely-coupled applications -- Skype, Facetime, Hangouts, WebRTC -- in delay and visual quality, and suggests that while improvements in video codecs may have reached the point of diminishing returns, video systems still have low-hanging fruit. Lepton (NSDI 2017) uses a purely functional JPEG/VP8 transcoder to compress images in parallel across a distributed network filesystem with arbitrary block boundaries. This free-software system is in production at Dropbox and has compressed, by 23%, more than 200 petabytes of user JPEGs.
Based on our experience building these systems, we propose a more general intermediate representation for interactive lambda computing, called cloud "thunks" -- language-independent closures that capture and describe their environment by content-hash, separating the specification of an algorithm from its schedule and execution. We have created a tool that extracts this IR from off-the-shelf software build systems, letting the user treat a FaaS service like a 5,000-core build farm with global memoization of results. Expressing systems and protocols as compositions of small, pure functions can open up a wave of "general-purpose" lambda computing, permitting us to transform everyday time-consuming operations into large numbers of functions executing with massive parallelism for short durations in the cloud.
Bio: Keith Winstein is an assistant professor of computer science at Stanford University. His research group designs networked systems that cross traditional abstraction boundaries, using statistical and functional techniques. He and his colleagues made the Mosh (mobile shell) tool, the Sprout and Remy systems for computer-generated congestion control, the Mahimahi network emulator, the ExCamera and Salsify systems for low-latency video coding and lambda computing, the Lepton JPEG-recompression tool, the Guardian Agent for secure delegation across an SSH/Mosh connection, and the Pantheon of Congestion Control. Winstein did his undergraduate and graduate work at MIT and previously served as a staff reporter at The Wall Street Journal.