Distributed Systems

Introduction

In this page I will share my experience and topics on distributed systems.

Distributed Systems (DS) are everywhere. The World Wide Web (WWW) is a distributed system. Learning and understanding DS is very critical for any programmer and architect alike. Based on my understanding, the system can be counted as DS if the clock between the system parts is distinct and asynchronous and communication between these parts usually uses a message-passing technique. I will start defining some basic terms and deep dive into the subject to describe it in more detail.

Model

In order to work with DS and design them we need to work on an abstract level. One of the good ways to abstract any complex system is to work on a model, instead of a real thing. Models don't include all the details of the system but some important attributes that can help us to analyze it. That is why it is abstract and useful for science.

The model for an object is a collection of attributes and a set of rules that governs how these attributes interact. Model is accurate to the extent that analyzing it yields truths about the object of interest. A model is tractable if such an analysis is actually possible.

Time, Causality, and Logical Clock

Time is a strange concept. When you start looking at the term time is the invention of humans. We use it to make sense of the world living in. Time is a relative term. We invented it to describe something that happened after or before something else. Also used to describe Causality ( the relationship between cause and effect.),

How can we describe "something happened before something else"?
Whether these two things are related or not, time tells us they might be a relationship between them.

What is the minimum information we need to describe before and after events?
We can simply use one global Value as a starting point and frequency increment that value visible by all events. When each event happens, we get the latest value and enrich the event-related information. With this process, we will have the events and global value snapshots. After that, we can compare these values which events happened before or after each other. We just invented the global "Clock". Because we use our own value for a starting point this is a Logical time for the system we used this clock. The value was global to the system but not global to out of that system. That is the one issue with the Time we use today.

Using time to describe relationships between events is straightforward but not always possible. That is how are using physical clocks in real life, right? When System level Global Time is not possible what can be done. Do we really need "the system level global clock" to describe relationships between events for that system?

....

to be continued ...