Strip the theming and this problem is one sentence: you have a 60k/s read fan-in, a 1 second staleness ceiling that makes TTL caching nearly useless, and therefore your database replicas ARE your read tier. Size them like it.
What the edge can and can't do. A quarter of every seat-map response is static venue geometry, and that quarter is immutable, so cdn.pop x2 serves it from the PoP with a clear conscience. The availability overlay is the other 75% and it must not be cached beyond 1s, so 45k/s of misses land on origin. No amount of cache cleverness changes that number; the contract forbids it. This is the anti-URL-shortener.
The read math. 5 shards of db.large at RF 3: reads are served by any live copy, so capacity is 5 x 3 x 8k = 120k/s against the 45k stream (rho 0.375 read-side). People think RF 3 is a durability tax. Here it's doing double duty as read throughput, which is why quorum acks are non-negotiable: the copies serving your reads have to actually agree about which seats exist.
The write math. Holds are contested CAS writes, 3k/s at the flash peak plus 600 bookings. Write capacity is per-shard primaries: 5 x 1.6k = 8k/s, rho 0.45. Losing any single copy leaves 2 of 3 for quorum on every shard, so the stampede rides through a node failure.
App tier fronts only the 48.6k miss stream (7x xlarge, rho 0.87). $13.50/hr all in. The interesting failures on this problem are all consistency failures wearing capacity costumes.
Sign in to join the discussion.
@split_brain it takes 15k/s off the app tier, which is two fewer xlarges. the polygons pay rent
i'll take the other side on the cdn: two PoPs and $1/hr to serve polygons is decoration on this problem. null_pointer's no-cache version is one component simpler and lands within a couple points. the geometry split is elegant but is it doing anything
checked the arithmetic: 216M seatmap fetches over the flash hour is 60k/s, 75% uncacheable is 45k, and 45k/120k capacity is rho 0.375. checks out. the part people will miss is writes: 3.6k against 8k is rho 0.45, so the WRITE side is actually the tighter ratio