## 3 Distributed Systems: Concepts and Challenges
### Challenges in Distributed Systems
\begin{table}
\begin{tabular}{p{142.3 pt} p{284.5 pt}} \hline \hline
**Type** & **Description** \\ \hline \multirow{2}{*}{Preventive maintenance} & This technique involves the regular maintenance of the entire system and all of its components in order to keep it robust and prevent its failure. \\ \hline \multirow{2}{*}{Predictive analysis} & This technique is about analyzing patterns and behaviors of a system, as well as its overall performance, in order to identify potential issues that could cause system failure and address them properly. It works much like the process of weather forecasting. \\ \hline \multirow{2}{*}{Rejuvenation} & This technique involves the frequent rebooting of a system, or parts of it, in order to clear any errors or bugs that may have accumulated in the system over a period of time. \\ \hline \hline \end{tabular}
\end{table} 
Table 3: 3 techniques of Proactive Fault Tolerance. First of all, the different types of hardware or software platforms a distributed system is composed of is quite a challenge to address on its own. Different nodes may have different basic capabilities and features such as storage capacity, processing speed and data management protocols, something that could prove to be a problem when it comes to the uniformity of data updates [35]. Secondly, the way nodes are placed in a network geographically can play a significant role in the overall network's latency. This latency could lead to potential data dissemination and communication delays. Simply put, when data are updated in a node, there could be a significant delay before other nodes in the network are updated with the same data, therefore leading to conflicting information being presented to different users. This, in turn, undermines the network's integrity immensely [36]. For example, Google Spanner, a globally distributed database, addresses latency issues by using synchronized clocks and advanced algorithms to ensure low-latency and high-consistency transactions. However, this solution comes with the complexity of maintaining precise time synchronization across data centers worldwide, showcasing the trade-offs involved in managing latency in distributed systems. Figure 8 depicts Google Spanner's architecture. Last but not least, in distributed systems, multiple processes usually occur across a number of nodes, all at the same time, and this brings forth a need for concurrency \begin{table}
\begin{tabular}{p{142.3 pt} p{284.5 pt}} \hline \hline
**Type** & **Description** \\ \hline Redundancy & This technique involves adding extra hardware or software that are not necessary for a system to work properly, but can be utilized in case of a failure, in order to provide a fallback solution. You can think of it as having a spare type in the car’s trunk, in case of a tyre burst. \\ \hline Replication & This method involves the duplication of important data or components across different parts of a system so that every time a failure occurs, a copy can be deployed without interrupting the system’s main functions. \\ \hline Checkpoints and Rollbacks & This technique works much like an operating system’s restore point feature; it saves a state of the system at certain points (known as checkpoints) that works well and, when a failure happens, the system will roll back to its last saved point, thus restarting its function from that specific checkpoint. \\ \hline Failover & This last technique is about having an entire backup system that will start working automatically once the main system faces a failure or crashes entirely. The process has to happen so quickly that the user won’t notice any difference in the way the system works. Think of it as a backup power generator that starts working automatically once the main power system of a building goes out. \\ \hline \hline \end{tabular}
\end{table} 
Table 4: 4 techniques of Reactive Fault Tolerance. Figure 8: Google Spanner architecture. control. Concurrency control, however, has proved to be quite challenging.