| |
| |
Introduction | |
| |
| |
| |
Scaling Up (and Down) | |
| |
| |
Defining Scalability | |
| |
| |
Why Do We Need to Scale? | |
| |
| |
Scaling Up Gone Wrong | |
| |
| |
What Goes Up Should Go Down | |
| |
| |
Real-World Considerations | |
| |
| |
Being a Good Architect | |
| |
| |
| |
Principles for Avoiding Failure | |
| |
| |
Working in Production Environments | |
| |
| |
The Dot Bomb and Its Effect on Building Large Systems | |
| |
| |
Stability and Control | |
| |
| |
Rapid Development | |
| |
| |
Unit Testing | |
| |
| |
Version Control | |
| |
| |
Version Control in Action | |
| |
| |
A Different Approach to Disaster Recovery | |
| |
| |
Good Design | |
| |
| |
| |
Mission-Critical Environments | |
| |
| |
High Availability | |
| |
| |
Monitoring | |
| |
| |
Monitoring Implementations | |
| |
| |
Criteria for a Capable Monitoring System | |
| |
| |
Coping with Release Cycles | |
| |
| |
Internal Release Cycles | |
| |
| |
External Release Cycles | |
| |
| |
The Cost of Complexity Shackled to Large Architectures | |
| |
| |
Looking for Speed | |
| |
| |
It's Not a One-Man Mission | |
| |
| |
| |
High Availability. HA! No Downtime?! | |
| |
| |
Why High Availability and Load Balancing Are Different | |
| |
| |
Load Balancing Is Not High Availability | |
| |
| |
High Availability Is Not Load Balancing | |
| |
| |
Traditional High Availability-The Whitepaper Approach | |
| |
| |
Surveying the Site | |
| |
| |
Pouring Concrete-Foundry ServerIron | |
| |
| |
High Availability Rethought (Peer-Based) | |
| |
| |
Peer-Based High Availability in the Real World | |
| |
| |
Growing Seamlessly | |
| |
| |
Diverging from the Web: High Availability for Email, DNS, and So On | |
| |
| |
Pouring Concrete | |
| |
| |
| |
Load Balancing and the Utter Confusion Surrounding It | |
| |
| |
Load Balancing Basics | |
| |
| |
IP-Friendly Services | |
| |
| |
Web Switches | |
| |
| |
IP Virtual Servers | |
| |
| |
Application Layer Load Balancers | |
| |
| |
A Real Use | |
| |
| |
Abusing the Term | |
| |
| |
The Web and Beyond | |
| |
| |
Session Stickiness: A Fatal Misconception | |
| |
| |
So, Which One Is the Best? | |
| |
| |
| |
Static Content Serving for Speed and Glory | |
| |
| |
What's So Tricky? | |
| |
| |
Context Switching | |
| |
| |
Resource Utilization | |
| |
| |
The Goal | |
| |
| |
Building the Cluster | |
| |
| |
Setting Goals | |
| |
| |
Tackling Content Distribution | |
| |
| |
A Priori Placement | |
| |
| |
Cache-on-Demand | |
| |
| |
Choosing a Web Serving Platform | |
| |
| |
Examining Our Availability Requirements | |
| |
| |
Choosing an OS | |
| |
| |
Wackamole | |
| |
| |
Reasoning | |
| |
| |
Installation | |
| |
| |
Testing the High Availability | |
| |
| |
Serving Content | |
| |
| |
World Domination | |
| |
| |
DNS Round-Trip Times | |
| |
| |
Anycast-Shared IP | |
| |
| |
A Final Review | |
| |
| |
Was It Worth It? | |
| |
| |
| |
Static Meets Dynamic Adding Caches to Reduce Costs | |
| |
| |
Types of Caches | |
| |
| |
Layered/Transparent Cache | |
| |
| |
Integrated (Look-Aside) Cache | |
| |
| |
Data Cache | |
| |
| |
Write-Thru and Write-Back Caches | |
| |
| |
Distributed Cache | |
| |
| |
Deploying Caches | |
| |
| |
Serving a News Site | |
| |
| |
Simple Implementation | |
| |
| |
Introducing Integrated Caching | |
| |
| |
Tackling User Data | |
| |
| |
Two-Tier Execution | |
| |
| |
Caching Is Powerful | |
| |
| |
| |
Distributed Databases Are Easy, Just Read the Fine Print | |
| |
| |
What Is a Distributed Database? | |
| |
| |
Data Resiliency | |
| |
| |
Operational Failover | |
| |
| |
Increased Query Performance | |
| |
| |
Complete Reliability | |
| |
| |
Geographically Distributed Operation | |
| |
| |
Why Is Replication So Hard? | |
| |
| |
Multimaster Replication | |
| |
| |
Two-Phase Commit (2PC) | |
| |
| |
EVS Engine | |
| |
| |
Master-Master Replication | |
| |
| |
Master-Slave Replication | |
| |
| |
Changing the Scope of the Problem | |
| |
| |
Operation and Changeset Replication | |
| |
| |
News Site Revisited | |
| |
| |
Choosing Technologies and Methods | |
| |
| |
Implementing Cross-Vendor Database Replication | |
| |
| |
Same Vendor Database Replication Is Easy | |
| |
| |
| |
Juggling Logs and Other Circus Tricks | |
| |
| |
Why Is Logging a Challenge? | |
| |
| |
Classic Solutions | |
| |
| |
Periodic "Batch" Aggregation | |
| |
| |
Real-time Unicast Aggregation | |
| |
| |
Passive "Sniffing" Log Aggregation | |
| |
| |
Logging Done Right | |
| |
| |
The Architecture (Servers, Software, and Roles) | |
| |
| |
Building It | |
| |
| |
Subscribers-spreadlogd | |
| |
| |
Publishers-mod_log_spread | |
| |
| |
Understanding the Beauty of the Beast | |
| |
| |
Real-time Analysis | |
| |
| |
Real-time Monitoring | |
| |
| |
Passive Log Aggregation for Metrics | |
| |
| |
Visualizing Data with RRDtool | |
| |
| |
A Bit About RRDtool | |
| |
| |
Setting Up Our Databases | |
| |
| |
Collecting Metrics | |
| |
| |
Visualizing Data Through RRDtool | |
| |
| |
Being Hit in the Face with Data | |
| |
| |
Generic Uses | |
| |
| |
| |
The Right Tool for the Job | |
| |
| |
Who's Online? | |
| |
| |
Technical Setup | |
| |
| |
Defining Scope | |
| |
| |
Stepping Back | |
| |
| |
Thinking Outside the Box | |
| |
| |
Testing the Solution | |
| |
| |
Who's Online Reviewed | |
| |
| |
| |
Spread | |
| |
| |
Group Communication | |
| |
| |
Introducing...Spread | |
| |
| |
Installation and Configuration | |
| |
| |
Getting Started | |
| |
| |
A Practical Example | |
| |
| |
Index | |