Распределение данных: свободное припоминание
Промпты на свободное припоминание по юниту распределения данных. Сначала ответь своими словами — режимы репликации, горячий шард, хеш-кольцо, неравенство кворума, CAP и PACELC — затем открой образец и сверься.
Припоминание бьёт перечитывание. На каждый промпт скажи или напиши полный ответ из памяти — включая неравенство и режим отказа — прежде чем открыть образец. Усилие реконструкции и заставляет лаг репликации, хеш-кольцо и PACELC прилипнуть.
Реконструируй спину юнита, не подглядывая: почему каждая копия отстаёт и как failover теряет записи, почему ровное число ключей всё равно даёт горячую точку, почему mod-N губит решардинг и кольцо его чинит, что гарантирует неравенство кворума и чем CAP отличается от PACELC.
- 01Сравни синхронную и асинхронную репликацию и объясни, как failover теряет подтверждённые записи.
- 02Что такое read-your-writes и как его сохранить при лаге репликации?
- 03Почему ровное число ключей всё равно создаёт горячий шард и как это смягчить?
- 04Почему hash(key) mod N губит решардинг и как хеш-кольцо это чинит (с виртуальными узлами)?
- 05Сформулируй неравенство кворума и сравни CAP с PACELC.
Если ты смог реконструировать каждый ответ из памяти, ты держишь спину юнита: репликация копирует данные ради чтений и выживания, но async-репликация подтверждает до долговечности, так что failover теряет подтверждённые записи (держи синхронную реплику; маршрутизируй собственные чтения пользователя на актуальный узел ради read-your-writes). Шардинг по ключу всё равно даёт горячий шард при перекосе, ведь ровное число ключей не ровная нагрузка — разбей, закешируй или изолируй ключ-знаменитость. Consistent hashing кольцует узлы и ключи, так что добавление одного двигает лишь ~1/N (виртуальные узлы балансируют дуги и размазывают отказ), тогда как mod N переотобразил бы почти все и снёс бы кеш. Кворум гарантирует свежее чтение, когда R + W > N. А CAP — лишь выбор C-против-A во время партиции, тогда как PACELC добавляет повседневный компромисс задержка-против-консистентности — так что выбирай по кейсу вдоль спектра linearizable → eventual. Нить, связывающая всё: на этой глубине распределение — намеренный выбор, какая неконсистентность приемлема для каждого куска данных, а не поведение, что ты обнаруживаешь в проде.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.