Understanding Distributed Systems: What every developer should know about large distributed applications

Roberto Vitillo

★ 4.0 · 542 reads

<span>Learning to build distributed systems is hard</span><span>, especially if they are large scale. It's not that there is a lack of information out there. You can find academic papers, engineering blogs, and even books on the subject. The problem is that the available information is spread out all over the place, and if you were to put it on a spectrum from theory to practice, you would find a lot of material at the two ends, but not much in the middle. <br><br>That is why I decided to write a book to teach the fundamentals of distributed systems so that you don’t have to spend countless hours scratching your head to understand how everything fits together. </span><span>This is the guide I wished existed when I first started out</span><span>, and it's based on my experience building large distributed systems that scale to millions of requests per second and billions of devices. <br><br></span><span>If you develop the back-end of web or mobile applications (or would like to!), this book is for you</span><span>. When building distributed systems, you need to be familiar with the network stack, data consistency models, scalability and reliability patterns, and much more. Although you can build applications without knowing any of that, you will end up spending hours debugging and re-designing their architecture, learning lessons that you could have acquired in a much faster and less painful way.<br><br></span><h3><span>Table of contents</span></h3><span> 1 Introduction <br>1.1 Communication <br>1.2 Coordination <br>1.3 Scalability <br>1.4 Resiliency <br>1.5 Operations <br>1.6 Anatomy of a distributed system <br> <br></span><span>Communication</span><span> <br>2 Reliable links <br>2.1 Reliability <br>2.2 Connection lifecycle <br>2.3 Flow control <br>2.4 Congestion control <br>2.5 Custom protocols <br>3 Secure links <br>3.1 Encryption <br>3.2 Authentication <br>3.3 Integrity <br>3.4 Handshake <br>4 Discovery <br>5 APIs <br>5.1 HTTP <br>5.2 Resources <br>5.3 Request methods <br>5.4 Response status codes <br>5.5 OpenAPI <br>5.6 Evolution <br> <br></span><span>Coordination</span><span> <br>6 System models <br>7 Failure detection <br>8 Time <br>8.1 Physical clocks <br>8.2 Logical clocks <br>8.3 Vector clocks <br>9 Leader election <br>9.1 Raft leader election <br>9.2 Practical considerations <br>10 Replication <br>10.1 State machine replication <br>10.2 Consensus <br>10.3 Consistency models <br>10.4 Chain replication <br>10.5 Solving the CAP theorem <br>10.6 Coordination avoidance <br>11 Transactions <br>11.1 ACID <br>11.2 Isolation <br>11.3 Atomicity <br>11.4 Asynchronous transactions <br> <br></span><span>Scalability</span><span> <br>12 Functional decomposition <br>12.1 Microservices <br>12.2 API gateway <br>12.3 CQRS <br>12.4 Messaging <br>13 Partitioning <br>13.1 Sharding strategies <br>13.2 Rebalancing <br>14 Duplication <br>14.1 Network load balancing <br>14.2 Replication <br>14.3 Caching <br> <br></span><span>Resiliency</span><span> <br>15 Common failure causes <br>15.1 Single point of failure <br>15.2 Unreliable network <br>15.3 Slow processes <br>15.4 Unexpected load <br>15.5 Cascading failures <br>15.6 Risk management <br>16 Downstream resiliency <br>16.1 Timeout <br>16.2 Retry <br>16.3 Circuit breaker <br>17 Upstream resiliency <br>17.1 Load shedding <br>17.2 Load leveling <br>17.3 Rate-limiting <br>17.4 Bulkhead <br>17.5 Health endpoint <br>17.6 Watchdog <br> <br></span><span>Testing and operations</span><span> <br>18 Testing <br>18.1 Scope <br>18.2 Size <br>18.3 Practical considerations <br>19 Continuous delivery and deployment <br>19.1 Review and build <br>19.2 Pre-production <br>19.3 Production <br>19.4 Rollbacks <br>20 Monitoring <br>20.1 Metrics <br>20.2 Service-level indicators <br>20.3 Service-level objectives <br>20.4 Alerts <br>20.5 Dashboards <br>20.6 On-call <br>21 Observability <br>21.1 Logs <br>21.2 Traces <br>21.3 Putting it all together <br>22 Final words</span>

Request Code
ZLIBIO3655063
Published
2021
Publisher
Roberto Vitillo
Pages
253
Language
English
Format
PDF
ISBN-13
9781838430207
ISBN-10
1838430202