Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
Коллеги, добрый день.

Подскажите как организован у вас обмен на больших объемах и большом количестве баз.

Есть организация с большим количеством филиалов (приближается к 200 филиалов).

У каждого филиала стоит своя БД. В целом по структуре они однотипные, могут отличаться в момент обновлений. Так как они растянуты по времени из-за часовых поясов.

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

При изменении данных срабатывают определенные правила, где решается в какой филиал они будут отправлены. Еще важна пакетная отправка. То есть все данные в пределах одной транзакции должны быть доставлены одновременно. Плюс к этим данным, по правилам могут быть добавлены еще другие произвольны данные, для целостности информации по клиентам.
Например изменили данные по платежам, указали город отправки Санкт-Петербург, срабатывает правило, которое отправляет данные в Санкт-Петербург и к этим данным нужно еще отправить всю контактную информацию по клиенту и данные его отгрузки.

Смотрел в сторону CDC и CDR, но так и не смог понять, как там указывать правила куда отправляем и как привязывать дополнительные данные.

Может есть какое то другое решение и я его просто не смог нагуглить? Поделитесь решением, как можно организовать обмен между многими БД.

Спасибо.
8 фев 21, 11:38    [22277210]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Virikus,

Посмотрите в сторону шины.
8 фев 21, 12:00    [22277230]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
Есть у нас и обмен через шину, но количество записей для обмена велико для шины, за день может быть по 90 млн записей
8 фев 21, 12:05    [22277240]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Virikus,

средняя скорость обмена - 1К сооб/сек? Если объем сообщений не измеряется в мегабайтах, то ничего страшного нет. Помимо размера сообщений, надо еще посмотреть пиковую скорость + допустимые задержки.

Сообщение было отредактировано: 8 фев 21, 12:23
8 фев 21, 12:29    [22277266]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
Я бы сказал 3-5к/с у нас.

Тут больше вопрос не в транспорте, а как фиксировать изменения и накладывать правила. Сейчас регистрация и выгрузка/загрузка идет через собственный софт. Интересуют как раз промышленные решения, которые позволяют регистрировать и отправлять большой объем. Желательно поддерживающий целостность пакетных данных.
8 фев 21, 12:50    [22277281]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Virikus,

шина и есть промышленное решение, которое позволяет удобно работать с правилами маршрутизации сообщений.

Кроме того, можно пересылать через шину не сами данные, а ссылки на них (пачки ссылок), выкачивая данные по ссылкам другими средствами.
8 фев 21, 12:59    [22277293]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35081
Блог
Virikus,

Сервис брокер смотрели?
8 фев 21, 13:03    [22277299]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
invm
Member

Откуда: Москва
Сообщений: 9725
Virikus,

Регистрация - CDC, CT, триггеры.
Обмен - Service Broker.

Возможно и это подойдет - https://docs.microsoft.com/ru-ru/sql/relational-databases/replication/transactional/peer-to-peer-transactional-replication?view=sql-server-ver15
8 фев 21, 13:07    [22277305]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
.Евгений
Virikus,

шина и есть промышленное решение, которое позволяет удобно работать с правилами маршрутизации сообщений.

Кроме того, можно пересылать через шину не сами данные, а ссылки на них (пачки ссылок), выкачивая данные по ссылкам другими средствами.


Но чтобы что-то отправить через шину, надо сначала понять какие данные отправлять и куда. Интересует больше эти моменты пока. Просто повешать события на триггеры недостаточно как я понимаю, так по данному изменению может вообще ничего не надо отправлять согласно правилам обмена.

Можете подсказать, что почитать по выкачиванию данных по ссылкам?
8 фев 21, 13:09    [22277309]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8587
Virikus,

лучшее решение - перенести данные на централизованный сервер, организовать "облако" своего рода. То, как у вас сейчас работает, требует колоссальных трудозатрат и имеет риск получить несоответствие данных, требует постоянных синхронизаций, проверок, рассогласование резервных копий и мало ли чего ещё.
8 фев 21, 13:58    [22277354]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
Владислав Колосов
Virikus,

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


Да, есть такое. К сожалению на создание централизованного сервера получили категорический отказ руководства.
8 фев 21, 14:04    [22277358]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Virikus,

А Kafka вам не подойдет?
8 фев 21, 14:14    [22277370]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Virikus,

Каждое изменение объекта (создание/модификация/удаление) должно порождать сообщение в шину. В зависимости от правил (централизованных), это сообщение получает от нуля до N подписчиков, которые его обрабатывают и либо непосредственно применяют его на своих данных, либо передают ссылку в ЕТЛ процесс (например, линк к удаленной БД + таблица + идентификатор записи).

Если правила децентрализованы (проблемный вариант), то источник сам должен определять адресатов сообщения.
8 фев 21, 14:23    [22277375]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4146
Glebanski
Virikus,

А Kafka вам не подойдет?


Kafka, RabbitMQ, Service Broker
8 фев 21, 14:58    [22277425]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35081
Блог
Virikus
Да, есть такое. К сожалению на создание централизованного сервера получили категорический отказ руководства.


А обосновали как-то отказ?
8 фев 21, 15:11    [22277438]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
andy st
Member

