Distributed Systems
Abstract
We now delve into one final major theme of our text: distribution. In this part of the book, we will explore some of the underlying tech-nology in one of the most important aspect of modern systems: how to build distributed systems. Distributed systems have changed the face of the world. When your web browser connects to a web server somewhere else on the planet, it is participating in what seems to be a simple form of a client/server distributed system. When you contact a modern web service such as Google or facebook, you are not just interacting with a single machine, however; behind the scenes, these complex ser-vices are built from a large collection (i.e., thousands) of machines, each of which cooperate to provide the particular service of the site. Thus, it should be clear what makes studying distributed systems interesting. Indeed, it is worthy of an entire class; here, we just intro-duce a few of the major topics. A number of new challenges arise when building a distributed system. The major one we focus on is failure; machines, disks, net-works, and software all fail from time to time, as we do not (and likely, will never) know how to build “perfect ” components and sys-tems. However, when we build a modern web service, we’d like it to appear to clients as if it never fails; how can we accomplish this task? Interestingly, while failure is a central challenge in constructing distributed systems, it also represents an opportunity. Yes, machines fail; but the mere fact that a machine fails does not imply the en-tire system must fail. By collecting together a set of machines, we can build a system that appears to rarely fail, despite the fact that