  Cloud applications are increasingly shifting from large monolithic services,
to large numbers of loosely-coupled, specialized microservices. Despite their
advantages in terms of facilitating development, deployment, modularity, and
isolation, microservices complicate resource management, as dependencies
between them introduce backpressure effects and cascading QoS violations.
  We present Sinan, a data-driven cluster manager for interactive cloud
microservices that is online and QoS-aware. Sinan leverages a set of scalable
and validated machine learning models to determine the performance impact of
dependencies between microservices, and allocate appropriate resources per tier
in a way that preserves the end-to-end tail latency target. We evaluate Sinan
both on dedicated local clusters and large-scale deployments on Google Compute
Engine (GCE) across representative end-to-end applications built with
microservices, such as social networks and hotel reservation sites. We show
that Sinan always meets QoS, while also maintaining cluster utilization high,
in contrast to prior work which leads to unpredictable performance or
sacrifices resource efficiency. Furthermore, the techniques in Sinan are
explainable, meaning that cloud operators can yield insights from the ML models
on how to better deploy and design their applications to reduce unpredictable
performance.
