AMAZON S3: ARCHITECTING FOR RESILIENCY IN THE FACE OF MASSIVE LOAD
Jason McHugh
A MAZON S3 Simple storage service Launched: March 14, 2006 Simple - - PowerPoint PPT Presentation
A MAZON S3: A RCHITECTING FOR R ESILIENCY IN THE F ACE OF M ASSIVE L OAD Jason McHugh S ETTING THE S TAGE Architecting for Resiliency in the Face of Massive Load Resiliency > High availability Massive load 1. Many requests 2.
Jason McHugh
Time 17:19:03.122
Zero requests For Object “Foo” 17:19:10.100 151ms 1,097 requests 293ms 3,001 requests ~7000ms 34,944 requests Within a minute request rate reached 30,000 rps where it stayed for roughly an hour.
Data Store
Data Store Data Store
Data Store Data Store Data Store Data Store
Data Store Data Store Data Store Data Store …
40 Gbps
40 Gbps
Webserver Storage
Get “/foo” Byte Stream
Webserver 1
Network Boundary
Webserver 2 Webserver 4 Webserver W Webserver 3
… …
Storage S Storage 1 Storage 2 Storage 3
…
Key A, J, R, … Key B, K, S, … Key C, L, T, …
Webserver 1 Storage 1
Network Boundary
Webserver 2 Webserver 4 Webserver N Webserver 3
…
Storage 2 Storage 3
…
Storage S Cache 1 Cache 2
…
Cache C Key A, C, … Key B, K, … Key T, … Key A, J, R, … Key B, K, S, … Key C, L, T, …
Network Boundary
Webserver 1 Webserver 2 Storage 1 Cache 1 Cache 2
Get K Get k Get k Get k <k,v> <k,v> Put k,v2 Put k,v2 Put k,v2 Put k,v2 <k,v2>
<k,v> <k,v2>
Network Boundary
Webserver 1 Webserver 2 Storage 1 Cache 1 Cache 2
<k1,v, g1> Put k1, v2 Put k1,v2 Put k1,v2 Put k1,v2 – from Cache2 <k1,v2, g2> Set 1: { k1, k2, k3, … }, Owner Cache1, Generation g1 Set 1: { k1, k2, k3, … }, Owner Cache2, Generation g2 Set 1: { k1, k2, k3, … } Valid Generations: g1 Valid Generations: g2 Valid Generations: Get K
Webserver 1 Storage 1
Network Boundary
Webserver 2 Webserver 4 Webserver N Webserver 3
…
Storage 2 Storage 3
…
Storage S Cache 1 Cache 2
…
Cache C
Get K 30,000 rps
Webserver 1
Network Boundary
Webserver 2 Webserver 4 Webserver N Webserver 3
…
Cache 2
Result: <k, v> Overload: true ShieldGoodness: 100 Get k Heavy Hitters: k, 1000 Heavy Hitters: k, 0 Heavy Hitters: k, 72 Heavy Hitters: k, 157 Get K Shielded: 72 Get K Shielded: 85
<k, v> <k, v> <k, v> <k, v> <k, v>
Get k Result: <k, v> Overload: true ShieldGoodness: 100 Result: <k, v> Overload: false Get k Get K Shielded: 2 Heavy Hitters: k, 2 Result: <k, v> Overload: true ShieldGoodness: 100