An in-depth examination of the principles of distributed systems in general, cover core topics in distributed system design and implementation include structure, topology, processes and threads, distributed inter-process communication, distributed process scheduling, naming, event ordering, fault tolerance, data replication and consistency.