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

Что описывает eventual consistency?

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

Если записи прекратятся, все реплики со временем придут к одному значению. Сразу после записи разные клиенты могут видеть разное.

  • Цена за доступность и масштабируемость: запись подтверждается без ожидания всех реплик
  • Типичное окно — миллисекунды, но под нагрузкой бывает секунды и больше
  • Поверх добавляют гарантии: read-your-writes, монотонное чтение, причинная согласованность

А ещё Недопустима там, где важен инвариант: остаток денег, уникальность, бронирование последнего места

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

Подробно

Суть. Запись принимается одной репликой (или частью) и распространяется на остальные асинхронно. Пока она не дошла, чтение с другой реплики вернёт старое значение. Гарантия только одна — сходимость при отсутствии новых записей. Сколько ждать, не гарантируется.

Зачем. Не ждать подтверждения всех реплик — значит быстрее отвечать и продолжать работу при отказе части узлов и при разделении сети (AP в CAP). Так работают асинхронные реплики баз, DNS, кэши, CDN, Cassandra и DynamoDB по умолчанию, поисковые индексы и проекции в CQRS.

Аномалии, которые видит пользователь:

  • сохранил — обновил страницу — не видит изменения;
  • комментарий появился и пропал при следующем запросе (попал на отстающую реплику);
  • ответ виден раньше вопроса.

Как жить: выбрать нужные гарантии сессии — читать свои изменения с лидера (read-your-writes), привязывать пользователя к реплике (монотонное чтение), показывать результат записи из ответа без перечитывания; для конфликтующих одновременных записей — версии, «последний побеждает» или CRDT.

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

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

  • Определение через сходимость и отсутствие гарантии времени.
  • Почему её выбирают: доступность и задержка.
  • Видимые аномалии и гарантии сессии, которые их закрывают.
  • Где eventual consistency недопустима.

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

  • Считать, что задержка всегда миллисекунды и её можно не учитывать.
  • Применять её к деньгам и остаткам.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Все реплики всегда согласованы мгновенно
  • ✓Реплики сходятся к одному состоянию спустя некоторое время после записи
  • ✗Данные никогда не согласуются
  • ✗Запись возможна только в одну реплику

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

  • Что такое read-your-writes consistency?
  • Когда eventual consistency недопустима?

Разбор темы

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

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

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

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

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