Откуда:
Сообщений: 806
Критик,
а какая разница, если руководство не вкуривает, что шина - тот же централизованный сервер.
8 фев 21, 16:55    [22277543]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4146
andy st
Критик,
а какая разница, если руководство не вкуривает, что шина - тот же централизованный сервер.


Да ну, фигня какая-то.

Поставьте экспресс, пусть шарашит

Ну, и выше написано про
Kafka
RabbitMQ
8 фев 21, 17:24    [22277586]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
У нас используется IBM MQ, для различных интеграций.

Проблема как раз в удобном инструменте регистрации для обмена и большом объеме данных. Кроме этого есть еще особенность при загрузке, так как есть таблицы итогов, которые при загрузке необходимо пересчитывать по ключам.

Насколько понимаю по данной статье https://habr.com/ru/post/514500/ нам подходит вариант CDC, но я пока не понял как настраивать правила, по которым определять куда и какие данные необходимо отправлять и как выполнять дополнительные действия при загрузке.
8 фев 21, 18:02    [22277645]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Virikus
Member

Откуда:
Сообщений: 11
Критик
Virikus
Да, есть такое. К сожалению на создание централизованного сервера получили категорический отказ руководства.


А обосновали как-то отказ?


Хотят чтобы в случаем проблем с центральной базой, филиалы могли независимо работать, плюс беспокоятся насчет безопасности данных, чтобы никто не видел лишнюю информацию
8 фев 21, 18:06    [22277649]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4146
Virikus
У нас используется IBM MQ, для различных интеграций.

Проблема как раз в удобном инструменте регистрации для обмена и большом объеме данных. Кроме этого есть еще особенность при загрузке, так как есть таблицы итогов, которые при загрузке необходимо пересчитывать по ключам.

Насколько понимаю по данной статье https://habr.com/ru/post/514500/ нам подходит вариант CDC, но я пока не понял как настраивать правила, по которым определять куда и какие данные необходимо отправлять и как выполнять дополнительные действия при загрузке.


Кстати, еще есть зверюга MSMQ, из сервисов доступен, в коллекцию
8 фев 21, 18:24    [22277668]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3687
Virikus
Критик
пропущено...


А обосновали как-то отказ?


Хотят чтобы в случаем проблем с центральной базой, филиалы могли независимо работать, плюс беспокоятся насчет безопасности данных, чтобы никто не видел лишнюю информацию

а у вас на случай недоступности части баз есть механизмы переотправки сообщений??
9 фев 21, 16:14    [22278246]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
alexey2021
Member

Откуда:
Сообщений: 1
Virikus,
здравствуйте!
Я много лет занимаюсь системами интеграции и обмена данными, в т.ч. разработкой и внедрением в различные информационные системы. Мне показался интересным ваш кейс. Не исключено, что смогу помочь...

Чтобы более предметно сфокусироваться на возможных вариантах решения, хотелось бы понять:

- Чем конкретно не устраивает текущее ваше решение ? Оно не справляется по скорости (какая задержка доставки данных) ? Не обеспечивает должное качество/консистентность данных ? Сложное в сопровождении ? Создает проблемы при обновлениях прикладной платформы ? В нём не реализован какой-то важный для бизнеса функционал ? Что-то другое?

- Какого типа у вас прикладная платформа ? 1С, Акспата, что-то самописное, что-то другое ...?
23 апр 21, 15:12    [22313237]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Тяп-ляп
Member

Откуда: Москва
Сообщений: 826
Владислав Колосов
лучшее решение - перенести данные на централизованный сервер, организовать "облако" своего рода. То, как у вас сейчас работает, требует колоссальных трудозатрат и имеет риск получить несоответствие данных, требует постоянных синхронизаций, проверок, рассогласование резервных копий и мало ли чего ещё.

Полностью согласен.
В течение нескольких лет поддерживал и самописную репликацию и репликацию слиянием на SQL-сервере.
Это бесконечные проблемы.
С первой попытки такое решение не сделать.
При обсуждении этой темы бесполезны разговоры о триггерах, сервис-брокерах и т.п.
Нужно обсуждать особенности уже готового решения.
23 апр 21, 17:05    [22313308]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Тяп-ляп
Member

Откуда: Москва
Сообщений: 826
Пробовали слезть с репликации слиянием на шину от Tibco, не прокатило - спецы неделями делали адаптер для всего лишь одной таблицы, получалась очень низкая скорость передачи данных, не было гарантии доставки данных.
Может, спецы не те были.
Репликация слиянием удручала жесткими ограничениями на изменение схемы данных, блокировками на общих системных таблицах и бесконечными конфликтами на изменении данных.
Лучше всего работала самописка. Очень большой плюс был в том, что можно было ее переделывать как угодно.
23 апр 21, 17:23    [22313323]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом лучше организовать обмен между базами?  [new]
Тяп-ляп
Member

Откуда: Москва
Сообщений: 826
Пробовали слезть с репликации слиянием на шину от Tibco, не прокатило - спецы неделями делали адаптер для всего лишь одной таблицы, получалась очень низкая скорость передачи данных, не было гарантии доставки данных.
Может, спецы не те были.
Репликация слиянием удручала жесткими ограничениями на изменение схемы данных, блокировками на общих системных таблицах и бесконечными конфликтами на изменении данных.
Лучше всего работала самописка. Очень большой плюс был в том, что можно было ее переделывать как угодно.
26 апр 21, 10:03    [22314269]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить