Atjaunināt sīkdatņu piekrišanu

Foundations of Scalable Systems: Designing Distributed Architectures [Mīkstie vāki]

4.19/5 (169 ratings by Goodreads)
  • Formāts: Paperback / softback, 275 pages
  • Izdošanas datums: 20-Jul-2022
  • Izdevniecība: O'Reilly Media
  • ISBN-10: 1098106067
  • ISBN-13: 9781098106065
  • Mīkstie vāki
  • Cena: 60,87 €*
  • * ši ir gala cena, t.i., netiek piemērotas nekādas papildus atlaides
  • Standarta cena: 71,61 €
  • Ietaupiet 15%
  • Grāmatu piegādes laiks ir 3-4 nedēļas, ja grāmata ir uz vietas izdevniecības noliktavā. Ja izdevējam nepieciešams publicēt jaunu tirāžu, grāmatas piegāde var aizkavēties.
  • Daudzums:
  • Ielikt grozā
  • Piegādes laiks - 4-6 nedēļas
  • Pievienot vēlmju sarakstam
  • Formāts: Paperback / softback, 275 pages
  • Izdošanas datums: 20-Jul-2022
  • Izdevniecība: O'Reilly Media
  • ISBN-10: 1098106067
  • ISBN-13: 9781098106065

In many systems, scalability becomes the primary driver as the user base grows. Attractive features and high utility breed success, which brings more requests to handle and more data to manage. But organizations reach a tipping point when design decisions that made sense under light loads suddenly become technical debt. This practical book covers design approaches and technologies that make it possible to scale an application quickly and cost-effectively.

Author Ian Gorton takes software architects and developers through the principles of foundational distributed systems. You'll explore the essential ingredients of scalable solutions, including replication, state management, load balancing, and caching. Specific chapters focus on the implications of scalability for databases, microservices, and event-based streaming systems.

You will focus on:

  • Foundations of scalable systems: Learn basic design principles of scalability, its costs, and architectural tradeoffs
  • Designing scalable services: Dive into service design, caching, asynchronous messaging, serverless processing, and microservices
  • Designing scalable data systems: Learn data system fundamentals, NoSQL databases, and eventual consistency versus strong consistency
  • Designing scalable streaming systems: Explore stream processing systems and scalable event-driven processing

