The current broad range of distributed systems, including peer-to-peer and sensor networks, is described in this excellent book. Looking into the past shows where current systems came from, and the concepts and techniques that underlie them.
The book has five parts. Part 1 provides background materials, and addresses interprocess communication (IPC). Part 2 covers foundational topics: communication models, distributed algorithm representation, correctness, and time. Part 3 is on important paradigms, and covers mutual exclusion, distributed snapshots, global state, graph algorithms, coordination algorithms, and synchronizers. Part 4 is on fault tolerance, consensus, transactions, group communication, and replicated data management. The real-world issues of discrete event simulation, security, sensor networks, and peer-to-peer networks are discussed in Part 5.
Each chapter ends with bibliographic notes and exercises. The bibliography is broad but not deep; however, it is chosen artfully enough so that the most important references are handy. The exercises are a mix of open-ended and text based; the text-based exercises require a fair degree of involvement with the text. The author intends this to be a textbook for upper-undergraduate or lower-graduate levels, which seems reasonable, but expecting to cover three-quarters of the book in a semester may be overly ambitious (given the breadth and depth of the material).
The chapters are mostly self-contained after the first four to six introductory chapters. The table of contents makes it clear which chapters should be grouped together to emphasize a particular aspect of distributed systems. The index is also good, but not complete; for example, m-cube appears undefined on page 366, but neither m-cube nor hypercube (a possible synonym for m-cube) is listed in the index. The writing is clear and direct, with the occasional rough patch to be expected in first editions. The illustrations have a MacPaint-look about them, but are neater and clearer than is usual in such cases.
An overview of an area as fundamental and broadly applicable as distributed systems is bound to leave particular sub-areas underrepresented or unmentioned. The scant and circumscribed presentation of process algebras is disappointing; for example, communicating sequential processes are allotted a paragraph in a section on synchronous communication. Also potentially disappointing is the conventional and limited attention to correctness in distributed systems; for example, temporal logic gets half of a page in the conclusion of the chapter on correctness--although further details are cited. Descriptions of major algorithms include correctness arguments, but they are informal appeals to intuition, and are intended to get across general operating principles. However, this book is an overview, and it’s probably inappropriate to argue for correctness arguments that cover all possible cases.