You keep hearing about the term "Distributed Systems". But what is it exactly?

This https://abs.twimg.com/emoji/v2/... draggable="false" alt="🧵" title="Thread" aria-label="Emoji: Thread"> covers some key characteristics of a distributed system:

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
A distributed systems is basically a system with multiple components that communicate and co-ordinate with each other to perform a task.

The whole system appears to be a single entity to the end user.

Below are some of the key characteristics of a distributed system:

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Scalability:

The ability to quickly and easily increase or decrease the size of a system or process to manage increased or decreased demand.

Any distributed system that can continuously evolve in order to support the growing amount of work is considered to be scalable.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Reasons to scale up a system:

https://abs.twimg.com/emoji/v2/... draggable="false" alt="▫️" title="Weißes kleines Quadrat" aria-label="Emoji: Weißes kleines Quadrat">increased traffic to a service
https://abs.twimg.com/emoji/v2/... draggable="false" alt="▫️" title="Weißes kleines Quadrat" aria-label="Emoji: Weißes kleines Quadrat">increase data volume
https://abs.twimg.com/emoji/v2/... draggable="false" alt="▫️" title="Weißes kleines Quadrat" aria-label="Emoji: Weißes kleines Quadrat">increased number of transactions
etc

Types of scaling:

https://abs.twimg.com/emoji/v2/... draggable="false" alt="▫️" title="Weißes kleines Quadrat" aria-label="Emoji: Weißes kleines Quadrat">horizontal
https://abs.twimg.com/emoji/v2/... draggable="false" alt="▫️" title="Weißes kleines Quadrat" aria-label="Emoji: Weißes kleines Quadrat">vertical

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Reliability:

A distributed system is considered reliable if it keeps delivering its services even when one or several of its software or hardware components fail.

Reliability is one of the main characteristics of any distributed system & is achieved through redundancy.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Redundancy basically means keeping backup resources like servers, data etc. When the main components go down, backups will serve the incoming traffic.

Redundancy comes with an additional cost. It& #39;s a tradeoff.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Availability:

Availability is the time a system remains operational to perform its required function in a specific period.

It is basically the percentage of the time for which the system remains operational.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
You might have heard about 99.99% uptime. It means that the system / service can be down only for around 4 minutes in a month.

If a system is reliable, it is available. However, if it is available, it is not necessarily reliable.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Efficiency:

There are two standard ways to measure the efficiency of a system:

Latency: The total time taken to process a request and return a response.

Throughput: Number of requests processed in a given unit time.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Of course there are many other factors involved to say that a system is efficient based on the use case involved and how a system is built.

But above two are the major ones.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Concurrency:

Concurrency is when multiple mutually exclusive operations are executed at the same time on same/different components of the system without any inconsistencies.

Concurrency reduces the latency and increases the throughput of a system.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
Serviceability:

This is one of the important factors to consider while designing a distributed system.

It basically means the ease with which new features can be added and failures can be diagnosed in the system.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
If the time it takes to fix an issue increases, it& #39;s availability decreases.

There& #39;s no point building a complex system which is hard to maintain. The architecture should be flexible to add or remove new components frequently.

https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)">
If you& #39;re preparing for system design interview, this course https://abs.twimg.com/emoji/v2/... draggable="false" alt="👇🏻" title="Rückhand Zeigefinger nach unten (heller Hautton)" aria-label="Emoji: Rückhand Zeigefinger nach unten (heller Hautton)"> is highly recommended.

It covers all the topics and real world examples of designing distributed systems. https://www.educative.io/courses/grokking-the-system-design-interview?aff=xmn2">https://www.educative.io/courses/g...
You can follow @sunilc_.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled: