Распределённая база у вас уже есть, только без гарантий

1С, PIM и сайт уже образуют распределённую систему, только без гарантий. Какие принципы CockroachDB и Raft перенести в интеграцию, чтобы не терять заказы.

  • Повод: подкаст о CockroachDB
  • Какую задачу решает распределённая база
  • Гарантии ограничены физикой
  • Ваша распределённая система работает без кворума

Повод: подкаст о CockroachDB

  1. Гергей Орош в подкасте The Pragmatic Engineer поговорил с

  2. Питером Маттисом, сооснователем Cockroach Labs и одним из авторов CockroachDB (выпуск).

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

  4. Распределённая система у большинства компаний уже работает: 1С, PIM, сайт и склад обмениваются данными.

  5. Только у неё нет ни одной из гарантий, на которых построена CockroachDB.

Какую задачу решает распределённая база

До Cockroach Labs Маттис работал в Google над файловым хранилищем Colossus. В 2012 году Google описала Spanner - глобальную базу, в которой транзакции в Нью-Йорке и в

Токио видят одни и те же данные

CockroachDB появилась в 2015 году как открытая реализация этой идеи, причём без атомных часов, на которые опирается Spanner. Механизм такой.

База режет данные на диапазоны (ranges) и хранит каждый в трёх копиях.

Запись считается сделанной, когда её подтвердили две копии из трёх.

Порядок согласования задаёт протокол Raft: у каждого диапазона есть лидер, он ведёт журнал операций, остальные копии воспроизводят этот журнал.

Если сервер или целая стойка выходит из строя, база продолжает работать и не теряет подтверждённых записей.

Гарантии ограничены физикой

За согласованность платят деньгами и миллисекундами. От Москвы до

Новосибирска по прямой около 2 800 км

В оптоволокне свет проходит примерно 200 000 км/с, поэтому сигнал туда и обратно идёт минимум 28 мс, а по реальной трассе и через оборудование дольше.

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

Теорема CAP описывает этот выбор строго.

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

Разобрать ваш контур интеграции

Ваша распределённая система работает без кворума

  1. Типичный ландшафт ритейлера или дистрибьютора: 1С:ERP ведёт остатки и цены, Akeneo или Pimcore хранит карточки товаров, Magento или 1С-Битрикс продаёт, WMS отгружает.

  2. Данные между ними ходят выгрузками раз в 15 минут и HTTP-скриптами, которые когда-то написал подрядчик.

  3. По сути это база из четырёх копий без кворума, журнала, повтора при сбое и единого владельца данных.

  4. Цену этого видно в отчётах о продажах.

  5. Сайт продаёт товар, который кончился на складе час назад.

  6. Цена на витрине отличается от цены в 1С.

  7. Скрипт падает по таймауту, и заказ пропадает.

  8. Мониторинга расхождений нет, поэтому о сбое первыми узнают клиенты, когда пишут в поддержку.

Как перенести принципы CockroachDB в интеграцию

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

Так мы строим интеграции в KT.Team: - Журнал событий.

Системы публикуют события в Apache Kafka

Kafka хранит упорядоченный лог, похожий на журнал Raft: потребитель после падения дочитывает пропущенные события с того места, где остановился.

При скромном потоке событий ту же роль выполняет шина Datareon или Talend ESB. - Один владелец каждого факта.

Остатки принадлежат 1С, контент - PIM, статус заказа - OMS. В CockroachDB записи в диапазон принимает ровно один лидер.

Здесь то же правило действует на уровне систем. - Идемпотентность.

Каждое сообщение несёт уникальный ключ.

Повторная доставка того же заказа не создаёт второй заказ. - Transactional outbox.

Система записывает изменение и исходящее событие в одной транзакции своей базы.

Отдельный процесс доставляет событие, даже если брокер был недоступен в момент записи. Так закрывается сценарий «в 1С сохранилось, а на сайт не ушло».

- Метрика расхождения. Сверка остатков между 1С и сайтом идёт по расписанию, процент расхождения выводится на дашборд.

Когда он растёт, инженер получает алерт раньше, чем клиент получает ошибку. Каждый пункт выглядит простым.

На практике outbox и идемпотентность требуют дисциплины в каждой системе ландшафта, включая доработки 1С, которые компании годами откладывают.

Основная работа интегратора состоит именно в этом.

Когда распределённая база действительно нужна

  1. Правило выбора: распределённая SQL-база окупается, если бизнесу нужно писать данные из нескольких регионов одновременно и переживать потерю целого дата-центра без простоя.

  2. Под это правило попадают банки, крупный e-commerce и логистика с федеральной сетью.

  3. Остальным хватит PostgreSQL с синхронной репликой: она дешевле, проще в эксплуатации, и специалистов по ней на рынке больше.

  4. При выборе учитывайте лицензию. В 2024 году Cockroach Labs убрала бесплатную редакцию Core.

  5. Бесплатная Enterprise доступна компаниям с годовой выручкой до 10 млн долларов, остальные платят.

  6. Российским компаниям доступна YDB от Яндекса: распределённая SQL-база, открытая в 2022 году под Apache 2.0 и проверенная нагрузками самого Яндекса.

Вывод

  1. Команда Маттиса с 2015 года решает задачу, которую большинство компаний даже не формулирует: как сделать так, чтобы копии данных не противоречили друг другу.

  2. Покупать распределённую базу для этого обычно рано.

  3. Достаточно признать, что 1С, PIM и сайт уже образуют распределённую систему, и дать ей журнал событий, владельцев данных и метрику расхождений.

  4. Результат такой работы измеряется числом заказов, которые не потерялись по дороге между системами.

Обсудить статью: Распределённая база у вас уже есть,…

Укажите email или телефон, чтобы мы могли вам ответить.

Отправить через: