System Design Cases
Hot Key Mitigation
replicate hot key, local cache, single-flight, edge cache
Hot key: сначала определить, что именно перегрето
Hot partition, hot item и cache stampede — разные failures. Hashing распределяет разные keys; один logical key обычно остаётся в одном slot/partition. Redis Cluster отображает key в один из 16384 slots. DynamoDB adaptive capacity помогает skew, но сохраняет table/partition limits.
Detection
- top keys/items по request rate и bytes;
- per-partition throttles, latency, CPU и network;
- cache hit/miss и synchronized expiry;
- tenant/object cardinality и heavy-hitter sketch;
- correlation со deploy, campaign и invalidation.
Среднее load per shard скрывает проблему: один key может превышать capacity своего owner даже при свободном cluster total.
Сценарии
Один key достигает одного normal owner. «Добавить shards» не меняет placement этого key без изменения read/write model.
Public/immutable reads хорошо масштабируются через CDN, versioned keys и regional copies. Для mutable data нужны TTL, invalidation и допустимая staleness. Replica read не является strict-freshness magic.
Commutative counter можно хранить как key#A...key#N и суммировать. Это явные storage keys, а не прозрачные replicas одного key. Цена: N reads или materialized aggregate, bucket migration и более сложная consistency. Balance transfer или arbitrary transaction так делить нельзя без нового protocol.
singleflight Group в process Red не знает о Group в process Blue: получаем один origin fetch на process, а не на fleet. TTL jitter, stale-while-revalidate и early refresh уменьшают синхронизацию. Distributed lease может collapse fleet, но требует bounded lease, fencing/ownership и fallback при недоступности coordinator.
Выбор меры
| Нагрузка | Приём | Что меняется |
|---|---|---|
| immutable public reads | edge/versioned cache | freshness через version/TTL |
| mutable read-heavy | read replicas + validation | staleness и invalidation |
| mergeable writes | explicit buckets | read fan-in и ordering |
| cache miss burst | local coalescing + jitter | scope процесса |
| giant tenant | dedicated partition/capacity | isolation и cost |
Связанные темы
[CONCEPT]partitioning-strategies
Первичные источники
- Redis Cluster specification: https://redis.io/docs/latest/operate/oss_and_stack/reference/cluster-spec/
- DynamoDB adaptive capacity: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/burst-adaptive-capacity.html
- DynamoDB write sharding: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-sharding.html
- Go singleflight package: https://pkg.go.dev/golang.org/x/sync/singleflight