Preface xi
Part I The Basics
1 Introduction to Scalable Systems
3(16)
What Is Scalability?
3(3)
Examples of System Scale in the Early 2000s
6(1)
How Did We Get Here? A Brief History of System Growth
7(2)
Scalability Basic Design Principles
9(2)
Scalability and Costs
11(2)
Scalability and Architecture Trade-Offs
13(4)
Performance
13(1)
Availability
14(1)
Security
15(1)
Manageability
16(1)
Summary and Further Reading
17(2)
2 Distributed Systems Architectures: An Introduction
19(16)
Basic System Architecture
19(2)
Scale Out
21(2)
Scaling the Database with Caching
23(2)
Distributing the Database
25(2)
Multiple Processing Tiers
27(3)
Increasing Responsiveness
30(2)
Systems and Hardware Scalability
32(2)
Summary and Further Reading
34(1)
3 Distributed Systems Essentials
35(26)
Communications Basics
35(8)
Communications Hardware
36(3)
Communications Software
39(4)
Remote Method Invocation
43(6)
Partial Failures
49(4)
Consensus in Distributed Systems
53(3)
Time in Distributed Systems
56(2)
Summary and Further Reading
58(3)
4 An Overview of Concurrent Systems
61(32)
Why Concurrency?
62(2)
Threads
64(3)
Order of Thread Execution
67(1)
Problems with Threads
68(10)
Race Conditions
69(4)
Deadlocks
73(5)
Thread States
78(1)
Thread Coordination
79(3)
Thread Pools
82(2)
Barrier Synchronization
84(2)
Thread-Safe Collections
86(2)
Summary and Further Reading
88(5)
Part II Scalable Systems
5 Application Services
93(22)
Service Design
93(10)
Application Programming Interface (API)
94(3)
Designing Services
97(3)
State Management
100(3)
Applications Servers
103(3)
Horizontal Scaling
106(1)
Load Balancing
107(6)
Load Distribution Policies
109(1)
Health Monitoring
109(1)
Elasticity
110(1)
Session Affinity
111(2)
Summary and Further Reading
113(2)
6 Distributed Caching
115(12)
Application Caching
115(5)
Web Caching
120(4)
Cache-Control
121(1)
Expires and Last-Modified
121(1)
Etag
122(2)
Summary and Further Reading
124(3)
7 Asynchronous Messaging
127(20)
Introduction to Messaging
128(5)
Messaging Primitives
128(2)
Message Persistence
130(1)
Publish-Subscribe
131(1)
Message Replication
132(1)
Example: RabbitMQ
133(8)
Messages, Exchanges, and Queues
133(2)
Distribution and Concurrency
135(3)
Data Safety and Performance Trade-offs
138(2)
Availability and Performance Trade-Offs
140(1)
Messaging Patterns
141(3)
Competing Consumers
141(1)
Exactly-Once Processing
142(1)
Poison Messages
143(1)
Summary and Further Reading
144(3)
8 Serverless Processing Systems
147(16)
The Attractions of Serverless
147(2)
Google App Engine
149(3)
The Basics
149(1)
GAE Standard Environment
150(1)
Autoscaling
151(1)
AWS Lambda
152(5)
Lambda Function Life Cycle
153(1)
Execution Considerations
154(1)
Scalability
155(2)
Case Study: Balancing Throughput and Costs
157(4)
Choosing Parameter Values
158(1)
GAE Autoscaling Parameter Study Design
159(1)
Results
160(1)
Summary and Further Reading
161(2)
9 Microservices
163(22)
The Movement to Microservices
164(8)
Monolithic Applications
164(2)
Breaking Up the Monolith
166(2)
Deploying Microservices
168(2)
Principles of Microservices
170(2)
Resilience in Microservices
172(8)
Cascading Failures
173(5)
Bulkhead Pattern
178(2)
Summary and Further Reading
180(5)
Part III Scalable Distributed Databases
10 Scalable Database Fundamentals
185(20)
Distributed Databases
185(1)
Scaling Relational Databases
186(6)
Scaling Up
186(2)
Scaling Out: Read Replicas
188(1)
Scale Out: Partitioning Data
189(2)
Example: Oracle RAC
191(1)
The Movement to NoSQL
192(10)
NoSQL Data Models
196(1)
Query Languages
197(1)
Data Distribution
198(4)
The CAP Theorem
202(1)
Summary and Further Reading
203(2)
11 Eventual Consistency
205(18)
What Is Eventual Consistency?
205(4)
Inconsistency Window
206(1)
Read Your Own Writes
207(2)
Tunable Consistency
209(2)
Quorum Reads and Writes
211(2)
Replica Repair
213(2)
Active Repair
214(1)
Passive Repair
214(1)
Handling Conflicts
215(6)
Last Writer Wins
216(1)
Version Vectors
217(4)
Summary and Further Reading
221(2)
12 Strong Consistency
223(24)
Introduction to Strong Consistency
224(2)
Consistency Models
226(1)
Distributed Transactions
227(5)
Two-Phase Commit
228(2)
2PC Failure Modes
230(2)
Distributed Consensus Algorithms
232(12)
Raft
234(2)
Leader Election
236(2)
Strong Consistency in Practice
238(1)
VoltDB
238(3)
Google Cloud Spanner
241(3)
Summary and Further Reading
244(3)
13 Distributed Database Implementations
247(24)
Redis
248(5)
Data Model and API
248(2)
Distribution and Replication
250(1)
Strengths and Weaknesses
251(2)
MongoDB
253(7)
Data Model and API
254(2)
Distribution and Replication
256(3)
Strengths and Weaknesses
259(1)
Amazon DynamoDB
260(7)
Data Model and API
261(3)
Distribution and Replication
264(2)
Strengths and Weaknesses
266(1)
Summary and Further Reading
267(4)
Part IV Event and Stream Processing
14 Scalable Event-Driven Processing
271(16)
Event-Driven Architectures
272(2)
Apache Kafka
274(10)
Topics
275(1)
Producers and Consumers
276(3)
Scalability
279(4)
Availability
283(1)
Summary and Further Reading
284(3)
15 Stream Processing Systems
287(16)
Introduction to Stream Processing
288(3)
Stream Processing Platforms
291(2)
Case Study: Apache Flink
293(7)
DataStream API
293(2)
Scalability
295(3)
Data Safety
298(2)
Conclusions and Further Reading
300(3)
16 Final Tips for Success
303(4)
Automation
304(1)
Observability
305(1)
Deployment Platforms
306(1)
Data Lakes
307(1)
Further Reading and Conclusions 307(2)
Index 309
Ian Gorton has 30 years experience as a software architect, author, computer science professor and consultant. He has focused on distributed technologies since his days in graduate school, and has worked on large scale software systems in areas such as banking, telecommunications, government, health care and scientific modeling and simulation. During this time, he has seen software systems evolve to the massive scale they routinely operate at today. Ian has written 3 books, including "Essential Software Architecture" and "Data Intensive Computing", and is the author of 200+ scientific and professional publications on software architecture and software engineering. At the Carnegie Mellon Software Engineering Institute he led R&D projects in big data and massively scalable systems, and has continued working, writing and speaking on these topics since joining Northeastern University as a Professor of Computer Science in 2015. He has a PhD from Sheffield Hallam University, UK and is a Senior Member of the IEEE Computer Society.