Synchronization

If most distributed systems are naturally asynchronous, but synchrony is needed to reason about them, it is clear that in order to be able to communicate and collaborate, participants need to achieve some sort of global or local consensus/synchronization. We are therefore faced with the questions:

  1. how to synchronize behaviour of participants (communication or execution) of an asynchronous system? and
  2. how to find the right balance between synchronous and asynchronous behaviours within the same system?

We consider that conceptual and technical answers to these questions are instrumental for designing and operating IT systems and infrastructures in the 21st century. Note, that this should ideally be achieved without omniscient observer -- solely by bottom up interaction and communication between system's participants. Note #2 (this is important) is that the above two questions should be approached in the light of "fundamental in all of computer science" result of 5 showing that (as interpreted in this talk on Byzantine Agreement):

one fail-stop fault makes (a deterministic) agreement impossible in the asynchronous model... which means a deterministic program is impossible in an asynchronous environment.

It may be convenient to describe the distributed computing technology space according to two axis: (1) synchrony <-> asynchrony axis and (2) top-down <-> bottom-up axis. The first axis describes what is the desired distributed system one wants to design; the second - what is the system's design principles. The combination of these axes is not straightforward but we nevertheless could try to visualize a plane made of them and see if it is useful.

Now, lets try to understand what these blobs represent.