You have to design a new web site for optimum scalability. Assume that the system is the size of Facebook. What are your design considerations?
It is important to distinguish between “large” and “massive” distributed systems. For the sake of argument, let’s assume that we understand how to scale “large” systems and limit discussion to “massive” distributed systems like Facebook or Google.
In addition to the traditional techniques used for vertical and horizontal scaling, “massive” systems typically employ some or all of the following techniques:
(1) Vector clocks to accommodate differences between system clocks.
(2) Distributed hash tables (DHTs) to distribute key-value pairs across multiple servers.
(3) The Quorum Protocol to work around the limitations of the CAP theorem with regard to consistency and availability.
(4) The Gossip Protocol to distribute information on server failures.
(5) Hinted handoffs and Merkle trees to allow for late updates of servers that are temporarily unavailable.