Distributed systems are the cornerstone of past and future computing applications. But just when you think new mobile apps are making it easier to connect, along comes the complex reality of distributed networking, scaling across untold numbers of devices--always moving, changing, and expanding. This new book by Sukumar Ghosh is a welcome and very detailed collection of almost everything “distributed.” It ranges from sensor to social peer-to-peer (P2P) networks, while describing approaches for fault tolerance, security, distributed consensus, network graph routing, group communication, reliable multicast, distributed transactions, and many others. The breadth of concepts discussed is extensive and backed up with examples and detailed student exercises, making this an excellent reference and textbook. Just looking over the 15-page table of contents, 12 reference pages, and 14 index pages can exhaust the reader, but it also helps provide scope for the next generation of scalable computing challenges. The reader still needs a holistic software architecture approach to a new system design that would leverage the rationale of the technologies and distributed patterns described throughout this excellent book.
Grouped into five main sections, the 21 chapters and 500 pages start by framing the rationale for distributed systems, including geographically distributed environments, speeding up computations through parallel processing, distributed resource sharing, and improving system reliability using distributed approaches more tolerant of faults. With this overview, examples then help frame the book’s concepts, which include the Internet, the World Wide Web, social networks, interbank networks, sensor networks, and grid/cloud computing. Interprocess communication models are then applied to these systems, and the author introduces these through topics like network protocols, naming, remote procedure, and remote method invocations. The book is very relevant to current technologies by including concepts like web services, mobile agents, and cloud computing (including Hadoop and MapReduce).
The book starts to weave in the topic of distributed system algorithmic approaches by introducing foundational topics. This includes models for communication, such as message passing, real-time systems, synchronous versus asynchronous systems, and the power of shared variables across distributed boundaries. Founded in these communication models, algorithms for distributed programing and program correctness can then deal with the hard issues of non-determinism, atomic operations, scheduling, fairness, and distributed time.
With a section on important paradigms, the book looks deeper into mutual exclusion algorithms and global state collection. Network routing approaches are described through a graph algorithm chapter, including routing algorithms and graph traversal, again expanding on the authors’ algorithmic approaches. Here, exercises start to present problems, for example: “Devise a distributed algorithm for computing a spanning tree of a graph in which no root is designated. You can assume that the nodes have unique names.” Exercises in the book range from discussion answers to programming exercises. For example, in chapter 15, the student is asked to implement casually ordered multicast in a group of 16 processes while using a predefined set of primitives--perfect for a class project.
Faults and fault-tolerant systems are discussed in a devoted section that provides both the algorithms for consensus and also distributed transactions and multi-phase commit and recovery approaches. By adding group communication, the various multicast approaches are discussed both for reliability and scalability. With all of these distributed events taking place, a discussion of replicated data management and self-stabilizing systems rounds out how distributed systems can both meet or be challenged by faults caused by algorithms not responding or not getting all the information needed to solve their problem.
The last section (5) on real-world issues helps frame what systems today face. This includes an in-depth study of security and issues like denial-of-service (DoS), masquerading, and malicious software. This is combined with encryption approaches and the complex problem of exchanging keys securely in an untrusted network. With sensor networks, architectural issues are discussed, including power requirements and communication technologies like ZigBee radio frequencies. Cluster-based routing and directed diffusion show how information can be aggregated and sent more efficiently through low-bandwidth networks. Here, scalable routing concepts like content addressable networks can be exploited. Many of these concepts are now, or should be, embodied in the popular Internet of Things (IoT) vision.
Finishing with social and P2P networks again shows the book’s relevance to current issues. The author includes examples from Facebook and Twitter while introducing the modeling and metrics of social networks. First- and second-generation P2P networking includes massive sharing and distribution technologies like Napster, distributed hash-tables in Chord, and content distribution file swarming protocols like BitTorrent and free riding. Small-world models and power-law graphs help describe the scalable issues.
In all, the book--with its depth and breadth of information on relevant technologies involved in all phases of complex distributed programming--is an excellent addition to the published works on some of the 21st century’s hardest computing problems.