## 3 Distributed Systems: Concepts and Challenges
### Core Concepts of Distributed Systems  
**Nodes and networks**: as we mentioned previously, distributed systems are networks composed of independent computers. These computers, that work together in order to complete a set of tasks, are also known as nodes. These nodes exchange messages in order to effectively communicate with each other. Each of these nodes is its own set of a complete node (both hardware and software) and there are variations in what their roles are in the network, their resources and their capabilities [27]. Such diversity noted among these nodes is what empowers distributed systems to effectively leverage their vast resources and capabilities, thus enhancing their efficiency and flexibility even further. The architecture of these systems is being widely used in creating both local area networks (LANs) and wide area networks (WANs). **Decentralization**: in centralized systems, there is one main unit or a mainframe which controls how the entire network will operate and undertake tasks. If the mainframe crashes, the entire system crashes along with it. In decentralized systems, there is not one single mainframe that controls everything [28]. Instead, control is spread out to the entire network's nodes, or nodes, each one of them working independently. Thus, in case of a node's breakdown, the rest of the system keeps functioning well and can complete tasks. \begin{table}
\begin{tabular}{p{42.7 pt} p{56.9 pt} p{56.9 pt} p{56.9 pt} p{56.9 pt}} \hline \hline
**Consensus Mechanism** &
\begin{tabular}{c} **Energy** \\ **Consumption** \\ \end{tabular} & **Security** & **Scalability** & **Use Cases** \\ \hline \multirow{2}{*}{Proof-of-Work (PoW)} & \multirow{2}{*}{High} & High, but energy-intensive and vulnerable to 51\% attacks & Limited by transaction & Bitcoin, Ethereum throughput (e.g., Bitcoin -7 transactions per second) & Bitcoin, Ethereum (transitioning away), \\ \multirow{2}{*}{Proof-of-Stake (PoS)} & Low to Moderate & High, dependent on the amount of staked tokens & Better than PoW, but still faces challenges with network congestion & Ethereum 2.0, Cardano, Tezos \\ \hline Delegated & Low & High, but relies on a smaller number of validators & High scalability due to fewer validators needed for consensus & EOS, Tron, Steem \\ \hline Practical & \multirow{2}{*}{Moderate Tolerance (PBFT)} & Very high, resilient to up to one-third of nodes failing or acting maliciously & High scalability with fast transaction finality & Hyperledger Fabric, Tendermint (used in Cosmos) \\ \hline \multirow{2}{*}{Proof-of-Authority (PoA)} & \multirow{2}{*}{Low} & High, but depends on the trustworthiness of authorities & High scalability with quick consensus due to limited validators & VeChain, POA Network, Private blockchains \\ \hline \hline \end{tabular}
\end{table} 
Table 1: Comparison of blockchain consensus mechanisms. Distributed systems have been utilizing decentralized cooperative algorithms for the purposes of achieving better fault-tolerance rates, higher performance and better load balancing. Since decentralized environments have emerged, such as peer-to-peer networks, decentralized algorithms have become a necessity in order for these networks to be able to coordinate tasks, communicate effectively and make the right decisions locally. There are three well-established cooperative algorithms which are being discussed below [29]. * Voting is a cooperative algorithm used by decentralized systems in order to make decisions collectively. In such a network, each node will place its vote on certain decisions like which version of a specific set of data is correct. The nodes (or computers) will communicate their \"votes\" with each other, based on a set of rules that each one has, subsequently making a decision based on the total number of votes the corresponding option gathered [29]. * Token Ring is another cooperative algorithm tasked with managing the network's communication system. In this kind of network, all nodes are connected with each other in the shape of a ring.