WHAT THIS BOOK IS ABOUT |
|
xvii | |
ACKNOWLEDGMENTS |
|
xxv | |
PART 1: INDIVIDUAL AREAS OF INTEREST |
|
|
1. Preparing for the Challenge |
|
|
3 | (16) |
|
|
3 | (1) |
|
|
4 | (1) |
|
|
4 | (1) |
|
1.4 The Need to Address New Applications |
|
|
5 | (1) |
|
1.5 Definition of Performance |
|
|
5 | (2) |
|
|
7 | (5) |
|
1.6.1 Understanding Hardware and Software Technologies |
|
|
7 | (2) |
|
|
9 | (1) |
|
|
9 | (2) |
|
1.6.4 Tools and Techniques |
|
|
11 | (1) |
|
1.7 Performance Assurance Within a Project Lifecycle |
|
|
12 | (4) |
|
1.7.1 Requirements/Functional Specification Stage |
|
|
13 | (1) |
|
|
13 | (1) |
|
|
14 | (1) |
|
1.7.4 Performance Acceptance Testing |
|
|
15 | (1) |
|
1.7.5 The All-Phases Stage |
|
|
16 | (1) |
|
1.7.6 Post-Implementation |
|
|
16 | (1) |
|
|
16 | (3) |
|
2. Caveat Emptor (Let the Buyer Beware) |
|
|
19 | (16) |
|
|
19 | (1) |
|
2.2 Software Product Lifecycle |
|
|
19 | (1) |
|
2.3 Hardware Product Lifecycle |
|
|
20 | (1) |
|
|
21 | (1) |
|
2.5 Technical Reviews of Products |
|
|
22 | (13) |
|
|
24 | (1) |
|
2.5.2 Reading Vendor Literature |
|
|
25 | (1) |
|
|
26 | (1) |
|
2.5.4 Technical Review Checklist |
|
|
27 | (5) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
31 | (1) |
|
2.5.5 Custom Software Versus Product |
|
|
32 | (1) |
|
2.5.6 Drawing Conclusions |
|
|
32 | (3) |
|
3. Lies, Damned Lies, and Benchmarks |
|
|
35 | (16) |
|
|
35 | (1) |
|
|
36 | (1) |
|
|
36 | (2) |
|
|
38 | (1) |
|
3.5 Independent Benchmarking |
|
|
39 | (1) |
|
3.6 In-House Benchmarking |
|
|
39 | (1) |
|
|
40 | (5) |
|
3.7.1 Simplifying the Problem |
|
|
40 | (1) |
|
3.7.2 Improving Disk Performance |
|
|
41 | (1) |
|
3.7.3 Unrepresentative Deployment |
|
|
42 | (1) |
|
3.7.4 Minimizing Overheads |
|
|
43 | (1) |
|
|
44 | (1) |
|
|
45 | (7) |
|
3.8.1 Using Published Benchmarks |
|
|
45 | (1) |
|
3.8.2 Requesting Benchmarks |
|
|
46 | (1) |
|
3.8.3 In-House Benchmarks |
|
|
47 | (1) |
|
3.8.4 Drawing Conclusions from Benchmarks |
|
|
48 | (3) |
|
4. Nonfunctional Requirements and Solutions |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
52 | (1) |
|
|
52 | (21) |
|
4.3.1 Authors of Requirements |
|
|
53 | (1) |
|
4.3.2 Poor Quality Requirements |
|
|
53 | (2) |
|
4.3.2.1 Poorly Written Requirements |
|
|
54 | (1) |
|
4.3.2.2 Introducing Risk by Requesting Bleeding-Edge Technology |
|
|
54 | (1) |
|
4.3.2.3 Technically Unrealistic Requirements |
|
|
54 | (1) |
|
4.3.2.4 Requirements That Bear No Resemblance to the Available Budget |
|
|
54 | (1) |
|
4.3.2.5 No Explanation of Any Ground Rules |
|
|
55 | (1) |
|
4.3.2.6 Inadequate Sizing Information |
|
|
55 | (1) |
|
4.3.2.7 Ambiguous and Even Contradictory Requirements |
|
|
55 | (1) |
|
|
55 | (2) |
|
4.3.4 And Now for Something Completely Different |
|
|
57 | (1) |
|
|
57 | (2) |
|
4.5 Performance Requirements |
|
|
59 | (3) |
|
|
62 | (1) |
|
4.7 Hardware Deployment and Scalability |
|
|
63 | (1) |
|
4.7.1 Deployment Approaches |
|
|
63 | (1) |
|
4.7.2 Software Scalability |
|
|
64 | (1) |
|
|
65 | (1) |
|
4.8.1 General Observations |
|
|
65 | (2) |
|
4.8.2 Building in Resilience |
|
|
67 | (1) |
|
4.9 The Need for Business Continuity |
|
|
68 | (2) |
|
|
70 | (3) |
|
5. Hardware Sizing: The Crystal Ball Gazing Act |
|
|
73 | (1) |
|
|
73 | (1) |
|
|
74 | (1) |
|
5.3 Summary of Hardware Sizing Approaches |
|
|
75 | (32) |
|
|
75 | (1) |
|
|
75 | (1) |
|
|
76 | (1) |
|
5.3.4 Detailed Transaction-Level Hardware Sizing |
|
|
77 | (1) |
|
|
77 | (1) |
|
5.4 High-Level Sizing Method |
|
|
78 | (1) |
|
5.4.1 Step 1: Information Gathering |
|
|
78 | (4) |
|
|
79 | (1) |
|
|
79 | (1) |
|
5.4.1.3 Identify Workloads and Users |
|
|
79 | (2) |
|
5.4.1.4 Transaction Rates |
|
|
81 | (1) |
|
5.4.2 Step 2: Assess the Credibility of the Available Information |
|
|
82 | (2) |
|
5.4.3 Step 3: Establish the Resource Profiles |
|
|
84 | (2) |
|
|
84 | (1) |
|
5.4.3.2 Use of Benchmark Figures |
|
|
84 | (1) |
|
5.4.3.3 New Software Technology |
|
|
85 | (1) |
|
5.4.3.4 Adjusting Resource Profiles |
|
|
86 | (1) |
|
5.4.4 Step 4: Sizing Calculations |
|
|
86 | (10) |
|
5.4.4.1 The System to Be Sized |
|
|
86 | (1) |
|
5.4.4.2 Disk Capacity: Stage 1 |
|
|
87 | (2) |
|
5.4.4.3 Resource Profiles: Stage 2 |
|
|
89 | (2) |
|
5.4.4.4 Main Calculations: Stage 3 |
|
|
91 | (5) |
|
5.4.5 Step 5: Consider Deployment Options |
|
|
96 | (3) |
|
|
96 | (1) |
|
5.4.5.2 Other Environments |
|
|
97 | (1) |
|
5.5 Batch Processing Considerations |
|
|
97 | (176) |
|
5.5.1 Simple Background Batch |
|
|
99 | (1) |
|
|
99 | (1) |
|
5.6 Sizing Software Products |
|
|
100 | (1) |
|
|
101 | (1) |
|
|
101 | (1) |
|
5.7.2 Productive Approach |
|
|
101 | (1) |
|
5.7.3 Unproductive Approaches |
|
|
102 | (2) |
|
|
104 | (1) |
|
5.9 Hardware Sizing Revisited |
|
|
104 | (1) |
|
|
105 | (1) |
|
|
106 | (1) |
|
|
107 | (1) |
|
|
107 | (1) |
|
|
107 | (1) |
|
|
108 | (1) |
|
6.4 The Political Dimension |
|
|
109 | (1) |
|
|
109 | (1) |
|
6.6 Dealing with Hardware and Software Vendors |
|
|
110 | (2) |
|
|
112 | (1) |
|
|
113 | (1) |
|
|
113 | (1) |
|
|
114 | (1) |
|
|
114 | (1) |
|
|
115 | (2) |
|
7. Designing for Performance, Scalability, and Resilience |
|
|
117 | (28) |
|
|
117 | (1) |
|
|
117 | (3) |
|
7.2.1 Understanding the Work Done in Previous Stages |
|
|
117 | (1) |
|
|
118 | (1) |
|
|
119 | (1) |
|
|
119 | (1) |
|
7.2.5 In-House Benchmarks |
|
|
120 | (1) |
|
|
120 | (1) |
|
7.3 Basic Design Principles |
|
|
120 | (6) |
|
7.3.1 Understanding Resource Usage Costs |
|
|
120 | (1) |
|
7.3.2 Balanced Hardware Configurations |
|
|
121 | (1) |
|
|
122 | (3) |
|
|
125 | (1) |
|
7.4 General Thoughts and Guidelines |
|
|
126 | (1) |
|
|
126 | (1) |
|
7.4.2 Communication Between Software Components |
|
|
127 | (1) |
|
7.4.3 Minimizing Overheads |
|
|
128 | (1) |
|
7.4.4 Going with the Flow |
|
|
129 | (1) |
|
7.4.5 The Only Transaction in the World |
|
|
130 | (1) |
|
|
130 | (1) |
|
7.4.7 Relational Databases |
|
|
130 | (1) |
|
7.4.8 Database Transactions |
|
|
131 | (1) |
|
|
132 | (1) |
|
7.4.10 Network Performance |
|
|
133 | (1) |
|
7.4.11 Publish and Subscribe |
|
|
133 | (1) |
|
|
134 | (1) |
|
|
135 | (1) |
|
7.4.14 Partitioning the Problem |
|
|
135 | (2) |
|
7.4.15 Some Basic Hardware Considerations |
|
|
137 | (1) |
|
7.4.16 Server-Side Batch Processing |
|
|
138 | (1) |
|
7.4.17 Application Resilience |
|
|
139 | (1) |
|
7.4.18 Security Implications |
|
|
139 | (1) |
|
7.4.19 Evaluating Design Approaches |
|
|
139 | (1) |
|
7.4.20 Something for the Back Pocket |
|
|
140 | (1) |
|
|
141 | (1) |
|
7.4.22 Backup and Recovery |
|
|
142 | (1) |
|
|
143 | (1) |
|
|
143 | (1) |
|
|
144 | (1) |
|
|
145 | (6) |
|
|
145 | (1) |
|
|
145 | (2) |
|
|
147 | (1) |
|
|
148 | (1) |
|
8.5 Analytic and Simulation Modeling Tools |
|
|
148 | (1) |
|
8.6 Alternative Approaches |
|
|
149 | (1) |
|
|
150 | (1) |
|
9. Nonfunctional Acceptance |
|
|
151 | (10) |
|
|
151 | (1) |
|
|
151 | (1) |
|
|
152 | (7) |
|
9.3.1 Scope and Logistics |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
153 | (2) |
|
|
155 | (1) |
|
|
156 | (1) |
|
|
157 | (1) |
|
|
157 | (1) |
|
|
158 | (1) |
|
|
159 | (1) |
|
|
159 | (1) |
|
9.5 Operational-Readiness Testing |
|
|
160 | (1) |
|
|
160 | (1) |
|
|
161 | (1) |
|
|
161 | (1) |
|
|
161 | (1) |
|
10.3 Classic Capacity Management |
|
|
162 | (5) |
|
10.3.1 Performance Monitoring/Reporting |
|
|
162 | (2) |
|
10.3.2 Workload Management |
|
|
164 | (1) |
|
|
165 | (1) |
|
10.3.4 Service Level Management |
|
|
165 | (1) |
|
|
166 | (1) |
|
10.4 A Minimalist Approach to Capacity Management |
|
|
167 | (2) |
|
|
169 | (1) |
|
|
169 | (1) |
|
|
169 | (1) |
|
11.3 Devil's Advocate and Seductive Technology |
|
|
171 | (1) |
|
|
171 | (6) |
|
|
172 | (1) |
|
11.4.2 Communication Within the Project Team |
|
|
172 | (1) |
|
11.4.3 Communication Across the Organization |
|
|
173 | (1) |
|
11.4.4 Communication Between Organizations |
|
|
173 | (2) |
|
|
175 | (1) |
|
|
175 | (1) |
|
|
176 | (1) |
|
|
176 | (1) |
|
|
177 | (1) |
|
|
177 | (1) |
|
11.11 Client Responsibilities |
|
|
178 | (1) |
|
11.12 Technical Postmortem |
|
|
179 | (1) |
|
|
179 | (2) |
|
|
181 | (1) |
|
|
181 | (2) |
|
|
183 | (4) |
PART 2: TECHNICAL FOUNDATION |
|
|
13. Introduction to Technology Tasters |
|
|
187 | (1) |
|
|
189 | (150) |
|
|
189 | (1) |
|
|
189 | (3) |
|
14.2.1 Processes and Threads |
|
|
190 | (1) |
|
|
191 | (1) |
|
|
192 | (1) |
|
|
192 | (1) |
|
|
192 | (2) |
|
14.4 General Observations |
|
|
194 | (1) |
|
|
194 | (1) |
|
|
195 | (1) |
|
|
195 | (1) |
|
|
195 | (4) |
|
15.2.1 Data and Instruction Caching |
|
|
196 | (1) |
|
|
196 | (1) |
|
15.2.3 Pipelining Instructions |
|
|
197 | (1) |
|
|
198 | (1) |
|
|
198 | (1) |
|
|
199 | (1) |
|
15.4 General Observations |
|
|
199 | (1) |
|
|
200 | (1) |
|
|
201 | (1) |
|
|
201 | (1) |
|
|
201 | (4) |
|
16.2.1 SRAM (Static Random Access Memory) |
|
|
203 | (1) |
|
16.2.2 DRAM (Dynamic Random Access Memory) |
|
|
203 | (2) |
|
|
205 | (1) |
|
16.4 General Observations |
|
|
206 | (1) |
|
|
206 | (1) |
|
|
207 | (1) |
|
|
207 | (1) |
|
|
207 | (7) |
|
17.2.1 Basic Disk Accessing |
|
|
208 | (4) |
|
|
212 | (1) |
|
|
212 | (2) |
|
|
214 | (2) |
|
17.4 General Observations |
|
|
216 | (1) |
|
|
216 | (1) |
|
18. Server Infrastructure |
|
|
217 | (1) |
|
|
217 | (1) |
|
|
217 | (4) |
|
|
217 | (1) |
|
|
218 | (1) |
|
|
219 | (1) |
|
|
219 | (1) |
|
18.2.5 SMP Implementation |
|
|
219 | (2) |
|
|
221 | (1) |
|
18.4 General Observations |
|
|
222 | (1) |
|
|
222 | (3) |
|
19. Multiprocessors (Shared Memory) |
|
|
225 | (1) |
|
|
225 | (1) |
|
|
225 | (4) |
|
|
226 | (1) |
|
|
227 | (1) |
|
|
228 | (1) |
|
|
229 | (1) |
|
19.2.5 Vendor Implementations |
|
|
229 | (1) |
|
|
229 | (1) |
|
19.4 General Observations |
|
|
230 | (1) |
|
|
231 | (2) |
|
20. Hard Disk: Fibre Channel, SAN, and NAS |
|
|
233 | (1) |
|
|
233 | (1) |
|
|
233 | (7) |
|
|
233 | (3) |
|
|
236 | (1) |
|
20.2.3 Top-of-the-Range Disk Subsystems |
|
|
237 | (1) |
|
20.2.4 NAS (Network Attached Storage) |
|
|
238 | (2) |
|
|
240 | (1) |
|
20.4 General Observations |
|
|
240 | (3) |
|
|
|
|
243 | (1) |
|
|
243 | (1) |
|
|
243 | (7) |
|
21.2.1 UNIX File System Basics |
|
|
243 | (2) |
|
21.2.2 UNIX File System Refinements |
|
|
245 | (1) |
|
|
246 | (1) |
|
21.2.4 Network File System |
|
|
247 | (2) |
|
21.2.5 Cache-Coherent Shared File System |
|
|
249 | (1) |
|
21.2.6 Shared File System - Direct Connections via SAN |
|
|
249 | (1) |
|
|
250 | (1) |
|
21.4 General Observations |
|
|
251 | (1) |
|
|
251 | (2) |
|
22. Relational Database Basics |
|
|
253 | (1) |
|
|
253 | (1) |
|
|
253 | (10) |
|
22.2.1 Network Communication |
|
|
255 | (1) |
|
|
256 | (4) |
|
|
260 | (1) |
|
|
261 | (1) |
|
22.2.5 Parallel SQL Processing |
|
|
262 | (1) |
|
|
263 | (1) |
|
22.4 General Observations |
|
|
264 | (1) |
|
|
265 | (2) |
|
23. Back-End Server Clusters |
|
|
267 | (1) |
|
|
267 | (1) |
|
|
268 | (7) |
|
|
268 | (1) |
|
|
268 | (4) |
|
|
272 | (1) |
|
|
273 | (2) |
|
23.2.4.1 Multiple Server Shared File System |
|
|
273 | (1) |
|
23.2.4.2 Multiple Node Database |
|
|
273 | (2) |
|
|
275 | (2) |
|
23.3.1 Heartbeat Checking |
|
|
275 | (1) |
|
23.3.2 Speed of Service Fail-Over |
|
|
276 | (1) |
|
23.3.3 Full Site Fail-Over |
|
|
276 | (1) |
|
23.3.4 Clusterwide Disk Sharing |
|
|
276 | (1) |
|
23.4 General Observations |
|
|
277 | (1) |
|
|
278 | (1) |
|
|
279 | (1) |
|
|
279 | (1) |
|
|
279 | (11) |
|
|
279 | (1) |
|
|
280 | (1) |
|
24.2.3 Brief Overview of WAN Technologies |
|
|
281 | (2) |
|
24.2.4 Basic LAN Topologies |
|
|
283 | (1) |
|
|
284 | (1) |
|
24.2.6 Inter-Ethernet LAN Connectivity |
|
|
284 | (4) |
|
24.2.7 Inter-Data Center Communication |
|
|
288 | (1) |
|
|
288 | (1) |
|
24.2.9 Citrix and Microsoft Terminal Servers |
|
|
288 | (2) |
|
|
290 | (2) |
|
24.4 General Observations |
|
|
292 | (1) |
|
|
293 | (2) |
|
|
295 | (1) |
|
|
295 | (1) |
|
|
295 | (2) |
|
|
295 | (2) |
|
25.2.2 High Availability (HA) |
|
|
297 | (1) |
|
|
297 | (1) |
|
|
297 | (1) |
|
25.4 General Observations |
|
|
298 | (1) |
|
|
299 | (2) |
|
26. Server Load Balancing |
|
|
301 | (1) |
|
|
301 | (1) |
|
|
302 | (5) |
|
26.2.1 Load Balancing Approaches |
|
|
302 | (1) |
|
26.2.2 Software Load Balancing |
|
|
302 | (1) |
|
|
303 | (1) |
|
|
304 | (1) |
|
26.2.5 The Implications of State |
|
|
305 | (2) |
|
|
307 | (1) |
|
26.4 General Observations |
|
|
308 | (1) |
|
|
309 | (2) |
|
27. Web Server and Cache Server |
|
|
311 | (1) |
|
|
311 | (1) |
|
|
312 | (7) |
|
|
312 | (3) |
|
|
312 | (2) |
|
|
314 | (1) |
|
|
315 | (4) |
|
|
319 | (1) |
|
27.4 General Observations |
|
|
320 | (1) |
|
|
320 | (1) |
|
|
321 | (1) |
|
|
321 | (1) |
|
|
321 | (2) |
|
28.2.1 Client/Server Communication |
|
|
322 | (1) |
|
|
322 | (1) |
|
|
323 | (1) |
|
|
323 | (1) |
|
28.4 General Observations |
|
|
324 | (1) |
|
|
324 | (3) |
|
29. Modern Server-Side Development Technologies |
|
|
327 | (1) |
|
|
327 | (1) |
|
|
328 | (3) |
|
|
328 | (1) |
|
|
329 | (1) |
|
|
329 | (1) |
|
|
329 | (1) |
|
|
329 | (1) |
|
|
330 | (1) |
|
|
330 | (1) |
|
29.2.3 Programming Languages |
|
|
330 | (1) |
|
|
330 | (1) |
|
29.2.5 Hardware Deployment Options |
|
|
331 | (1) |
|
|
331 | (1) |
|
|
331 | (1) |
|
29.3.2 Run-Time Environment |
|
|
332 | (1) |
|
29.3.3 Garbage Collection |
|
|
332 | (1) |
|
29.3.4 Intercomponent Communication |
|
|
333 | (1) |
|
29.3.5 Mixing Technologies |
|
|
333 | (1) |
|
|
334 | (1) |
|
29.3.7 General Design Issues |
|
|
334 | (1) |
|
|
334 | (1) |
|
|
335 | (1) |
|
|
335 | (1) |
|
29.3.11 XML and Web Services |
|
|
335 | (1) |
|
29.3.12 Programming Language |
|
|
336 | (1) |
|
29.4 General Observations |
|
|
336 | (1) |
|
|
337 | (2) |
Index |
|
339 | |