
Компании часто сталкиваются с необходимостью переливать данные между системами. Но нередко это превращается в настоящий квест: форматы данных могут различаться, для интеграции инструментов может не быть готовых коннекторов, самостоятельно гарантировать консистентность данных в целевой системе может быть сложно или невозможно. Поэтому подобные задачи редко обходятся без применения CDC (Change Data Capture).
Меня зовут Андрей Капустин. Я менеджер продукта Tarantool CDC в компании VK Tech. В этой статье я расскажу о Tarantool CDC и о том, как инструмент помогает консолидировать данные из разрозненных хранилищ, в том числе проприетарных СУБД, обеспечивая прозрачность, высокую консистентность и скорость.
Об актуальности задачи
С ростом цифровизации и требований к ИТ-системам бизнес разных направлений стремится получить возможность анализировать данные и принимать решения с минимальными задержками, а иногда практически мгновенно. Так, бизнес-задачи, подразумевающие работу с данными, поступающими в Real-time, можно выделить в разных отраслях:
финтех: получение актуального профиля клиента, контроль транзакций и счетов;
ритейл: контроль остатков, дедупликация, партионный учет;
телеком: биллинг, Real-time marketing, омниканальность;
госсектор: аналитическая отчетность, работа с реестрами;
производство: IIoT, цифровые двойники, сбор данных для целей ML/AI;
интернет: сервисы авторизации, сайты-агрегаторы, Data Transfer (облака).
Но чтобы обеспечить возможность реализации подобных сценариев, нужен механизм, способный собрать данные со всех источников, а затем перенести в целевое хранилище без задержек, потерь и повреждений.
Таким механизмом являются решения CDC. Tarantool CDC — одно из них.
Tarantool CDC: место в экосистеме и эволюция
Tarantool объединяет экосистему продуктов для хранения данных разных типов и работы с ними. Ядром платформы является Tarantool Enterprise Edition — версия Tarantool, ориентированная на крупных клиентов, желающих построить нестандартные решения.
На основе Tarantool Enterprise Edition построена целая линейка продуктов, среди которых:
Tarantool DB — российская NoSQL in-memory СУБД;
Tarantool Graph DB — графово-векторная база данных;
Tarantool Queue Enterprise — распределенная in‑memory-система очередей сообщений;
Tarantool Column Store — in-memory колоночная СУБД для транзакционно-аналитической обработки данных в реальном времени.
Особое место в экосистеме занимает Tarantool CDC — решение для Real-time-репликации данных на основе потока событий БД-источника.
На нем остановимся подробнее.

Эволюция Tarantool CDC
На этапе появления первых версий Tarantool CDC (v1) инструмент предоставлял пользователям только основной функционал, но не мог предложить достаточный набор интеграций и коннекторов. Из-за этого, чтобы обеспечить возможность применять Tarantool CDC в нужных кейсах и существующих клиентских системах, мы были вынуждены разрабатывать коннекторы под заказ. Например:
Sink в ClickHouse;
Sink в ElasticSearch;
Source из Oracle (через Golden Gate).
И таких реализаций были десятки. Причем многие из них по разным причинам даже не доходили до прода.
По мере развития Tarantool CDC (v2) стало очевидно, что создание коннекторов под заказ — путь, напоминающий «придумывание велосипеда». Поэтому мы решили пойти дальше и добавили Tarantool в готовую экосистему, в качестве которой выбрали Debezium — проверенный популярный продукт с большим набором Source- и Sink-коннекторов.
Чтобы сделать Tarantool CDC частью экосистемы Debezium, нам фактически требовалось только разработать Source- и Sink-коннекторы для Tarantool.

