|
Abstract:
|
Cloud-computing platforms provide services to consumers through multiple serviceoffering
models. Recent advances in these models have led to the emergence of serverless computing,
or simply serverless, where infrastructure is managed by the service provider. Serverless
is usually coupled with function-based programming model in which software systems are composed
of reusable, lightweight units of code executed within isolated sandboxed environments.
Major cloud-computing platforms, including Amazon Web Services (AWS), Microsoft Azure,
and Google Cloud, report that a substantial proportion of their customers employ serverless
solutions.
Most cloud-computing providers employ a pay-as-you-go billing model. Inefficient utilization
of computing resources, particularly CPU time and working memory, which constitute the
most costly resources, leads to increased overall operational costs. Moreover, the requirement
for resource isolation adversely affects initialization latency and results in additional CPU and
working-memory overhead. Serverless sandboxes are typically deployed on top of heavyweight
virtualization stacks that includeJava, JavaScript, or Python runtime environments with accompanying
frameworks, further increasing working-memory consumption.
Modern cloud-computing architectures use Checkpoint/Restore (abbr. c/r) techniques to
freeze initialized sandboxes into a continuable form. Such techniques, in combination with
cloud-native deployments, allow the virtualized environment to optimize resource consumption
and share code and pre-initialized data across multiple sandboxes. However, such solutions
either operate at application-build time to support data pre-initialization or sharing, or operate
at execution time with limited sharing potential for data available during application execution.
Such data is processed multiple times and duplicated in each sandbox.
This dissertation presents Doss, a direct object snapshotting and sharing system that
performs data c/r during application execution. Doss persists data directly, without transformations,
into reusable and shareable snapshots. Direct snapshotting allows Doss to achieve
near-constant data deserialization time, greatly improving initialization times and reducing
CPU usage. Doss architecture enables snapshot sharing across application instances, eliminating
the excess memory footprint associated with data re-processing and duplication.
GraalDoss, a Doss implementation for Java, is integrated into the GraalVM ecosystem.
GraalDoss is evaluated using 106 correctness and robustness tests and a novel set of cloudnative
micro and macro benchmarks that exercise real-world scenarios. A comprehensive evaluation
of GraalDoss shows a consistent near-constant data-deserialization overhead with serialization
times comparable to state-of-the-art Java JSON and binary serialization libraries.
GraalDoss reduces the memory footprint of web API microservice caches by sharing populated
cache snapshots across microservice instances, improving the overall density by 41% for
8 microservice instances and improving first-response times by 34%. In NLP applications,
GraalDoss improves the pipeline execution times by six orders of magnitude by snapshotting
pipeline results and subsequently loading the snapshots. |