Dirigent: Lightweight Serverless Orchestration
<|reference_start|>Dirigent: Lightweight Serverless Orchestration: While Function as a Service (FaaS) platforms can initialize function sandboxes on worker nodes in 10-100s of milliseconds, the latency to schedule functions in real FaaS clusters can be orders of magnitude higher. We find that the current approach of building FaaS cluster managers on top of legacy orchestration systems like Kubernetes leads to high scheduling delay at high sandbox churn, which is typical in FaaS clusters. While generic cluster managers use hierarchical abstractions and multiple internal components to manage and reconcile state with frequent persistent updates, this becomes a bottleneck for FaaS, where cluster state frequently changes as sandboxes are created on the critical path of requests. Based on our root cause analysis of performance issues in existing FaaS cluster managers, we propose Dirigent, a clean-slate system architecture for FaaS orchestration with three key principles. First, Dirigent optimizes internal cluster manager abstractions to simplify state management. Second, it eliminates persistent state updates on the critical path of function invocations, leveraging the fact that FaaS abstracts sandboxes from users to relax exact state reconstruction guarantees. Finally, Dirigent runs monolithic control and data planes to minimize internal communication overheads and maximize throughput. We compare Dirigent to state-of-the-art FaaS platforms and show that Dirigent reduces 99th percentile per-function scheduling latency for a production workload by 2.79x compared to AWS Lambda and can spin up 2500 sandboxes per second at low latency, which is 1250x more than with Knative.<|reference_end|>
@article{cvetković2024dirigent:,
    title={Dirigent: Lightweight Serverless Orchestration},
    author={Lazar Cvetkovi'c, Franc{c}ois Costa, Mihajlo Djokic, Michal
  Friedman, Ana Klimovic},
    journal={arXiv preprint arXiv:2404.16393},
    year={2024},
    doi={10.1145/3694715.3695966},
    archivePrefix={arXiv},
    eprint={2404.16393},
    primaryClass={cs.DC cs.OS}
}