Что означает Strong Consistency (строгая согласованность) в распределённых системах?

«Что означает Strong Consistency (строгая согласованность) в распределённых системах?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Strong Consistency (строгая согласованность) — это модель согласованности данных в распределённых системах, которая гарантирует, что после завершения операции записи все последующие операции чтения (независимо от узла, на котором они выполняются) вернут самое актуальное значение или ошибку.

Простая аналогия: Это похоже на работу с одной копией данных. Как только вы записали новое значение в базу, любой, кто читает после этого, увидит именно это новое значение.

Ключевые свойства:

  • Линеаризуемость (Linearizability): Операции выглядят так, как если бы они выполнялись мгновенно в некоторой точке времени между их началом и завершением.
  • Предсказуемость: Система ведёт себя как централизованная (не распределённая) с точки зрения порядка операций.

Пример: В реляционных БД (например, PostgreSQL) с настройками по умолчанию транзакции обеспечивают строгую согласованность.

Компромиссы:

  • Доступность (Availability): Для обеспечения строгой согласованности при сетевых разделах система может отказаться отвечать на запросы (согласно теореме CAP).
  • Задержка (Latency): Требуется синхронизация между репликами перед ответом клиенту, что увеличивает время отклика.

Альтернативы: Для повышения доступности и производительности в распределённых системах часто используют более слабые модели, такие как Eventual Consistency (согласованность в конечном счёте) или Session Consistency.