Но даже в такой реализации со временем мы начали упираться в предельную производительность, что стало бутылочным горлышком, которое не позволяло гарантировать консистентность данных без промежуточной буферизации.
Поэтому при разработке последующих версий мы делали основной акцент на повышении производительности и надежности, а также на механизмах контроля консистентности данных.
В результате мы пришли к Tarantool CDC версии 9, в которой:
сохранились все преимущества CDC v2;
в качестве буфера используется Tarantool Queue Enterprise;
есть поддержка Kubernetes;
обеспечена совместимость с экосистемой Debezium;
есть собственные коннекторы на Java, Go;
поддерживаются механизмы масштабирования и отказоустойчивости Tarantool;
есть возможность работы на отечественных операционных системах: Astra Linux, «РедОС», ALT Linux;
есть экспорт метрик мониторинга в Prometheus и Grafana.
Сценарии использования Tarantool CDC
Tarantool CDC — инструмент Near Real-time-репликации данных, который может работать в нескольких режимах. Выделю основные:
синхронизация данных из Tarantool в другие СУБД;
наполнение кэш-витрин в Tarantool из мастер-базы;
двусторонняя синхронизация Tarantool — PostgreSQL;
миграция данных из проприетарных СУБД Oracle без Golden Gate.
Примечание: Помимо этого, Tarantool CDC можно применять в сценариях, когда Tarantool не используется как хранилище данных.
Чтобы понять, насколько просто Tarantool CDC справляется с подобными задачами, достаточно рассмотреть принцип CDC из Oracle в Tarantool DB. Все сводится к простому алгоритму:
Экстрактор OpenLogReplicator (OLR) отслеживает изменения таблиц Oracle, производя разбор журнала логов: Online Redo Log Files и Archive Redo Log Files.
Source Oracle Connector получает CDC-поток из OLR по сети.
Source Oracle Connector отправляет данные в распределенный брокер сообщений Tarantool Queue Enterprise.
Очередь Tarantool Queue Enterprise передает сообщения в Sink Tarantool Connector, который записывает данные в Tarantool DB.
Теперь немного о репликации.
Обобщенно репликация данных при работе с Tarantool CDC строится по схожему принципу:
Source Connector отслеживает изменения таблиц в БД-источнике.
Source Connector отправляет данные в Tarantool Queue Enterprise.
Очередь отправляет данные в Sink Connector, который на нее подписан (возможно, Broadcast).
Sink Connector записывает данные в БД-приемник.
Причем в качестве Source Connector и Sink Connector может быть практически любая СУБД из-за совместимости с экосистемой Debezium: Tarantool CDC может справиться и с такими задачами.
Архитектура Tarantool CDC v9
Tarantool CDC v9 имеет расширенную совместимость. Так, в качестве источников данных инструмент может взаимодействовать:
с PostgreSQL;
с Oracle (XStreams/OpenLogReplicator);
с Tarantool Enterprise 2.x/3.x;
с Tarantool DB 1.x/2.x;
с Tarantool Data Grid 2;
с MS SQL (в планах).
Для сбора данных Tarantool CDC читает логи или подписывается на репликационный поток.
В качестве получателей данных могут выступать:
Tarantool Enterprise 2.x/3.x;
Tarantool DB 1.x/2.x;
ODBC/JDBC: PostgreSQL, MS SQL, DB2, MySQL, Oracle и другие;
Elasticsearch;
ClickHouse;
GreenPlum (в планах).

Ядром архитектуры самого Tarantool CDC является Tarantool Queue Enterprise. Очередь взаимодействует с подсистемой чтения, которая включает несколько исполнителей (например, Исполнитель 1-1, Исполнитель 1-2) с собственными коннекторами источников для взаимодействия с разными базами данных.
С другой стороны, Tarantool Queue Enterprise также взаимодействует с подсистемой записи, которая включает задачи с загрузчиками, работающими с различными БД-получателями.
Таким образом, транспорт данных осуществляется по следующему принципу:
В БД-источник поступают новые данные.
Исполнители с коннекторами подключаются к БД-источнику, забирают данные и трансформируют их во внутренний формат CDC.
В формате CDC данные передаются в очередь.
Из очереди данные получают загрузчики, которые преобразовывают данные в формат целевой системы.
Данные в формате целевой системы передаются в БД-получатель.
При этом Tarantool CDC функционирует на базе Kubernetes и умеет работать с внешним реестром схем, поэтому в архитектуре решения также есть соответствующие модули:
оркестратор;
внешний реестр схем.

