As a software engineer, I've always been fascinated by the complexity and power of distributed systems. These systems, which operate across multiple devices and locations, are at the heart of many of the technologies we rely on every day, from the internet and cloud computing to social networks and online marketplaces. Recently, I decided to dive deeper into the subject by reading the book 'Understanding Distributed Systems' by Roberto Vitillo. In this post, I'll share my thoughts on the book and how it has helped me better understand the fundamental concepts and principles of distributed systems. I'll also provide some examples of how these systems are used in the real world and offer some tips for those interested in working with distributed systems.


The book is generally well-regarded as a comprehensive and accessible introduction to the field of distributed systems. It covers a wide range of topics in detail and includes numerous examples and illustrations to help readers understand the concepts and ideas presented. Many readers have found the book to be a useful resource for learning about distributed systems and for gaining a deeper understanding of the fundamental principles that underlie these systems. Some reviewers have noted that the book can be dense and technical at times, and may be more suitable for readers with some background in computer science or a related field.


One of the things I appreciated most about this book was the clear and thorough explanation of key concepts and terminology. The book covers a wide range of topics, including distributed algorithms, network communication protocols, fault tolerance, and security. Each concept is introduced in a way that is easy to understand, and the book provides numerous examples and illustrations to help readers grasp the material.

As I read the book, I found myself jotting down notes and diagrams to help me visualize the different components and processes involved in distributed systems. The book does a great job of breaking down complex ideas into bite-sized chunks and explaining them in a way that is accessible to readers with a wide range of backgrounds. Whether you are new to the field of distributed systems or have some experience under your belt, you'll find plenty of valuable information and insights in this book.

One of the things I found most interesting as I read 'Understanding Distributed Systems' was learning about the different types of distributed systems that exist. The book distinguishes between three main types: peer-to-peer systems, client-server systems, and cloud computing systems.

Peer-to-peer (P2P) systems are decentralized networks in which each device acts as both a client and a server. These systems are often used for file sharing and other forms of data exchange. Examples of P2P systems include BitTorrent and Napster.

Client-server systems, on the other hand, consist of a central server that manages data and resources, and a set of clients that request and receive information from the server. These systems are commonly used for web-based applications, where the server handles the logic and data storage, and the clients are web browsers that display the information to users.

Cloud computing systems are large-scale distributed systems that provide on-demand access to a shared pool of computing resources, such as servers, storage, and networking. These systems are often used for storing and processing big data, and for running complex algorithms and applications. Examples of cloud computing systems include Amazon Web Services and Microsoft Azure.

Understanding the differences between these types of distributed systems is important for designing and implementing effective and efficient systems. The book does a great job of explaining the key characteristics and trade-offs of each type, and provides examples of when each might be most appropriate.


As I worked my way through the book, I found myself tempted to apply what I was learning to a proof-of-concept side project: a clone of the popular file-sharing service Dropbox, built using Rust, Go, Elixir, and TypeScript. Building a distributed system like this can be a complex and challenging endeavor, as it requires you to consider a wide range of factors, including scalability, reliability, performance, and security.

One of the things that I found most useful as I tackled this project was the book's discussion of the common challenges that arise when designing and implementing distributed systems. The book covers topics such as concurrent access to shared data, networking and communication protocols, and fault tolerance, and provides examples of how these challenges can be addressed in real-world systems.

I also appreciated the book's emphasis on the importance of testing and monitoring distributed systems. As I built my Dropbox clone, I made sure to include a suite of unit and integration tests, as well as monitoring tools to help me identify and resolve issues as they arose. Working with a variety of languages allowed me to gain experience with different tools and approaches, and helped me to better understand the trade-offs and benefits of each. Although I have to say, it wasn't an easy thing to do.

Overall, trying to build my own distributed system helped me to gain a deeper understanding of the concepts and principles covered in the book. It was a challenging but rewarding experience and one that I would recommend to anyone interested in working with distributed systems.

Conclusion

In conclusion, the book Understanding Distributed Systems has been a valuable resource for me as I delve into the world of distributed systems. It has helped me to gain a deeper understanding of the fundamental concepts and principles that underlie these systems and has provided me with a wealth of practical insights and examples to draw upon.

One of the ways I've put this knowledge into practice is by building a proof-of-concept clone of the popular file-sharing service Dropbox using Rust, Go, Elixir, and TypeScript. This project has been a challenging but rewarding experience and has given me a firsthand appreciation of the complexity and power of distributed systems.

Though my Dropbox clone is still a work in progress, I'm excited to see what 2023 holds. With the knowledge and skills I've gained from reading this book and working on this project, I'm looking forward to continuing to explore the field of distributed systems and perhaps even writing a clear documentation of how far I am in builiding my own system.

___

I hope this post has provided you with a helpful overview of the book 'Understanding Distributed Systems' and has given you some insight into the world of distributed systems. Whether you are just starting out in this field or are a seasoned pro, I think you'll find this book to be a valuable resource for understanding and working with these complex and powerful systems.

Ciao 👋🏾