Preface |
|
xix | |
Chapter 1 Introduction to Distributed Platforms |
|
2 | (8) |
|
1.1 The Need for a Distributed Services Platform |
|
|
3 | (1) |
|
1.2 The Precious CPU Cycles |
|
|
4 | (1) |
|
1.3 The Case for Domain-Specific Hardware |
|
|
4 | (1) |
|
|
5 | (1) |
|
1.5 Attempts at Defining a Distributed Services Platform |
|
|
6 | (1) |
|
1.6 Requirements for a Distributed Services Platform |
|
|
7 | (2) |
|
|
9 | (1) |
Chapter 2 Network Design |
|
10 | (24) |
|
|
11 | (3) |
|
|
12 | (1) |
|
|
12 | (1) |
|
2.1.3 LPM Forwarding in Hardware |
|
|
13 | (1) |
|
|
14 | (1) |
|
|
14 | (2) |
|
|
16 | (6) |
|
|
18 | (1) |
|
|
18 | (1) |
|
2.3.3 Modern Encapsulations |
|
|
19 | (1) |
|
|
19 | (3) |
|
|
22 | (1) |
|
|
22 | (1) |
|
2.5 Where to Terminate the Encapsulation |
|
|
23 | (1) |
|
|
23 | (2) |
|
2.7 Using Discrete Appliance for Services |
|
|
25 | (2) |
|
2.7.1 Tromboning with VXLAN |
|
|
25 | (1) |
|
2.7.2 Tromboning with VRF |
|
|
26 | (1) |
|
|
27 | (1) |
|
2.8 Cache-Based Forwarding |
|
|
27 | (2) |
|
2.9 Generic Forwarding Table |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
30 | (4) |
Chapter 3 Virtualization |
|
34 | (28) |
|
3.1 Virtualization and Clouds |
|
|
35 | (2) |
|
3.2 Virtual Machines and Hypervisors |
|
|
37 | (10) |
|
|
40 | (1) |
|
|
41 | (2) |
|
|
43 | (1) |
|
|
43 | (3) |
|
|
46 | (1) |
|
|
47 | (5) |
|
|
48 | (1) |
|
|
49 | (1) |
|
3.3.3 Container Network Interface |
|
|
49 | (1) |
|
|
50 | (2) |
|
3.4 The Microservice Architecture |
|
|
52 | (3) |
|
|
54 | (1) |
|
|
54 | (1) |
|
|
55 | (2) |
|
|
57 | (1) |
|
|
58 | (1) |
|
|
58 | (4) |
Chapter 4 Network Virtualization Services |
|
62 | (22) |
|
4.1 Introduction to Networking Services |
|
|
62 | (1) |
|
4.2 Software-Defined Networking |
|
|
63 | (6) |
|
|
64 | (2) |
|
|
66 | (1) |
|
|
67 | (1) |
|
4.2.4 Data Plane Development Kit (DPDK) |
|
|
68 | (1) |
|
|
69 | (10) |
|
|
70 | (3) |
|
|
73 | (1) |
|
4.3.3 DPDK RTE Flow Filtering |
|
|
74 | (1) |
|
4.3.4 VPP (Vector Packet Processing) |
|
|
75 | (1) |
|
|
76 | (1) |
|
|
76 | (2) |
|
4.3.7 Summary on Virtual Switches |
|
|
78 | (1) |
|
|
79 | (1) |
|
|
79 | (1) |
|
4.6 Troubleshooting and Telemetry |
|
|
80 | (2) |
|
|
82 | (1) |
|
|
82 | (2) |
Chapter 5 Security Services |
|
84 | (16) |
|
5.1 Distributed Firewalls |
|
|
85 | (1) |
|
|
86 | (1) |
|
|
87 | (2) |
|
|
89 | (1) |
|
5.5 Asymmetric Encryption |
|
|
89 | (1) |
|
|
90 | (1) |
|
|
90 | (1) |
|
|
90 | (1) |
|
|
91 | (1) |
|
5.10 TCP/TLS/HTTP Implementation |
|
|
91 | (1) |
|
|
92 | (2) |
|
|
92 | (1) |
|
|
93 | (1) |
|
|
94 | (1) |
|
|
94 | (3) |
|
|
97 | (1) |
|
|
97 | (1) |
|
|
98 | (2) |
Chapter 6 Distributed Storage and RDMA Services |
|
100 | (30) |
|
|
103 | (16) |
|
6.1.1 RDMA Architecture Overview |
|
|
106 | (2) |
|
6.1.2 RDMA Transport Services |
|
|
108 | (1) |
|
|
108 | (1) |
|
|
109 | (1) |
|
|
109 | (1) |
|
|
110 | (1) |
|
|
110 | (2) |
|
6.1.8 RoCEv2 and Lossy Networks |
|
|
112 | (5) |
|
6.1.9 Continued Evolution of RDMA |
|
|
117 | (2) |
|
|
119 | (9) |
|
|
119 | (1) |
|
|
120 | (1) |
|
6.2.3 Data Plane Model of Storage Protocols |
|
|
120 | (2) |
|
6.2.4 Remote Storage Meets Virtualization |
|
|
122 | (2) |
|
6.2.5 Distributed Storages Services |
|
|
124 | (1) |
|
|
125 | (1) |
|
|
125 | (1) |
|
6.2.8 Storage Reliability |
|
|
126 | (1) |
|
6.2.9 Offloading and Distributing Storage Services |
|
|
126 | (1) |
|
6.2.10 Persistent Memory as a New Storage Tier |
|
|
127 | (1) |
|
|
128 | (1) |
|
|
128 | (2) |
Chapter 7 CPUs and Domain-Specific Hardware |
|
130 | (12) |
|
7.1 42 Years of Microprocessor Trend Data |
|
|
131 | (1) |
|
|
132 | (2) |
|
|
134 | (1) |
|
|
135 | (1) |
|
7.5 Other Technical Factors |
|
|
136 | (1) |
|
7.6 Putting It All Together |
|
|
137 | (1) |
|
7.7 Is Moore's Law Dead or Not? |
|
|
138 | (1) |
|
7.8 Domain-specific Hardware |
|
|
139 | (1) |
|
7.9 Economics of the Server |
|
|
139 | (1) |
|
|
140 | (1) |
|
|
140 | (2) |
Chapter 8 NIC Evolution |
|
142 | (14) |
|
8.1 Understanding Server Buses |
|
|
143 | (1) |
|
8.2 Comparing NIC Form Factors |
|
|
144 | (5) |
|
|
144 | (2) |
|
8.2.2 Proprietary Mezzanine Cards |
|
|
146 | (1) |
|
8.2.3 OCP Mezzanine Cards |
|
|
147 | (1) |
|
|
148 | (1) |
|
8.3 Looking at the NIC Evolution |
|
|
149 | (3) |
|
8.4 Using Single Root Input/Output Virtualization |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
154 | (1) |
|
|
155 | (1) |
|
|
155 | (1) |
Chapter 9 Implementing a DS Platform |
|
156 | (18) |
|
9.1 Analyzing the Goals for a Distributed Services Platform |
|
|
157 | (4) |
|
9.1.1 Services Everywhere |
|
|
157 | (1) |
|
|
157 | (1) |
|
|
158 | (1) |
|
|
158 | (1) |
|
|
158 | (1) |
|
|
159 | (1) |
|
9.1.7 Observability and Troubleshooting Capability |
|
|
159 | (1) |
|
|
160 | (1) |
|
9.1.9 Host Mode versus Network Mode |
|
|
160 | (1) |
|
|
161 | (1) |
|
9.2 Understanding Constraints |
|
|
161 | (2) |
|
9.2.1 Virtualized versus Bare-metal Servers |
|
|
161 | (1) |
|
9.2.2 Greenfield versus Brownfield Deployment |
|
|
162 | (1) |
|
|
162 | (1) |
|
|
162 | (1) |
|
|
163 | (1) |
|
9.3 Determining the Target User |
|
|
163 | (1) |
|
9.3.1 Enterprise Data Centers |
|
|
163 | (1) |
|
9.3.2 Cloud Providers and Service Providers |
|
|
164 | (1) |
|
9.4 Understanding DSN Implementations |
|
|
164 | (8) |
|
|
164 | (2) |
|
|
166 | (2) |
|
9.4.3 DSN Bump-in-the-Wire |
|
|
168 | (1) |
|
|
169 | (2) |
|
9.4.5 DSNs in an Appliance |
|
|
171 | (1) |
|
|
172 | (1) |
|
|
173 | (1) |
Chapter 10 DSN Hardware Architectures |
|
174 | (16) |
|
10.1 The Main Building Blocks of a DSN |
|
|
174 | (2) |
|
10.2 Identifying the Silicon Sweet Spot |
|
|
176 | (2) |
|
|
177 | (1) |
|
|
178 | (1) |
|
10.3 Choosing an Architecture |
|
|
178 | (1) |
|
10.4 Having a Sea of CPU Cores |
|
|
179 | (2) |
|
10.5 Understanding Field-Programmable Gate Arrays |
|
|
181 | (2) |
|
10.6 Using Application-Specific Integrated Circuits |
|
|
183 | (1) |
|
10.7 Determining DSN Power Consumption |
|
|
184 | (1) |
|
10.8 Determining Memory Needs |
|
|
185 | (2) |
|
|
185 | (1) |
|
|
186 | (1) |
|
|
186 | (1) |
|
10.8.4 Memory Bandwidth Requirements |
|
|
186 | (1) |
|
|
187 | (1) |
|
|
187 | (3) |
Chapter 11 The P4 Domain-Specific Language |
|
190 | (14) |
|
|
192 | (1) |
|
11.2 Using the P4 Language |
|
|
193 | (1) |
|
11.3 Getting to Know the Portable Switch Architecture |
|
|
194 | (1) |
|
11.4 Looking at a P4 Example |
|
|
195 | (4) |
|
11.5 Implementing the P4Runtime API |
|
|
199 | (2) |
|
11.6 Understanding the P4 INT |
|
|
201 | (1) |
|
|
201 | (1) |
|
11.7.1 Portable NIC Architecture |
|
|
201 | (1) |
|
11.7.2 Language Composability |
|
|
201 | (1) |
|
11.7.3 Better Programming and Development Tools |
|
|
202 | (1) |
|
|
202 | (1) |
|
|
203 | (1) |
Chapter 12 Management Architectures for DS Platforms |
|
204 | (26) |
|
12.1 Architectural Traits of a Management Control Plane |
|
|
205 | (1) |
|
12.2 Declarative Configuration |
|
|
206 | (1) |
|
12.3 Building a Distributed Control Plane as a Cloud-Native Application |
|
|
207 | (2) |
|
12.4 Monitoring and Troubleshooting |
|
|
209 | (1) |
|
12.5 Securing the Management Control Plane |
|
|
210 | (1) |
|
|
211 | (1) |
|
12.7 Performance and Scale |
|
|
212 | (2) |
|
|
214 | (1) |
|
|
215 | (3) |
|
|
218 | (5) |
|
12.10.1 Scaling a Single SDSP |
|
|
219 | (1) |
|
12.10.2 Distributed Multiple SDSPs |
|
|
220 | (1) |
|
12.10.3 Federation of Multiple SDSPs |
|
|
220 | (3) |
|
12.11 Scale and Performance Testing |
|
|
223 | (4) |
|
|
227 | (1) |
|
|
227 | (3) |
Index |
|
230 | |