  Cloud resilience is crucial for cloud operators and the myriad of
applications that rely on the cloud. Today, we lack a mechanism that allows
cloud operators to gracefully degrade application performance in public clouds.
In this paper, we put forward a vision for automated feature degradation with a
three-pronged approach. First, we introduce the idea of diagonal scaling --
pruning an application's dependency graphs during capacity crunch scenarios --
to maximize the availability of critical services. Second, we propose the use
of simple and expressive Criticality Tags on microservices to convey an
application developer's resilience intent to the cloud provider without any
application modifications. Third, we design Gecko, an automated cloud
resilience management system that maximizes critical service availability of
applications while also taking into account operator objectives, thereby
improving the overall resilience of the infrastructure during failures. Using
extensive experiments, we show that the Gecko controller running atop
Kubernetes can maximize the overall resilience of applications and
infrastructure under a broad range of failure scenarios. We also demonstrate
that diagonal scaling with Gecko aligns well with microservice architecture
using experiments with a real-world application.
