Вопросы по распределённым системам на собеседовании
Эти вопросы задают там, где сервис уже не помещается в одну машину. Проверяют не заученную формулировку CAP, а понимание, что происходит при разрыве сети и какой компромисс вы осознанно выбираете.
Из чего состоит тема
Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.
- Партиционирование и шардинг12
- Репликация и отказы12
- CAP и согласованность11
- Консенсус и координация11
- Внутренности хранилищ10
Разборы подтем
Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.
- Распределённые системы: CAP и согласованность11 вопросов
- Консенсус и координация узлов11 вопросов
- Партиционирование и шардинг12 вопросов
- Распределённые системы: репликация и отказы12 вопросов
- Распределённые системы: внутренности хранилищ10 вопросов
Примеры вопросов с разбором
- Что утверждает CAP-теорема?A)При сетевом разделении система выбирает между согласованностью и доступностьюB)Распределённая система при хорошем проектировании обеспечивает согласованность, доступность и устойчивость к разделению разомC)Число реплик данных должно быть строго нечётным для корректной работы кластераD)Теорема ограничивает латентность системы в зависимости от числа её узлов
показать ответ и разбор
+A)При сетевом разделении система выбирает между согласованностью и доступностью// разбор: CAP: при сетевом разделении (P) распределённая система не может одновременно давать и согласованность (C — все видят одни и те же свежие данные), и доступность (A — каждый запрос получает ответ). Приходится выбирать: отказать в ответе ради консистентности (CP) или ответить, рискуя устаревшими данными (AP). Без разделения оба свойства достижимы.
- Зачем распределённой системе нужен алгоритм консенсуса (например, Raft)?A)Чтобы узлы принимали решения независимо, не согласуя их между собойB)Согласие узлов о едином значении/порядке при отказах части узловC)Чтобы исключить репликацию данных между узлами системыD)Чтобы ускорить одиночные запросы, распараллелив их выполнение сразу по всем узлам кластера
показать ответ и разбор
+B)Согласие узлов о едином значении/порядке при отказах части узлов// разбор: Консенсус позволяет группе узлов прийти к единому решению (кто лидер, какая следующая запись в реплицированном логе, зафиксирована ли транзакция) даже когда часть узлов падает или сеть подтормаживает. Raft/Paxos гарантируют, что все живые узлы согласуют одну и ту же последовательность решений, пока живо большинство (кворум). На консенсусе строят выбор лидера, реплицированные логи, распределённые блокировки и метаданные кластера (etcd, ZooKeeper).
- Что такое шардирование (sharding)?A)Регулярное создание нескольких точных полных копий одной таблицы на разных серверахB)Разбиение данных на части (шарды) по разным узлам ради масштаба записи и объёмаC)Сжатие данных на диске для экономии места в одной большой таблицеD)Полное дублирование всей базы данных в резервное хранилище раз в сутки
показать ответ и разбор
+B)Разбиение данных на части (шарды) по разным узлам ради масштаба записи и объёма// разбор: Шардирование — горизонтальное разбиение данных на непересекающиеся части (шарды) по разным узлам, чтобы снять лимит одной машины по объёму и пропускной способности записи. Это не то же, что репликация: шардинг делит данные (масштаб), репликация их копирует (надёжность и масштаб чтения). Часто применяют вместе.
- Зачем нужна репликация данных в распределённой системе?A)Чтобы разбить данные на непересекающиеся части по разным узламB)Чтобы удалять устаревшие данные с основного сервера базы данныхC)Отказоустойчивость и близость к читателю: копии переживут падение узла и разгрузят чтениеD)Чтобы сжать данные и уменьшить занимаемое ими место на диске
показать ответ и разбор
+C)Отказоустойчивость и близость к читателю: копии переживут падение узла и разгрузят чтение// разбор: Репликация — хранение копий одних и тех же данных на нескольких узлах. Это даёт отказоустойчивость (упал узел — реплика продолжает), масштаб чтения (запросы распределяются по репликам) и близость к пользователю (реплика в его регионе). Плата — сложность согласованности: копии надо синхронизировать, и возникает лаг. Цель отличается от шардинга, который данные делит.
- Почему БД пишут в write-ahead log (WAL) перед изменением самих данных?A)Чтобы экономить место: журнал WAL заменяет собой хранение основных данных таблицB)Сперва в лог → после сбоя по WAL восстановят состояниеC)Чтобы ускорить чтения: WAL — это кэш часто читаемых страниц данных в памятиD)Порядок не важен: данные и журнал можно писать в разной последовательности
показать ответ и разбор
+B)Сперва в лог → после сбоя по WAL восстановят состояние// разбор: WAL — журнал, куда изменение записывается (и сбрасывается на диск) до того, как применяется к основным данным. Если система падает, при старте она проигрывает WAL: повторяет подтверждённые, но не дозаписанные изменения (redo) и откатывает незавершённые (undo) — так гарантируется durability коммита и целостность без дорогой синхронной записи страниц данных на каждый коммит. WAL также основа репликации (реплики применяют его записи) и CDC (читают WAL). Последовательная запись в лог быстрее случайной записи страниц.
- Чем отличается выбор CP от AP при сетевом разделении?A)Система в режиме CP при разделении жертвует именно согласованностью данных ради доступности, а AP наоборотB)CP жертвует доступностью ради согласованности; AP отвечает, рискуя устаревшими даннымиC)CP и AP — это два синонимичных названия одного и того же режима работыD)AP отклоняет запросы на обеих сторонах раздела до восстановления связи между узлами
показать ответ и разбор
+B)CP жертвует доступностью ради согласованности; AP отвечает, рискуя устаревшими данными// разбор: При разделении CP-система предпочитает согласованность: отказывает в операции, если не может гарантировать свежесть данных (нужно для платежей, остатков на складе). AP-система предпочитает доступность: отвечает всегда, но данные могут быть устаревшими (лента соцсети, лайки). Выбор диктует цена ошибки: показать неверный баланс vs показать чуть старый лайк.
- Почему распределённой транзакции на два узла нужен two-phase commit (2PC), а не просто два коммита?A)Чтобы просто выполнить два коммита побыстрее, распараллелив их между узлами для скоростиB)Чтобы снять блокировки: 2PC работает без удержания ресурсов участникамиC)Фаза голосования + фаза коммита дают атомарность обеих сторонD)Чтобы один узел мог единолично коммитить за оба, не спрашивая согласия второго участника
показать ответ и разбор
+C)Фаза голосования + фаза коммита дают атомарность обеих сторон// разбор: Два независимых коммита могут дать частичный результат: один узел зафиксировал, второй упал — рассинхрон. 2PC вводит координатора и две фазы: prepare (все участники готовятся и голосуют «готов/нет», обещая суметь закоммитить) и commit (если все «готов» — координатор велит фиксировать, иначе все откатывают). Так достигается атомарность на нескольких узлах. Цена — блокировки на время протокола и уязвимость к падению координатора (участники зависают in-doubt); отсюда популярность saga как альтернативы.
- Чем hash-партиционирование отличается от range-партиционирования?A)Партиционирование hash и по диапазону range — это два совершенно синонимичных названия одного способаB)Range распределяет данные равномерно, а hash склонен создавать горячие точкиC)Hash равномерно размазывает ключи, но ломает диапазонные запросы; range — наоборотD)Hash-партиционирование работает с числовыми ключами, а range — с текстовыми
показать ответ и разбор
+C)Hash равномерно размазывает ключи, но ломает диапазонные запросы; range — наоборот// разбор: Hash-партиционирование берёт хеш ключа — данные ложатся равномерно, но диапазонные запросы (за период) бьют по всем шардам. Range кладёт рядом соседние ключи — диапазонные запросы эффективны, но по «горячему» диапазону (свежие даты) копится нагрузка. Выбор зависит от паттерна запросов: точечные — hash, диапазонные — range.
- Как работает репликация leader-follower (master-replica)?A)Записи можно свободно слать в реплику, и они сами договариваются о едином порядкеB)Реплики равноправны, и выделенного лидера среди них нетC)Followers принимают записи, а leader раздаёт данные на чтениеD)Записи идут в leader и реплицируются на followers; чтение масштабируется по репликам
показать ответ и разбор
+D)Записи идут в leader и реплицируются на followers; чтение масштабируется по репликам// разбор: В leader-follower все записи идут через одного лидера, который реплицирует изменения на followers; чтение можно распределить по followers, масштабируя нагрузку чтения. Модель проста и избегает конфликтов записи, но у неё есть лаг реплик (чтение с follower может быть устаревшим) и вопрос failover — кого назначить лидером при его падении.
это 9 из 56
Ещё 47 вопросов по теме — в тренажёре, с движком повторения
Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.
Частые вопросы
Как правильно говорить про CAP?
Что выбор возникает только во время разделения сети: система либо продолжает отвечать возможно устаревшими данными, либо отказывает ради согласованности. Вне разделения компромисс другой, между задержкой и согласованностью.
Что спрашивают про репликацию?
Синхронная против асинхронной, отставание реплик и чтение устаревших данных, выбор лидера, кворумы и что произойдёт при отказе узла посреди записи.