  Function-as-a-Service (FaaS) has become an increasingly popular way for users
to deploy their applications without the burden of managing the underlying
infrastructure. However, existing FaaS platforms rely on remote storage to
maintain state, limiting the set of applications that can be run efficiently.
Recent caching work for FaaS platforms has tried to address this problem, but
has fallen short: it disregards the widely different characteristics of FaaS
applications, does not scale the cache based on data access patterns, or
requires changes to applications. To address these limitations, we present
Faa\$T, a transparent auto-scaling distributed cache for serverless
applications. Each application gets its own Faa\$T cache. After a function
executes and the application becomes inactive, the cache is unloaded from
memory with the application. Upon reloading for the next invocation, Faa\$T
pre-warms the cache with objects likely to be accessed. In addition to
traditional compute-based scaling, Faa\$T scales based on working set and
object sizes to manage cache space and I/O bandwidth. We motivate our design
with a comprehensive study of data access patterns in a large-scale commercial
FaaS provider. We implement Faa\$T for the provider's production FaaS platform.
Our experiments show that Faa\$T can improve performance by up to 92% (57% on
average) for challenging applications, and reduce cost for most users compared
to state-of-the-art caching systems, i.e. the cost of having to stand up
additional serverful resources.
