open atlas
↑ К треку
Основы System Design SD · 08 · 06

Строительные блоки: обзор с выбором ответа

Синтез с выбором ответа по юниту строительных блоков: гонка rate limiter, упорядоченные по времени против случайных ID, односторонняя гарантия фильтра Блума, проблема границы geohash и split-brain, который побеждают fencing token'ы.

SD Senior ◷ 13 min
Уровень
ОсновыJuniorMiddleSenior

Пять вопросов, режущих весь юнит. Каждый — решение, что ты принимаешь, когда тянешься к готовому механизму — лимитеру, схеме ID, фильтру членства, пространственному индексу, координатору — и берёшь верно тонкую часть, а не очевидную.

Подтверди, что замечаешь гонку распределённого счётчика, выбираешь упорядоченный по времени против случайного ID под ситуацию, рассуждаешь от гарантии «нет ложноотрицательных» фильтра Блума, побеждаешь проблему границы geohash и делаешь split-brain безвредным через fencing token.

Викторина

Rate limiter работает на 40 серверах, каждый делает GET-счётчик → проверка < лимита → SET счётчик+1 к общему Redis. Клиенты превышают лимит под нагрузкой. Какова минимальная корректная починка?

Викторина

OLTP-таблица на кластеризованном индексе принимает миллионы строк/час, и нужна децентрализованная генерация ID по регионам без фрагментации индекса. Какая схема ID подходит лучше всего?

Викторина

Ты хочешь стеречь дорогое чтение базы фильтром Блума, но коллега боится, что ошибочный ответ вредит. Когда фильтр здесь безопасен?

Викторина

Запрос «водители рядом» выбирает лишь собственную ячейку geohash пассажира и пропускает водителя в 20 м через улицу. В чём починка?

Викторина

Лидер берёт лок, страдает долгую паузу GC за свой lease, избирается новый лидер, а старый просыпается, всё ещё действуя как лидер. Оба пишут. Что на деле предотвращает порчу?

Вспомните перед уходом
  1. 01
    Почему распределённый rate limiter переливает и какова однострочная починка?
  2. 02
    Когда фильтр Блума безопасен, а когда нет?
  3. 03
    Сформулируй правило fencing token, бьющее split-brain.
Итог

Сквозная линия юнита в том, что у каждого строительного блока очевидная поверхность и тонкое ядро корректности. Rate limiter тривиален на одном узле, но гоняется на флоте — починка это атомарная инкремент-и-проверка на одном общем счётчике (и fail open при падении). Генерация ID тривиальна с одним писателем, но нужна упорядоченная по времени схема (Snowflake/UUIDv7), чтобы остаться без координации, не фрагментируя индекс. Фильтр Блума — быстрая предпроверка членства, безопасная лишь где ложноположительный дёшев, ведь он гарантирует нет ложноотрицательных, но не нет ложноположительных. Geohashing превращает близость в prefix scan, но должен запрашивать ячейку плюс её 8 соседей, чтобы побить проблему границы. А выбор лидера прост до split-brain, который не предотвратит никакой таймаут — лишь fencing token на ресурсе делает устаревшего лидера безвредным. Бери тонкую часть, не только очевидную.

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

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

Trademarks belong to their respective owners. Editorial reference only.