Median E. Rawashdeh
Coinmonks
Published in
5 min readJun 24, 2018

--

Iam going to be taking a beginner orientation approach to explain most of the concepts and terms used in proper distributed systems. The idea is to equip you with the tools you need to be able to think as an architect about distributed systems.

Andrew S. Tanenbaum, an established author and computer scientists, defined distributed systems as:

A collection of independent computers that appear to its users as one computer.

Seems obvious. In other words, it’s a bunch of computers, working together, serving some goals while appearing as one machine to the end user.

Digging a little deeper, he defined three main characteristics of a system to be classified as a distributed system:

1- The computers operate concurrently.

2- The computers fail independently.

3- The computers do not share a global clock.

That third characteristic is subtle, but in many cases is the differentiating point between a distributed and non distributed system.

Let’s take some examples, which one of the following is considered a distributed system:

  • Amazon.com ?
  • Your Computer?

Amazon — Thousands of servers across the world conjure to serve users the website Amazon.com, In fact; hundreds of machines collaborate to answer any single request submitted to the website when using it. This is a typical example of a distributed system.

Your Computer— While some people might try to get cute and say: my computer has a gpu, bunch of processors and other components, they all operate concurrently and can fail independently, so theoretically my computer is also a distributed system!

No! and the explanation lies in the third requirement or characteristic of a distributed system, which is the absence of a global clock.

If you take a look at the diagram above, you’ve got a CPU, a hard disk, a display (or a GPU) and other peripherals that might be attached to your computer. So while these components might seem distributed, they really all share a bus connection (the red line), and their operations are essentially guided by commands issued from the CPU which boasts a global clock, in contrary to the third characteristic of a distributed system.

Other good examples of distributed systems are BitTorrent and the Web.

Interestingly; The Free Online Dictionary of Computing (FOLDOC) defines a distributed system as :

A collection of (probably heterogeneous) automata whose distribution is transparent to the user so that the system appears as one local machine. This is in contrast to a network, where the user is aware that there are several machines, and their location, storage replication, load balancing and functionality is not transparent. Distributed systems usually use some kind of client-server organisation.

And, if we study the above statement closely, we can identify two faults:

  • Appears as one local machine: This is almost never the case as sites on the Web are never all up or all down at the same time. e.g site A might be up while site B is down, site B is up while site A is down, yet the Web IS a distributed system.
  • Usually use some kind of client-server organisation: In BitTorrent and many other peer-to-peer networks, the infrastructure relies on nodes or peers connected and not a central server, hence being called peer-to-peer.

You can see by now that Tanenbaum’s definition of a distributed system shares the same first fault with the FOLDOC definition.

Other problems with defining a distributed systems is if we try comparing human or animal systems to a distributed system, which might work in theory with the above definitions, alas being an interesting social phenomenon that biologists continue to study, however it really does not qualify as a proper distributed system, therefore; for the purpose of sticking to technology lets define a distributed system as the following:

A distributed system is a collection of nodes, that are programmable, asynchronous, autonomous and failure-prone, while communicating using an unreliable medium.

To further explain my definition, let’s examine those italic definitions:

  • Nodes: Any entity or process that is running on some device, be it a personal computer, a notebook, a mobile phone or even a sensor.
  • Programmable: Meaning this node responds to commands written in code included in these processes. Clearly you cannot program humans or animals, at least not yet, so they cannot be included.
  • Asynchronous: each node runs based on its own clock, so entities or nodes clocks are not synchronized with each other.
  • Autonomous: meaning that each node will still operate on its own just fine even if left alone with its own devices on the network.
  • Failure-Prone: Each entity may crash, arbitrary, at any given time, and may recover later.
  • Unreliable Medium: Nodes send and receive messages between each other all the time, but those messages can drop or get delayed for no specific reason at any given time.

By now, you should have a very clear idea of how a distributed system should look like, and you can easily distinguish it from a non-distributed system.

This article was kept short in an effort to give you ample space and time to think and observe living examples of distributed systems around you. In the next article, I will explain one of the many elements that form a distributed system, namely, Distributed Storage.

Interested to know more? be sure to follow me here @Median Rawashdeh and on twitter @MedianiTTo to get a notification when the next article is live.

If you read something that really resonates with you, please leave a comment below as it’s much more likely to stick with yourself.

Peace. Love. Cheers. And, thank you for reading.

Median Rawashdeh // 06.24.18

— Follow me on twitter @MedianiTTo

--

--

Median E. Rawashdeh
Coinmonks

Creative problem solver, lateral thinker & technologist, who enjoys creating futuristic solutions. Otherwise known as "The Hawk" by his peers @EulerFoundation