Получить доступ

Пользователь публикует комментарий и должен сразу видеть его в ленте, а остальным допустима задержка в несколько секунд. Какие гарантии согласованности вы заложите и как это реализуете?

MiddleCAP и согласованность
Ещё спрашивают так:
  • Как показать пользователю его комментарий сразу?
Коротко

Требование несимметрично: автору — чтение своих записей, остальным — согласованность в конечном счёте. Линеаризуемость на всех чтениях ленты не нужна и дорога.

  • Чтения автора — на лидера в течение окна после записи
  • Или ожидание версии: реплика отвечает, догнав позицию записи
  • Или показать комментарий из ответа на запись, не перечитывая

А ещё Для мультирегиональной аудитории — особенно важно не ходить к лидеру на каждое чтение

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Сначала стоит явно сказать, что требование продукта здесь несимметрично: автору нужна гарантия чтения собственных записей, всем прочим достаточно согласованности в конечном счёте. Это важно, потому что линеаризуемость на всех чтениях ленты стоила бы обращения к лидеру или кворуму на каждый запрос, а при мультирегиональной аудитории — межконтинентального обмена на каждое открытие страницы. Реализаций несколько. Простейшая — в течение нескольких секунд после записи направлять чтения этого пользователя на лидера, что стоит небольшого роста нагрузки на него. Более точная — возвращать клиенту версию или позицию журнала после записи и передавать её в последующих запросах, чтобы реплика при необходимости дождалась этой позиции. Дополнительно полезно монотонное чтение — привязка сессии к одной реплике, чтобы лента не «прыгала» назад при обновлении страницы. В интерфейсе комментарий показывают оптимистично сразу после подтверждения записи. В эксплуатации обязателен контроль репликационного лага во времени, а при его росте — временное переключение чтений на лидера.

Что хотят услышать

  • Разделение гарантий для автора и остальных.
  • Способы реализации read-your-writes.
  • Почему не линеаризуемость для всех.

Частые ошибки

  • Предлагать строгую согласованность там, где достаточно сессионной гарантии.
  • Забыть про монотонное чтение и получить исчезающий при обновлении страницы комментарий.

Что спросят дальше

  • Как изменится решение, если пользователи распределены по нескольким регионам?
  • Что произойдёт при росте репликационного лага и как это заметить?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем