373cb4344f9749fc80c8f0274061221c

Unknown

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 . . . . . . . . . . . . . . . .