
Roberto Vitillo
UNDERSTANDING
DISTRIBUTED
SYSTEMS
WHAT EVERY DEVELOPER SHOULD KNOW ABOUT
LARGE DISTRIBUTED APPLICATIONS
Understanding Distributed Systems
Version 1.0.4
Roberto Vitillo
February 2021
Contents
Copyright
6
About the author
7
Acknowledgements
8
Preface
9
0.1 Who should read this book . . . . . . . . . . . . . .
10
1 Introduction
11
1.1 Communication . . . . . . . . . . . . . . . . . . . .
12
1.2 Coordination . . . . . . . . . . . . . . . . . . . . .
13
1.3 Scalability . . . . . . . . . . . . . . . . . . . . . . .
13
1.4 Resiliency . . . . . . . . . . . . . . . . . . . . . . .
15
1.5 Operations . . . . . . . . . . . . . . . . . . . . . . .
16
1.6 Anatomy of a distributed system . . . . . . . . . .
17
I Communication
20
2 Reliable links
23
2.1 Reliability . . . . . . . . . . . . . . . . . . . . . . .
23
2.2 Connection lifecycle . . . . . . . . . . . . . . . . .
24
2.3 Flow control . . . . . . . . . . . . . . . . . . . . . .
25
2.4 Congestion control . . . . . . . . . . . . . . . . . .
27
2.5 Custom protocols . . . . . . . . . . . . . . . . . . .
28
3 Secure links
30
3.1 Encryption . . . . . . . . . . . . . . . . . . . . . . .
30
3.2 Authentication . . . . . . . . . . . . . . . . . . . .
31
3.3 Integrity . . . . . . . . . . . . . . . . . . . . . . . .
33
CONTENTS
2
3.4 Handshake . . . . . . . . . . . . . . . . . . . . . .
34
4 Discovery
35
5 APIs
39
5.1 HTTP . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.2 Resources . . . . . . . . . . . . . . . . . . . . . . .
43
5.3 Request methods . . . . . . . . . . . . . . . . . . .
45
5.4 Response status codes . . . . . . . . . . . . . . . .