awesome-everything EN
↑ Обратно к восхождению

Кеширование

Dogpile: тест с множественным выбором

Суть Синтез юнита про dogpile в формате выбора — коллизия в момент истечения, коалесинг single-flight, distributed lock с TTL и продлением lease, и почему джиттер не спасает один горячий ключ.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь прямо в инциденте, когда один горячий ключ кладёт 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 — про дедлок, сериализацию или двойную запись фикса, а не про исходный промах.

Продолжить восхождение ↑Dogpile: тест на свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.