Формула согласованности
Как правило, с согласованностью мы часто сталкиваемся в контексте разработки архитектуры и сервисов, потому что нам нужно реплицировать один и тот же фрагмент данных на разных узлах.
Можно ли рассчитать согласованность заранее?
Для этого есть известная формула расчета. Давайте попробуем с ней разобраться, но для начала перечислим несколько условных обозначений:
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