Формула согласованности

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

Можно ли рассчитать согласованность заранее?

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

N - количество реплик.

W - кворум записи размера W. Операция записи считается успешной только если она подтверждена W репликами.

R - кворум чтения размера R. Чтобы операцию записи можно было считать успешной, нужно дождаться ответа как минимум от R реплик.

Уже становится проще, не так ли?

Выбор значений W, R, N - это типичный компромисс между латентностью и согласованностью.

Если W = 1 или R = 1, операция завершается быстро, так как нужно ждать ответа только от одной из реплик. Если же R или W больше 1-го, система становится более согласованной, но при этом придется ждать ответа от самой медленной реплики, что замедлит выполнение запросов.

Таким образом получается:

W + R > N - гарантирует строгую согласованность, поскольку в системе должен быть как минимум 1 узел с тем же минимальным набором данных.

Как же сконфигурировать N, W, R для наших задач?

⁃ Если R = 1 и W = N, то система оптимизирована для быстрого чтения. ⁃ Если W = 1 и R = N, то система оптимизирована для быстрой записи. ⁃ Если W + R > N, то гарантирована строгая согласованность (обычно N = 3, W = R = 2). ⁃ Если W + R <= N, то строгая согласованность не гарантирована.

В зависимости от требований значения W, R, N можно оптимизировать для получения нужного уровня согласованности.

Мой канал - https://t.me/carbonka

Формула согласованности
Как правило, с согласованностью мы часто сталкиваемся в контексте разработки архитектуры и сервисов, потому что нам нужно реплицировать один и тот же фрагмент данных на разных ... | Сетка — социальная сеть от hh.ru