источник:Облачное сообщество Hang Seng LIGHT
Поскольку бизнес-объем системы продолжает расширяться, будет использоваться распределенный метод, и будет много промежуточного программного обеспечения, такого как Redis, очередь сообщений, хранилище больших данных и т. д., но фактическое основное хранилище данных все еще хранится. в базе данных, несколько Проблема синхронизации данных в реальном времени существовала до базы данных.Чтобы решить эту проблему, для решения этой проблемы необходимо некоторое промежуточное программное обеспечение для синхронизации данных в реальном времени.
Введение в канал
Canal
Это платформа с открытым исходным кодом, основанная на Ali.Mysql
база данныхbinlog
Инкрементная подписка и компонент потребленияbinlog
log, а затем выполнять некоторое потребление данных, например зеркальное отображение данных, неоднородность данных, индексирование данных, обновление кэша и т. д. По сравнению с очередями сообщений с помощью этого механизма можно добиться упорядочения и согласованности данных.
дизайн фона
В первые дни компания Alibaba B2B имела бизнес-требования для синхронизации компьютерных залов из-за развертывания двухкомпьютерных залов в Ханчжоу и США. Однако ранний бизнес по синхронизации баз данных в основном основывался на методе триггера для получения добавочных изменений, однако с 2010 года компании, базирующиеся на Alibaba, начали постепенно пытаться анализировать журналы на основе базы данных, чтобы получать добавочные изменения для синхронизации. с тех пор массовая подписка и потребление открыли новую эру.
Используемая в настоящее время внутренняя синхронизация уже поддерживает синтаксический анализ журналов некоторых версий mysql5.x и oracle.
Службы, поддерживаемые инкрементальной подпиской и потреблением журналов:
- Зеркальное отображение базы данных
- Резервное копирование базы данных в режиме реального времени
- Многоуровневый индекс (у продавцов и покупателей есть собственный индекс подбазы данных)
- search build
- Обновление бизнес-кэша
- Важные деловые новости, такие как изменение цен
Принцип работы
Реализация активной и резервной репликации MySQL
С верхнего уровня репликация делится на три шага:
-
master
Лог изменений в бинарный лог (binary log
) (эти записи называются событиями бинарного журнала,binary log events
, в состоянии пройтиshow binlog events
смотреть); -
slave
будетmaster
изbinary log events
скопировать в свой журнал ретрансляции (relay log
); -
slave
Повторное выполнение события в журнале реле изменит данные, чтобы отразить его собственное.
Как работает канал
Принцип относительно прост:
-
canal
моделированиеmysql slave
протокол взаимодействия, маскирующийся подmysql slave
,В направленииmysql master
Отправитьdump
протокол -
mysql master
Получатьdump
запросить, начать толкатьbinary log
даватьslave
(это,canal
) -
canal
Разобратьbinary log
объект (исходный поток байтов)
базовая архитектура
инструкция:
-
server
представляетcanal
запущенный экземпляр, соответствующийjvm
-
instance
соответствует очереди данных (1server
Соответствует 1..ninstance
)
instance
Модуль:
-
eventParser
(Доступ к источнику данных, моделирование взаимодействия между подчиненным протоколом и ведущим, анализ протокола) -
eventSink
(Компоновщик Parser и Store для фильтрации, обработки и распространения данных) -
eventStore
(хранилище данных) -
metaManager
(Диспетчер дополнительной информации о подписке и потреблении)
Дизайн парсера событий
весьparser
Процесс условно можно разделить на несколько этапов:
-
Connection
Получить местоположение, в котором был выполнен последний синтаксический анализ (если он запускается в первый раз, получить начальное указанное местоположение или текущую базу данныхbinlog
сайт) -
Connection
создать ссылку, отправитьBINLOG_DUMP
инструкция // 0. записать номер команды // 1. записываем 4-байтовую позицию bin-log для начала // 2. записать 2 байта флагов bin-log // 3. записываем 4 байта id сервера слейва // 4. записать имя файла bin-log -
Mysql
начать толчокBinaly Log
- получила
Binaly Log
прохождениеBinlog parser
Выполните анализ протокола и добавьте определенную информацию // Имя дополнительного поля, тип поля, информация о первичном ключе, обработка беззнакового типа - Перейти к
EventSink
Модуль выполняет хранение данных, что является блокирующей операцией до тех пор, пока сохранение не будет успешным. - После успешного хранения регулярно записывайте
Binaly Log
Место расположения
Дизайн EventSink
инструкция:
- Фильтрация данных: поддержка режима фильтрации подстановочных знаков, имени таблицы, содержимого поля и т. д.
- Маршрутизация/распределение данных: решить 1:n (1
parser
соответствовать несколькимstore
Режим) - Объединение данных: решить n:1 (несколько
parser
соответствует 1store
) - Обработка данных: при вводе
store
Перед выполнением дополнительной обработки, такой какjoin
Дизайн магазина событий
- 1. В настоящее время реализовано только
Memory
Режим памяти, последующие планы по увеличению местныхfile
место хранения,mixed
режим смешивания - 2. Узнал от
Disruptor
изRingBuffer
идея реализации
RingBuffer
дизайн:
3 курсора определены
- Put : последняя позиция записи модуля приемника для хранения данных.
- Get : последняя позиция выборки, полученная подпиской на данные.
- Ack : последняя позиция потребления, где потребление данных было успешным.
Дизайн экземпляра
instance
Представляет фактическую работающую очередь данных, включаяEventPaser
,EventSink
,EventStore
и другие компоненты.
абстрагированныйCanalInstanceGenerator
, в основном с учетом того, как осуществляется управление конфигурацией:
-
manager
Как: интегрировать с собственной внутренней веб-консолью/системой управления. (В настоящее время в основном используется внутри компании) -
spring
Метод: определить на основе свойств Spring XML + для создания конфигурации Spring.
Дизайн сервера
server
Представляет работающий экземпляр канала. Чтобы облегчить использование компонентов, он специально абстрагирован.Embeded
(встроенный) /Netty
Две реализации (доступ к сети)
-
Embeded
: правильноlatency
и доступность имеют относительно высокие требования и могут содержать распределенные связанные технологии (такие какfailover
) -
Netty
: на основеnetty
Он инкапсулирует уровень сетевого протокола, который состоит изcanal server
Конечно, чтобы обеспечить его доступность, использовалась модель вытягивания.latency
Будет небольшая скидка, но это тоже зависит от ситуации. (Алиnotify
иmetaq
, типичныйpush/pull
Модель также постепенно движется в сторонуpull
модель рядом,push
Будут некоторые проблемы, когда объем данных большой)
механизм ГК
canal
изha
делится на две части,canal server
иcanal client
Имеются соответствующие реализации ha соответственно
-
canal server
: уменьшитьmysql dump
запрос, разныеserver
Вверхinstance
Требуется, чтобы только один изrunning
, остальные находятся в режиме ожидания. -
canal client
: Для обеспечения порядкаinstance
Только по одномуcanal client
провестиget/ack/rollback
операции, в противном случае прием клиента не может быть гарантированно в порядке.
Управление всем механизмом HA в основном зависит отzookeeper
несколько характеристикwatcher
иEPHEMERAL
узел (иsession
привязка жизненного цикла).
Canal Server:
Грубые шаги:
-
canal server
начатьcanal instance
всегда впередzookeeper
Сделайте попытку начать суждение (реализация: создайте EPHEMERAL node, кто бы ни был успешно создан, ему будет разрешено начать) - Создайте
zookeeper
После успешного завершения узла соответствующийcanal server
запустить соответствующийcanal instance
, не удалось создатьcanal instance
будет в режиме ожидания - однажды
zookeeper
Находитьcanal server A
Уведомлять других сразу после исчезновения созданного узлаcanal server
Выполните операцию шага 1 еще раз и выберите новыйcanal server
запускатьinstance
. -
canal client
Каждый раз, когда выполняется соединение, оно сначала отправляетzookeeper
Спросите, кто сейчас активированcanal instance
, а затем установить с ним связь. Как только ссылка будет недоступна, он попытается снова подключиться.
Метод клиента канала иcanal server
Аналогичным образом, также используяzookeeper
Способ вытеснения узла EPHEMERAL контролируется.
Сценарии применения
синхронизация данных
- В среде разработки микросервисов для повышения эффективности поиска и точности поиска он будет широко использоваться.
Redis
,Mongodb
ЖдатьNoSQL
база данных, которая также использует многоSolr
,Elasticsearch
и другие сервисы полнотекстового поиска. Затем, в это время, возникнет проблема, о которой нам нужно подумать и решить: это проблема синхронизации данных! - Canal может синхронизировать данные в изменяющейся в реальном времени базе данных, чтобы
Redis
,Mongodb
илиSolr
/Elasticsearch
середина.
неоднородность данных
В крупномасштабной архитектуре веб-сайта БД будет использовать подбазу данных и подтаблицу для решения проблем с емкостью и производительностью, но новые проблемы, вызванные подбазой данных и подтаблицей. Например, запросы различных измерений или запросы агрегации в настоящее время будут очень сложными. Как правило, мы решим эту проблему с помощью механизма неоднородности данных.Неоднородность данных заключается в объединении нескольких таблиц, которые необходимо объединить и запросить в БД в соответствии с определенным измерением. Позвольте вам поинтересоваться. Канал является одним из средств реализации неоднородности данных.