This article was originally posted on dev.to, but it turns out that HackerNews banned this website, so I decided to create my own.
Distributed Storage Usually, this component has an interface of a key-value store: Get(key) and Set(key, value), where key and value are some binary strings. This component knows nothing about the data - it can be rows from the table, JSON documents or something else entirely. Usually, this component provides guarantee of “durability”, meaning that data will not be lost in some failure scenario. A common example of such scenario is “less than half of the servers are down”.
Communication between cluster nodes This component implements some kind of communication protocol to send and receive messages from one node to another.
In classical databases (such as PostreSQL), all of these components are implemented in one single application. Such application manages everything on its own: controls storage, talks with other nodes in the cluster and computes results to SQL queries.