Making a system scalable requires that you apply techniques such as caching, replication, and distribution. Unfortunately, these scaling techniques may impose conflicts that are difficult to resolve. An obvious one is the following. When replicating for performance, we need to ensure that the various replicas are kept consistent. What this means, is that an update is propagated instantaneously to the other replicas to ensure that they are all the same.
Instantaneous propagation is virtually impossible in wide-area systems.
However, when updates come from different sources, and may be initiated at different replicas, we better make sure that every replicas gets to see all updates in the same order, or chaos will result. What we have here is a global synchronization problem. Solving such problems in a general way is inherently difficult and no scalable solutions exist. Of course, this doom scenario will not always take place. For example, in many Web applications, we can safely assume that updates come from a single source and need only to be eventually propagated to replicas.