With the emergence and expansion of the World Wide Web, the landscape of distributed network systems and computing has changed dramatically. Distributed systems and computing are no longer the domain of scientific or academic communities; they have become commodities of business and household applications. The popularity of some Web applications, for example, ICQ instant messaging and chat, peer-to-peer (P2P) sharing, online game playing, the search for extraterrestrial intelligence (SETI) @home, distributed denial of service (DDOS) agents, and so on, has turned the entire Web into a giant distributed system, with hundreds of millions of computers across the world.
Although many books have been published on the topic of distributed systems and computing, few of them have the same focus as this book, namely, on distributed applications, as well as their designers and implementers. This book covers the programming blocks, as well as the system layers that are essential for the mapping and design of distributed algorithms, and the implementation of distributed systems and applications. With many years of teaching and research practice in the areas of computer engineering and computer science, at several universities in different countries, the authors of this book take an integrated approach to the conceptualization, design, and implementation of distributed systems, based on the programming of distributed applications in networking environments.
Part of Springer’s “Network Theory and Applications“ series, this book is intended for one-semester classes made up of senior undergraduate or graduate students. The book is organized into 15 chapters, with a comprehensive reference list (36 pages). Each chapter is concluded with a short summary and a list of questions or exercises. After a brief overview in chapter 1, chapters 2 through 9 cover the basic issues of distributed systems and network computing, including the client-server model of distributed computing, communication paradigms for network systems, internetworking, inter-process communication with message passing, transmission control protocol/user datagram protocol (TCP/UDP), remote procedure call (RPC), group communication, and reliability/replication techniques. More recent and advanced topics in distributed computing and applications are discussed in chapters 10 through 13, including network security, fault-tolerant computing, Web-based databases, and mobile computing. Chapter 14 presents case studies of Sun’s network file system (NFS), Unix/Linux network operating systems, Object Management Group’s common object request broker architecture (CORBA), and Microsoft’s distributed component object model (DCOM). Chapter 15 completes the presentation with current developments in distributed network systems, such as cluster, grid, peer-to-peer (P2P), and pervasive computing.
The book includes many code samples, in keeping with its emphasis on both the theoretical and practical aspects of distributed systems and application programming. These cover topics such as message communication using sockets, client and server programs in Java, code for remote procedure call (RPC) and remote method invocation (RMI), multicast in Java, and Web-based database access.
Overall, the material in the book will be good for regular classes or seminar courses at either the undergraduate or graduate level, especially if it is accompanied by some team projects relating to the design and implementation of real distributed applications. In addition, the book could be a valuable reference for computer architects, software developers, and other readers who are interested in the fields of distributed computing and applications.