Acknowledgments |
|
xv | |
Introduction |
|
xvii | |
Chapter 1 Core Concepts |
|
1 | (36) |
|
|
2 | (3) |
|
Evolution from a Single Server to a Global Audience |
|
|
5 | (17) |
|
Single-Server Configuration |
|
|
5 | (2) |
|
Making the Server Stronger: Scaling Vertically |
|
|
7 | (4) |
|
|
11 | (2) |
|
Content Delivery Network: Scalability for Static Content |
|
|
13 | (3) |
|
Distributing the Traffic: Horizontal Scalability |
|
|
16 | (3) |
|
Scalability for a Global Audience |
|
|
19 | (3) |
|
Overview of a Data Center Infrastructure |
|
|
22 | (5) |
|
|
22 | (2) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
25 | (1) |
|
Data Center Infrastructure |
|
|
26 | (1) |
|
Overview of the Application Architecture |
|
|
27 | (8) |
|
|
28 | (2) |
|
|
30 | (4) |
|
|
34 | (1) |
|
|
35 | (2) |
Chapter 2 Principles of Good Software Design |
|
37 | (46) |
|
|
38 | (5) |
|
Hide Complexity and Build Abstractions |
|
|
38 | (2) |
|
|
40 | (1) |
|
Try Test-Driven Development |
|
|
41 | (1) |
|
Learn from Models of Simplicity in Software Design |
|
|
42 | (1) |
|
|
43 | (5) |
|
|
44 | (3) |
|
Avoiding Unnecessary Coupling |
|
|
47 | (1) |
|
|
47 | (1) |
|
Don't Repeat Yourself (DRY) |
|
|
48 | (3) |
|
Copy and Paste Programming |
|
|
50 | (1) |
|
|
51 | (3) |
|
|
54 | (7) |
|
|
57 | (2) |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
61 | (2) |
|
Promoting Single Responsibility |
|
|
62 | (1) |
|
Examples of Single Responsibility |
|
|
62 | (1) |
|
|
63 | (2) |
|
|
65 | (3) |
|
Inversion of Control (IOC) |
|
|
68 | (3) |
|
|
71 | (6) |
|
|
72 | (2) |
|
|
74 | (1) |
|
|
75 | (2) |
|
|
77 | (4) |
|
|
81 | (2) |
Chapter 3 Building the Front-End Layer |
|
83 | (40) |
|
|
85 | (16) |
|
|
88 | (5) |
|
|
93 | (4) |
|
Managing Other Types of State |
|
|
97 | (4) |
|
Components of the Scalable Front End |
|
|
101 | (16) |
|
|
102 | (1) |
|
|
103 | (8) |
|
|
111 | (2) |
|
|
113 | (1) |
|
|
114 | (3) |
|
|
117 | (4) |
|
|
117 | (2) |
|
|
119 | (2) |
|
|
121 | (2) |
Chapter 4 Web Services |
|
123 | (32) |
|
|
124 | (7) |
|
Web Services as an Alternative Presentation Layer |
|
|
124 | (3) |
|
|
127 | (3) |
|
|
130 | (1) |
|
|
131 | (7) |
|
Function-Centric Services |
|
|
131 | (3) |
|
Resource-Centric Services |
|
|
134 | (4) |
|
Scaling REST Web Services |
|
|
138 | (15) |
|
Keeping Service Machines Stateless |
|
|
139 | (7) |
|
Caching Service Responses |
|
|
146 | (4) |
|
|
150 | (3) |
|
|
153 | (2) |
Chapter 5 Data Layer |
|
155 | (52) |
|
|
156 | (33) |
|
|
156 | (14) |
|
Data Partitioning (Sharding) |
|
|
170 | (19) |
|
|
189 | (15) |
|
The Rise of Eventual Consistency |
|
|
192 | (5) |
|
Faster Recovery to Increase Availability |
|
|
197 | (2) |
|
|
199 | (5) |
|
|
204 | (3) |
Chapter 6 Caching |
|
207 | (38) |
|
|
208 | (2) |
|
|
210 | (17) |
|
|
211 | (6) |
|
Types of HTTP Cache Technologies |
|
|
217 | (6) |
|
|
223 | (4) |
|
Caching Application Objects |
|
|
227 | (12) |
|
Common Types of Object Caches |
|
|
228 | (6) |
|
|
234 | (5) |
|
|
239 | (5) |
|
Cache High Up the Call Stack |
|
|
239 | (1) |
|
|
240 | (2) |
|
|
242 | (1) |
|
Cache Invalidation Is Difficult |
|
|
243 | (1) |
|
|
244 | (1) |
Chapter 7 Asynchronous Processing |
|
245 | (58) |
|
|
246 | (10) |
|
|
247 | (2) |
|
|
249 | (5) |
|
|
254 | (2) |
|
|
256 | (14) |
|
|
258 | (1) |
|
|
259 | (1) |
|
|
260 | (5) |
|
|
265 | (1) |
|
|
266 | (4) |
|
Benefits of Message Queues |
|
|
270 | (6) |
|
Enabling Asynchronous Processing |
|
|
270 | (2) |
|
|
272 | (1) |
|
Evening Out Traffic Spikes |
|
|
273 | (1) |
|
Isolating Failures and Self-Healing |
|
|
274 | (1) |
|
|
275 | (1) |
|
Message Queue-Related Challenges |
|
|
276 | (6) |
|
|
276 | (4) |
|
|
280 | (1) |
|
Race Conditions Become More Likely |
|
|
281 | (1) |
|
Risk of Increased Complexity |
|
|
282 | (1) |
|
Message Queue-Related Anti-Patterns |
|
|
282 | (2) |
|
Treating the Message Queue as a TCP Socket |
|
|
282 | (1) |
|
Treating Message Queue as a Database |
|
|
283 | (1) |
|
Coupling Message Producers with Consumers |
|
|
283 | (1) |
|
Lack of Poison Message Handling |
|
|
284 | (1) |
|
Quick Comparison of Selected Messaging Platforms |
|
|
284 | (11) |
|
Amazon Simple Queue Service |
|
|
285 | (3) |
|
|
288 | (3) |
|
|
291 | (1) |
|
|
292 | (3) |
|
Introduction to Event-Driven Architecture |
|
|
295 | (6) |
|
Request/Response Interaction |
|
|
296 | (1) |
|
Direct Worker Queue Interaction |
|
|
296 | (1) |
|
|
297 | (4) |
|
|
301 | (2) |
Chapter 8 Searching for Data |
|
303 | (28) |
|
|
304 | (9) |
|
|
313 | (13) |
|
|
313 | (5) |
|
Wide Column Storage Example |
|
|
318 | (8) |
|
|
326 | (4) |
|
Introduction to Search Engines |
|
|
326 | (2) |
|
Using a Dedicated Search Engine |
|
|
328 | (2) |
|
|
330 | (1) |
Chapter 9 Other Dimensions of Scalability |
|
331 | (32) |
|
Scaling Productivity through Automation |
|
|
332 | (15) |
|
|
333 | (2) |
|
|
335 | (5) |
|
|
340 | (5) |
|
|
345 | (2) |
|
|
347 | (10) |
|
Overtime Is Not a Way to Scale |
|
|
347 | (2) |
|
|
349 | (8) |
|
|
357 | (4) |
|
|
357 | (2) |
|
Procedures and Innovation |
|
|
359 | (1) |
|
|
360 | (1) |
|
|
361 | (2) |
Appendix References |
|
363 | (16) |
|
|
364 | (2) |
|
|
366 | (7) |
|
|
373 | (1) |
|
|
374 | (5) |
Index |
|
379 | |