Пользователь публикует комментарий и должен сразу видеть его в ленте, а остальным допустима задержка в несколько секунд. Какие гарантии согласованности вы заложите и как это реализуете?
- Как показать пользователю его комментарий сразу?
Требование несимметрично: автору — чтение своих записей, остальным — согласованность в конечном счёте. Линеаризуемость на всех чтениях ленты не нужна и дорога.
- Чтения автора — на лидера в течение окна после записи
- Или ожидание версии: реплика отвечает, догнав позицию записи
- Или показать комментарий из ответа на запись, не перечитывая
А ещё Для мультирегиональной аудитории — особенно важно не ходить к лидеру на каждое чтение
Подробно
Сначала стоит явно сказать, что требование продукта здесь несимметрично: автору нужна гарантия чтения собственных записей, всем прочим достаточно согласованности в конечном счёте. Это важно, потому что линеаризуемость на всех чтениях ленты стоила бы обращения к лидеру или кворуму на каждый запрос, а при мультирегиональной аудитории — межконтинентального обмена на каждое открытие страницы. Реализаций несколько. Простейшая — в течение нескольких секунд после записи направлять чтения этого пользователя на лидера, что стоит небольшого роста нагрузки на него. Более точная — возвращать клиенту версию или позицию журнала после записи и передавать её в последующих запросах, чтобы реплика при необходимости дождалась этой позиции. Дополнительно полезно монотонное чтение — привязка сессии к одной реплике, чтобы лента не «прыгала» назад при обновлении страницы. В интерфейсе комментарий показывают оптимистично сразу после подтверждения записи. В эксплуатации обязателен контроль репликационного лага во времени, а при его росте — временное переключение чтений на лидера.
Что хотят услышать
- Разделение гарантий для автора и остальных.
- Способы реализации read-your-writes.
- Почему не линеаризуемость для всех.
Частые ошибки
- Предлагать строгую согласованность там, где достаточно сессионной гарантии.
- Забыть про монотонное чтение и получить исчезающий при обновлении страницы комментарий.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Линеаризуемость для всех чтений ленты, чтобы все видели одно и то же
- ✓Автору — свои записи сразу, другим — с задержкой
- ✗Только согласованность в конечном счёте для всех, автор подождёт несколько секунд, как и остальные читатели
- ✗Синхронная репликация на все реплики перед ответом на любую запись
Что спросят дальше
- Как изменится решение, если пользователи распределены по нескольким регионам?
- Что произойдёт при росте репликационного лага и как это заметить?
Разбор темы
- CAP и согласованность
Точная формулировка CAP и типичные искажения, неизбежность разделения и выбор C/A по операции, спектр согласованности и сессионные гарантии, кворумы N/R/W и их пределы, PACELC и разрешение конфликтов.
Связанные вопросы
- Пользователь сохранил изменения, обновил страницу — а изменений нет. Что происходит и как это исправить? Middle
- Какие промежуточные гарантии находятся между строгой и итоговой согласованностью? Middle
- После перехода на отдельное хранилище для чтения пользователи жалуются: сохранённое изменение не сразу видно в списке. Как правильно к этому отнестись? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.