As the Internet and network technologies have advanced in sophistication and reliability, engineers have created a new way of running computing services: distributed systems. Instead of centralizing data and computational power in a single location then sending it out to clients, distributed systems spread both data and computational tasks across multiple nodes that work in unison. While this type of system has many advantages, it is not without its drawbacks.
Distributed systems allow for greater overall service performance than systems whose function is centralized in a single location. By spreading the computational load across different nodes, each location is under less stress. This allows each node to perform more efficiently, which increases the performance of the overall service. One example of how this works is in high demand messaging services. Instead of dumping the load for every current user transaction onto a single server, transactions are spread across a number of different servers. In this way, the demand on each individual node is reduced, and the data each node receives percolate out to the other nodes in the background.
When computation is centered around a single machine, the health of that machine is the health of the entire service --- if it goes down, so does the entire service. However, distributed systems can continue to function if one node ceases to function. While the performance demands on the other nodes will go up, as will the stress each machine is under, the other nodes will still work. However, failure in a critical threshold of nodes can still bring the service down.
Because distributed systems work across a variety of different machines, they are inherently scalable. That is, the distributed system can adjust how many system resources it is making use of in light of what kind of demand the system is under. If a system is under high demand, then it can have every machine running to capacity. However, if the load on the system is relatively low, it can take different components of the distributed system offline to save power and wear on the system. When demand on the system goes up again, these components can come back online.
When services run on a single server, there is no worry about data synchronization: all the data is simply present on that machine. However, this becomes an issue in distributed systems. Because different distributed system components are handling different tasks and data at any given point in time, there will be small periods of time in which data exists on one component, but not on others. As long as this system node stays online long enough for this temporarily unique data to percolate across to other nodes, this is not a problem. However, if a node goes down before it proliferates its unique data, there will be inconsistencies within the system.