При этом архитектуру можно гибко масштабировать.
Для примера: если нагрузка небольшая, то можно использовать общую очередь в Tarantool Queue Enterprise, чтобы собрать данные с двух СУБД-источников и положить их в целевую СУБД-получатель.

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

От теории к практике
Теперь сделаем краткий обзор возможностей Tarantool CDC при решении реальной прикладной задачи.
Например, в качестве условий задачи примем, что:
БД-источник — Oracle;
первый БД-получатель — Tarantool DB;
данные из Tarantool DB нужно сразу отдавать в PostgreSQL.
Полная схема в таком случае будет иметь следующий вид:
Первоначальный источник информации — Oracle.
WAL-логи из Oracle читает OpenLogReplicator.
Далее Sink-коннектор Oracle забирает данные из OpenLogReplicator и передает их в очередь Tarantool Queue Enterprise.
Sink-коннектор Tarantool забирает данные из Tarantool Queue Enterprise и отдает в Tarantool DB.
Source-коннектор Tarantool забирает данные из Tarantool DB и снова передает их в Tarantool Queue Enterprise.
Из Tarantool Queue Enterprise данные забирает Sink-коннектор PostgreSQL и отдает их в БД-получатель PostgreSQL.
То есть схема простая и фактически состоит из двух цепочек:
из Oracle в Tarantool DB;
из Tarantool DB в PostgreSQL.

При старте загрузки данных в Oracle данные начнут автоматически переливаться в Tarantool DB и PostgreSQL. Всю динамику, показатели загрузки данных и подробную информацию по этим процессам можно отслеживать также Grafana + Prometheus в формате наглядных графиков и дашбордов.

Помимо этого, здесь же можно отслеживать информацию об ошибках в процессе реплицирования, если такие будут возникать.
Таким образом, Tarantool CDC может выполнять задачи некого all-in-one-комбайна, который и предоставляет нужные коннекторы, и переливает данные, и обеспечивает консистентность данных, и позволяет отслеживать все процессы.
Выводы и планы
Инструменты класса Change Data Capture — наиболее эффективное решение для прокачки данных между хранилищами, даже если речь идет о системах, где данные обновляются в режиме реального времени. Фактически CDC значительно упрощают подобные задачи и помогают обходить подводные камни.
Но среди CDC нет серебряной пули — у каждого инструмента свой набор интеграций, возможностей, преимуществ. Например, к достоинствам Tarantool CDC можно отнести:
высокую производительность за счет использования in-memory-технологии;
совместимость с экосистемой Debezium, готовые коннекторы;
отказоустойчивость и масштабирование за счет очереди Tarantool Queue Enterprise под капотом;
собственные коннекторы на разных языках Go, Java: Source для Tarantool Enterprise Edition, Tarantool Data Grid 2, Tarantool DB, ClickHouse, PostgreSQL;
Real-time-репликацию из проприетарных СУБД (например, Oracle);
При этом мы не останавливаемся на достигнутом и продолжаем активно развивать продукт. Так, в перспективе будут проработаны:
Advanced Observability (мониторинг, алертинг, логирование);
интеграция CDC v9 в VK Data Platform;
Sink-коннектор для GreenPlum;
Source-коннектор для YDB, SAP HANA (в рамках проверки гипотезы);
трансформации данных при репликации (в рамках проверки гипотезы).
О том, что получится после реализации всех планов и как будет развиваться инструмент в дальнейшем, обязательно расскажем в будущих статьях.
А пока рассказывайте в комментариях о своем опыте консолидации данных из разрозненных хранилищ.
Вступайте в чат сообщества Tarantool и подписывайтесь на наш канал в Telegram.
BigD
Что такое Sink?
KAPANDR Автор
Sink-коннектор используется для записи данных в БД-получатель