Кеширование
Dogpile: тест с множественным выбором
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь прямо в инциденте, когда один горячий ключ кладёт origin — не определение для заучивания, а компромисс на блокировке, lease и окне пересчёта.
Убедись, что связываешь коллизию в момент истечения, коалесинг single-flight, distributed-блокировку с TTL и продлением lease, и раннее вероятностное истечение — синтез, к которому вёл урок.
Один горячий ключ (пересчёт 200ms) кладёт БД каждый раз при истечении TTL под ~5000 req/s. Какой фикс наиболее прямо схлопывает стадо, и какая деталь делает его безопасным?
Локальный single-flight (мьютекс в процессе) срезал стадо, но БД всё равно видит ~20 одновременных пересчётов на истечение по всему флоту. Почему и что закрывает разрыв?
Ты добавил distributed-блокировку пересчёта, но пропустил TTL блокировки (без истечения). Какой сбой senior-уровня?
Пересчёт обычно занимает 2s, но иногда 25s. Ты ставишь TTL distributed-блокировки в 5s. Что идёт не так и каков принцип?
Вместо угадывания TTL блокировки держатель продлевает короткий lease (heartbeat, который продлевает блокировку каждую секунду, пока работает). Что это даёт и какой новый сбой надо обработать?
Коллега утверждает, что блокировка всегда неверный инструмент, потому что сериализует читателей, и хочет везде раннее вероятностное истечение (XFetch). Когда какой из них на самом деле уместен?
Сквозная линия — одно решение: dogpile это коллизия в момент истечения одного горячего ключа, и каждый фикс бьёт в свою точку этого окна. Single-flight схлопывает N одновременных промахов в один пересчёт — но локальный мьютекс коалесит лишь на процесс, distributed lock нуждается в TTL длиннее худшего пересчёта (или в продлеваемом lease), чтобы упавший держатель не задедлочил всех, а lease всё ещё требует фенсинга против приостановленного держателя. XFetch растворяет коллизию, пересчитывая рано и в одиночку до того, как ключ вообще истечёт под нагрузкой. Джиттер разносит пачку ключей и ничего не делает для одного горячего. Большинство постмортемов про dogpile — про дедлок, сериализацию или двойную запись фикса, а не про исходный промах.