Preface |
|
xi | |
|
1 What Happens When There Are No "Best Practices"? |
|
|
1 | (24) |
|
|
2 | (1) |
|
Giving Timeless Advice About Software Architecture |
|
|
3 | (1) |
|
The Importance of Data in Architecture |
|
|
4 | (1) |
|
Architectural Decision Records |
|
|
5 | (1) |
|
Architecture Fitness Functions |
|
|
6 | (7) |
|
|
7 | (6) |
|
Architecture Versus Design: Keeping Definitions Simple |
|
|
13 | (2) |
|
Introducing the Sysops Squad Saga |
|
|
15 | (10) |
|
|
16 | (1) |
|
|
17 | (1) |
|
|
17 | (1) |
|
Sysops Squad Architectural Components |
|
|
18 | (1) |
|
|
19 | (6) |
Part I Pulling Things Apart |
|
|
2 Discerning Coupling in Software Architecture |
|
|
25 | (20) |
|
Architecture (Quantum I Quanta) |
|
|
28 | (14) |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
30 | (8) |
|
|
38 | (4) |
|
Sysops Squad Saga: Understanding Quanta |
|
|
42 | (3) |
|
3 Architectural Modularity |
|
|
45 | (18) |
|
|
49 | (10) |
|
|
50 | (4) |
|
|
54 | (1) |
|
|
55 | (1) |
|
|
56 | (2) |
|
Availability/Fault Tolerance |
|
|
58 | (1) |
|
Sysops Squad Saga: Creating a Business Case |
|
|
59 | (4) |
|
4 Architectural Decomposition |
|
|
63 | (18) |
|
Is the Codebase Decomposable? |
|
|
65 | (6) |
|
Afferent and Efferent Coupling |
|
|
66 | (1) |
|
Abstractness and Instability |
|
|
67 | (2) |
|
Distance from the Main Sequence |
|
|
69 | (2) |
|
Component-Based Decomposition |
|
|
71 | (2) |
|
|
73 | (5) |
|
|
77 | (1) |
|
Sysops Squad Saga: Choosing a Decomposition Approach |
|
|
78 | (3) |
|
5 Component-Based Decomposition Patterns |
|
|
81 | (50) |
|
Identify and Size Components Pattern |
|
|
84 | (10) |
|
|
84 | (3) |
|
Fitness Functions for Governance |
|
|
87 | (3) |
|
Sysops Squad Saga: Sizing Components |
|
|
90 | (4) |
|
Gather Common Domain Components Pattern |
|
|
94 | (7) |
|
|
94 | (1) |
|
Fitness Functions for Governance |
|
|
95 | (2) |
|
Sysops Squad Saga: Gathering Common Components |
|
|
97 | (4) |
|
Flatten Components Pattern |
|
|
101 | (10) |
|
|
102 | (5) |
|
Fitness Functions for Governance |
|
|
107 | (1) |
|
Sysops Squad Saga: Flattening Components |
|
|
107 | (4) |
|
Determine Component Dependencies Pattern |
|
|
111 | (9) |
|
|
112 | (5) |
|
Fitness Functions for Governance |
|
|
117 | (1) |
|
Sysops Squad Saga: Identifying Component Dependencies |
|
|
118 | (2) |
|
Create Component Domains Pattern |
|
|
120 | (6) |
|
|
121 | (1) |
|
Fitness Functions for Governance |
|
|
122 | (1) |
|
Sysops Squad Saga: Creating Component Domains |
|
|
123 | (3) |
|
Create Domain Services Pattern |
|
|
126 | (4) |
|
|
126 | (3) |
|
Fitness Functions for Governance |
|
|
129 | (1) |
|
Sysops Squad Saga: Creating Domain Services |
|
|
129 | (1) |
|
|
130 | (1) |
|
6 Pulling Apart Operational Data |
|
|
131 | (54) |
|
Data Decomposition Drivers |
|
|
132 | (19) |
|
|
133 | (13) |
|
|
146 | (4) |
|
Sysops Squad Saga: Justifying Database Decomposition |
|
|
150 | (1) |
|
Decomposing Monolithic Data |
|
|
151 | (10) |
|
Step 1: Analyze Database and Create Data Domains |
|
|
156 | (1) |
|
Step 2: Assign Tables to Data Domains |
|
|
156 | (2) |
|
Step 3: Separate Database Connections to Data Domains |
|
|
158 | (1) |
|
Step 4: Move Schemas to Separate Database Servers |
|
|
159 | (2) |
|
Step 5: Switch Over to Independent Database Servers |
|
|
161 | (1) |
|
Selecting a Database Type |
|
|
161 | (18) |
|
|
163 | (2) |
|
|
165 | (2) |
|
|
167 | (2) |
|
|
169 | (2) |
|
|
171 | (2) |
|
|
173 | (2) |
|
|
175 | (2) |
|
|
177 | (2) |
|
Sysops Squad Saga: Polyglot Databases |
|
|
179 | (6) |
|
|
185 | (34) |
|
Granularity Disintegrators |
|
|
188 | (9) |
|
Service Scope and Function |
|
|
189 | (2) |
|
|
191 | (1) |
|
Scalability and Throughput |
|
|
192 | (1) |
|
|
193 | (2) |
|
|
195 | (1) |
|
|
196 | (1) |
|
|
197 | (11) |
|
|
198 | (2) |
|
Workflow and Choreography |
|
|
200 | (3) |
|
|
203 | (2) |
|
|
205 | (3) |
|
Finding the Right Balance |
|
|
208 | (1) |
|
Sysops Squad Saga: Ticket Assignment Granularity |
|
|
209 | (3) |
|
Sysops Squad Saga: Customer Registration Granularity |
|
|
212 | (7) |
Part II Putting Things Back Together |
|
|
|
219 | (30) |
|
|
221 | (2) |
|
|
223 | (1) |
|
|
223 | (5) |
|
Dependency Management and Change Control |
|
|
224 | (1) |
|
|
225 | (2) |
|
|
227 | (1) |
|
|
228 | (6) |
|
|
229 | (2) |
|
|
231 | (1) |
|
|
232 | (1) |
|
|
232 | (2) |
|
|
234 | (1) |
|
Sidecars and Service Mesh |
|
|
234 | (5) |
|
|
239 | (1) |
|
Sysops Squad Saga: Common Infrastructure Logic |
|
|
239 | (3) |
|
Code Reuse: When Does It Add Value? |
|
|
242 | (2) |
|
|
244 | (1) |
|
Sysops Squad Saga: Shared Domain Functionality |
|
|
244 | (5) |
|
9 Data Ownership and Distributed Transactions |
|
|
249 | (34) |
|
|
250 | (1) |
|
Single Ownership Scenario |
|
|
251 | (1) |
|
Common Ownership Scenario |
|
|
252 | (1) |
|
|
253 | (8) |
|
|
254 | (2) |
|
|
256 | (2) |
|
|
258 | (3) |
|
Service Consolidation Technique |
|
|
261 | (1) |
|
|
262 | (1) |
|
|
263 | (4) |
|
Eventual Consistency Patterns |
|
|
267 | (12) |
|
Background Synchronization Pattern |
|
|
269 | (3) |
|
Orchestrated Request-Based Pattern |
|
|
272 | (5) |
|
|
277 | (2) |
|
Sysops Squad Saga: Data Ownership for Ticket Processing |
|
|
279 | (4) |
|
10 Distributed Data Access |
|
|
283 | (16) |
|
Interservice Communication Pattern |
|
|
285 | (2) |
|
Column Schema Replication Pattern |
|
|
287 | (1) |
|
Replicated Caching Pattern |
|
|
288 | (5) |
|
|
293 | (2) |
|
Sysops Squad Saga: Data Access for Ticket Assignment |
|
|
295 | (4) |
|
11 Managing Distributed Workflows |
|
|
299 | (24) |
|
Orchestration Communication Style |
|
|
301 | (5) |
|
Choreography Communication Style |
|
|
306 | (9) |
|
Workflow State Management |
|
|
311 | (4) |
|
Trade-Offs Between Orchestration and Choreography |
|
|
315 | (2) |
|
|
315 | (2) |
|
Sysops Squad Saga: Managing Workflows |
|
|
317 | (6) |
|
|
323 | (42) |
|
Transactional Saga Patterns |
|
|
324 | (27) |
|
|
325 | (5) |
|
Phone Tag Saga(sac) Pattern |
|
|
330 | (3) |
|
Fairy Tale Saga(seo) Pattern |
|
|
333 | (3) |
|
Time Travel Saga(sec) Pattern |
|
|
336 | (4) |
|
Fantasy Fiction Saga(aao) Pattern |
|
|
340 | (3) |
|
Horror Story(aac) Pattern |
|
|
343 | (3) |
|
Parallel Saga(aeo) Pattern |
|
|
346 | (3) |
|
Anthology Saga(aec) Pattern |
|
|
349 | (2) |
|
State Management and Eventual Consistency |
|
|
351 | (5) |
|
|
352 | (4) |
|
Techniques for Managing Sagas |
|
|
356 | (2) |
|
Sysops Squad Saga: Atomic Transactions and Compensating Updates |
|
|
358 | (7) |
|
|
365 | (16) |
|
Strict Versus Loose Contracts |
|
|
367 | (9) |
|
Trade-Offs Between Strict and Loose Contracts |
|
|
370 | (2) |
|
Contracts in Microservices |
|
|
372 | (4) |
|
|
376 | (3) |
|
Over-Coupling via Stamp Coupling |
|
|
376 | (1) |
|
|
377 | (1) |
|
Stamp Coupling for Workflow Management |
|
|
378 | (1) |
|
Sysops Squad Saga: Managing Ticketing Contracts |
|
|
379 | (2) |
|
14 Managing Analytical Data |
|
|
381 | (18) |
|
|
382 | (7) |
|
|
382 | (4) |
|
|
386 | (3) |
|
|
389 | (5) |
|
|
389 | (1) |
|
|
390 | (3) |
|
Data Mesh, Coupling, and Architecture Quantum |
|
|
393 | (1) |
|
|
393 | (1) |
|
Sysops Squad Saga: Data Mesh |
|
|
394 | (5) |
|
15 Build Your Own Trade-Off Analysis |
|
|
399 | (18) |
|
Finding Entangled Dimensions |
|
|
401 | (3) |
|
|
401 | (1) |
|
|
402 | (1) |
|
|
403 | (1) |
|
|
404 | (12) |
|
Qualitative Versus Quantative Analysis |
|
|
404 | (1) |
|
|
404 | (1) |
|
The "Out-of-Context" Trap |
|
|
405 | (3) |
|
Model Relevant Domain Cases |
|
|
408 | (2) |
|
Prefer Bottom Line over Overwhelming Evidence |
|
|
410 | (2) |
|
Avoiding Snake Oil and Evangelism |
|
|
412 | (4) |
|
Sysops Squad Saga: Epilogue |
|
|
416 | (1) |
A Concept and Term References |
|
417 | (2) |
B Architecture Decision Record References |
|
419 | (2) |
C Trade-Off References |
|
421 | (4) |
Index |
|
425 | |