Communication and computation steps are not synchronized, and messages are needed to trigger each process to take its local snapshot, so the local snapshot taken at each process occurs at different physical times. For example, although the state reported would be consistent, we would not find a global snapshot algorithm acceptable if it always reported the global initial state of the system. Now, consider the global state of the system at the physical instant of time when the global snapshot is requested. However, we can't do that either because we're not allowed to stop the other messages flowing through the system after we take the local snapshot at a node. Therefore, by the time all nodes take their local snapshots, the global system state may have changed.
Global snapshots are useful in a wide variety of distributed applications.
One application is in distributed databases, for instance a group of bank branches. Termination of a distributed algorithm can detected in the same way. In this lab, you will consider the problem of computing global snapshots in a distributed bank application. You will implement bank modules that send money to each other at random intervals. Read over the entire assignment before starting.