  Serverless applications are typically composed of function workflows in which
multiple short-lived functions are triggered to exchange data in response to
events or state changes. Current serverless platforms coordinate and trigger
functions by following high-level invocation dependencies but are oblivious to
the underlying data exchanges between functions. This design is neither
efficient nor easy to use in orchestrating complex workflows -- developers
often have to manage complex function interactions by themselves, with
customized implementation and unsatisfactory performance. In this paper, we
argue that function orchestration should follow a data-centric approach. In our
design, the platform provides a data bucket abstraction to hold the
intermediate data generated by functions. Developers can use a rich set of data
trigger primitives to control when and how the output of each function should
be passed to the next functions in a workflow. By making data consumption
explicit and allowing it to trigger functions and drive the workflow, complex
function interactions can be easily and efficiently supported. We present
Pheromone -- a scalable, low-latency serverless platform following this
data-centric design. Compared to well-established commercial and open-source
platforms, Pheromone cuts the latencies of function interactions and data
exchanges by orders of magnitude, scales to large workflows, and enables easy
implementation of complex applications.
