  The actor model is popular for many types of server applications. Efficient
snapshotting of applications is crucial in the deployment of pre-initialized
applications or moving running applications to different machines, e.g for
debugging purposes. A key issue is that snapshotting blocks all other
operations. In modern latency-sensitive applications, stopping the application
to persist its state needs to be avoided, because users may not tolerate the
increased request latency. In order to minimize the impact of snapshotting on
request latency, our approach persists the application's state asynchronously
by capturing partial heaps, completing snapshots step by step. Additionally,
our solution is transparent and supports arbitrary object graphs. We prototyped
our snapshotting approach on top of the Truffle/Graal platform and evaluated it
with the Savina benchmarks and the Acme Air microservice application. When
performing a snapshot every thousand Acme Air requests, the number of slow
requests ( 0.007% of all requests) with latency above 100ms increases by 5.43%.
Our Savina microbenchmark results detail how different utilization patterns
impact snapshotting cost. To the best of our knowledge, this is the first
system that enables asynchronous snapshotting of actor applications, i.e.
without stop-the-world synchronization, and thereby minimizes the impact on
latency. We thus believe it enables new deployment and debugging options for
actor systems.
