📖 Ванечка обещает невозможное
Ванечка защищал требования к системе учёта ПиццаЕдинорога и решил произвести впечатление.
- Система будет всегда доступна, остатки на складе всегда актуальны, с любой точки одинаковые, и всё это работает, даже если между точками оборвётся связь.
Инвестор просиял. ПиццаЕдинорог поднял голову от теста и медленно произнёс: повтори последнее предложение.
Ванечка повторил, с выражением🤩
😐- Ты только что пообещал то, что математически невозможно.
Ванечка обиделся, он ведь просто перечислил хорошие вещи.
Единорог вытер руки..
- Ванечка, у нас две точки, склад один, учётная система общая. И вдруг связь между точками пропала. Что делаешь?
- Ну... продолжаю продавать?
- Хорошо. Обе точки торгуют. Точка на Ленина продала последнюю банку трюфельного соуса, точка на Мира об этом не знает и продала её же. Оба клиента довольны ровно до момента выдачи. Ты выбрал доступность и потерял согласованность.
- Тогда ставлю стоп-лист, пока связь не починят!
- Тоже вариант. Никто не купит то, чего нет, зато касса стоит и люди уходят. Ты выбрал согласованность и потерял доступность.
- А третий вариант?
- Третьего нет, это и есть теорема CAP. У распределённой системы, где данные лежат на нескольких серверах, три желаемых свойства.
💛💛💛💛💛
Consistency, согласованность: любой узел на один и тот же запрос отдаёт одинаковый ответ.
Availability, доступность: система отвечает, даже если часть узлов вышла из строя.
Partition tolerance, устойчивость к разделению: система работает, когда связь между узлами оборвалась.
💛💛💛💛💛
- Гарантировать можно только два свойства из трёх. CA, AP, CP пожалуйста, CAP нет.
- А почему нельзя просто выбрать CA? Согласованность и доступность это самое вкусное.
- Потому что CA означает, что разрывов сети не бывает, а в распределённой системе они будут обязательно: кабель, маршрутизатор, ЦОД. Поэтому P у тебя есть всегда, хочешь ты того или нет, и реальный выбор стоит между CP и AP.
- И как выбирать?
- По цене ошибки. Деньги, платежи, остатки на складе только CP: пусть операция подождёт, чем дважды продадим один соус. Лайки, просмотры, лента это AP: если у двух пользователей число лайков разошлось на пару секунд, никто не пострадал.
Ванечка вернулся и переписал строчку: "при разрыве связи между точками приоритет отдаётся согласованности, списание остатков блокируется до восстановления."
💛💛💛💛💛
Что важно запомнить:
⚪️CAP работает только для распределённых систем, где данные лежат на нескольких узлах
⚪️C это одинаковые данные на всех узлах, A это ответ при отказе части узлов, P это работа при разрыве связи
⚪️Разрыв сети неизбежен, поэтому P есть всегда, выбор стоит между CP и AP
⚪️Обещание "всегда доступна и всегда согласована" выполнить нельзя
💛💛💛💛💛
🔸🔸🔸🔸🔸🔸
Три узла A, B, C:
Consistency: данные одинаковы везде, обновили B и репликация разнесла изменение на A и C
Availability: узел B умер, A и C продолжают отвечать, система жива
Partition tolerance: сеть разорвалась, B отрезан от A и C, но продолжает обслуживать запросы
Почему при разрыве нельзя всё сразу, ведь B не отдаёт изменения A и C:
➡️Приоритет доступности: отвечаем дальше, но клиенты B видят одно, клиенты A и C другое, согласованность потеряна
➡️Приоритет согласованности: не принимаем запросы до устранения разрыва, доступность потеряна
Что выбирать:
➡️CP - банки, платежи, биржи, склады, бронирование
➡️AP - соцсети, ленты, счётчики, рекомендации
Отдельный сервер распределённой системы называют нодой (node).
Как это звучит в требованиях:
❌ Данные всегда актуальны и система всегда доступна
✔️ При сетевом разделении приоритет отдаётся согласованности, запись блокируется до восстановления связи
💛А у вас в проекте выбрали CP или AP? Осознанно или как-то само получилось?
#ВанечкаИЕдинорог #СистемныйАнализ #SystemDesign #CAP #Обучение
Ванечка защищал требования к системе учёта ПиццаЕдинорога и решил произвести впечатление.
- Система будет всегда доступна, остатки на складе всегда актуальны, с любой точки одинаковые, и всё это работает, даже если между точками оборвётся связь.
Инвестор просиял. ПиццаЕдинорог поднял голову от теста и медленно произнёс: повтори последнее предложение.
Ванечка повторил, с выражением🤩
😐- Ты только что пообещал то, что математически невозможно.
Ванечка обиделся, он ведь просто перечислил хорошие вещи.
Единорог вытер руки..
- Ванечка, у нас две точки, склад один, учётная система общая. И вдруг связь между точками пропала. Что делаешь?
- Ну... продолжаю продавать?
- Хорошо. Обе точки торгуют. Точка на Ленина продала последнюю банку трюфельного соуса, точка на Мира об этом не знает и продала её же. Оба клиента довольны ровно до момента выдачи. Ты выбрал доступность и потерял согласованность.
- Тогда ставлю стоп-лист, пока связь не починят!
- Тоже вариант. Никто не купит то, чего нет, зато касса стоит и люди уходят. Ты выбрал согласованность и потерял доступность.
- А третий вариант?
- Третьего нет, это и есть теорема CAP. У распределённой системы, где данные лежат на нескольких серверах, три желаемых свойства.
💛💛💛💛💛
Consistency, согласованность: любой узел на один и тот же запрос отдаёт одинаковый ответ.
Availability, доступность: система отвечает, даже если часть узлов вышла из строя.
Partition tolerance, устойчивость к разделению: система работает, когда связь между узлами оборвалась.
💛💛💛💛💛
- Гарантировать можно только два свойства из трёх. CA, AP, CP пожалуйста, CAP нет.
- А почему нельзя просто выбрать CA? Согласованность и доступность это самое вкусное.
- Потому что CA означает, что разрывов сети не бывает, а в распределённой системе они будут обязательно: кабель, маршрутизатор, ЦОД. Поэтому P у тебя есть всегда, хочешь ты того или нет, и реальный выбор стоит между CP и AP.
- И как выбирать?
- По цене ошибки. Деньги, платежи, остатки на складе только CP: пусть операция подождёт, чем дважды продадим один соус. Лайки, просмотры, лента это AP: если у двух пользователей число лайков разошлось на пару секунд, никто не пострадал.
Ванечка вернулся и переписал строчку: "при разрыве связи между точками приоритет отдаётся согласованности, списание остатков блокируется до восстановления."
💛💛💛💛💛
Что важно запомнить:
⚪️CAP работает только для распределённых систем, где данные лежат на нескольких узлах
⚪️C это одинаковые данные на всех узлах, A это ответ при отказе части узлов, P это работа при разрыве связи
⚪️Разрыв сети неизбежен, поэтому P есть всегда, выбор стоит между CP и AP
⚪️Обещание "всегда доступна и всегда согласована" выполнить нельзя
💛💛💛💛💛
🔸🔸🔸🔸🔸🔸
Три узла A, B, C:
Consistency: данные одинаковы везде, обновили B и репликация разнесла изменение на A и C
Availability: узел B умер, A и C продолжают отвечать, система жива
Partition tolerance: сеть разорвалась, B отрезан от A и C, но продолжает обслуживать запросы
Почему при разрыве нельзя всё сразу, ведь B не отдаёт изменения A и C:
➡️Приоритет доступности: отвечаем дальше, но клиенты B видят одно, клиенты A и C другое, согласованность потеряна
➡️Приоритет согласованности: не принимаем запросы до устранения разрыва, доступность потеряна
Что выбирать:
➡️CP - банки, платежи, биржи, склады, бронирование
➡️AP - соцсети, ленты, счётчики, рекомендации
Отдельный сервер распределённой системы называют нодой (node).
Как это звучит в требованиях:
❌ Данные всегда актуальны и система всегда доступна
✔️ При сетевом разделении приоритет отдаётся согласованности, запись блокируется до восстановления связи
💛А у вас в проекте выбрали CP или AP? Осознанно или как-то само получилось?
#ВанечкаИЕдинорог #СистемныйАнализ #SystemDesign #CAP #Обучение