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

Откуда:
Сообщений: 12
Господа, помогите новичку разобраться с возможностями репликации (синхронизации).

Заранее предупреждаю, в этой теме абсолютный ноль.
Однако хотел бы для себя в самом начале выбрать правильную стратегию, чтобы не оказаться в будущем в тупке.

1. Есть большая база на SQL server 2008. Размер базы 240gb. База на 1с. Память сервера 128gb. Архитектура 64bit.
2. Замерял прирост данных только на стороне 1с составляет 5mb в минуту, что составляет примерно 1mb/сек. Данные сохранялись в виде файла XML.
3. Насколько я понимаю, прирост логов транзакций должен быть существенно больше, пока не проверял.
4. Есть задача синхронизировать базу с базами филиалов, которых более 10 шт и расположены они удаленно.
5. Синхронизация должна выполняться только в 1 сторону, т.е. от центральной базы в филиалы. Обратная синхронизация будет выполняться средствами 1с.

Теперь вопросы.

1. Если настоить синхронзацию, то возникнет поток данных из центрального офиса в удаленные. Какова может быть ожидаемая нагрузка на сетку с учетом представленных выше цифр. 1mb*10 офисов * K(лог транзакций) = ? Здесь К указывает на то, восколько раз лог прирост лога транзакций больше прироста чистых данных в 1с. Может быть имеет смысл оценить прирост лога транзакций по размеру базы.
2. В механизме синхронизации есть ли возможность использовать сжатие потока данных, чтобы уменьшить нагрузку на сетку?
3. С учетом приседенных требований, какова может быть оценка отставания актуальности данных в филиалах от центральной базы. Синхронизаця имеет периодический или непрерывный характер? Если периодический, каков ожидаемый период и опять, насколько велико отставание.
4. В описанной конфигурации какова может быть нагрузка на центральную базу (сервер). Это актуальный вопрос, поскольку база и так работает на пределе своей возможности.
5. При потере связи с центральным сервером, какое время понадобится, чтобы начать работу с базой данных в удаленном офисе?
6. При потере связи с центральным сервером, каков риск повреждения удаленной базы (получить неработающую базу). Это вопрос по механизму синхронизации. Аварийное нарушение связи может отразиться на корректности данных в удаленной базе? Дело в том, что центральная база обслуживает базу 1с. Соответсвенно она хранит не только данные, но и метаданные конфигурации 1с. Если при обновлении конфигурации в ценральной базе произошла потеря связи с удаленной базой, тогда есть риск передачи не всей информации, о структуре конфигурации 1с. База не будет работать.

Заранее прошу прощение за возможную техническую неграмотность в этой теме.
26 дек 12, 10:48    [13687004]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
5 Мб/мин это всего лишь 85 Кб/с. И не понятно причем тут какие-то XML-файлы.

Под вашу задачу подходит обычная транзакционная репликация, при условии, что у всех таблиц, данные которых необходимо реплицировать, есть PK и если вообще возможно реплицировать БД 1С.

Алексей Сухоруков
1. Если настоить синхронзацию, то возникнет поток данных из центрального офиса в удаленные. Какова может быть ожидаемая нагрузка на сетку с учетом представленных выше цифр. 1mb*10 офисов * K(лог транзакций) = ? Здесь К указывает на то, восколько раз лог прирост лога транзакций больше прироста чистых данных в 1с. Может быть имеет смысл оценить прирост лога транзакций по размеру базы.
Вам нужно оценивать не нагрузку на сеть, а обеспечить минимальное время применения реплицируемых транзакций на подписчиках. В противном случае, проблемы с производительностью практически гарантированы.
Алексей Сухоруков
2. В механизме синхронизации есть ли возможность использовать сжатие потока данных, чтобы уменьшить нагрузку на сетку?
Нет. Но это можно реализовать на сетевом уровне.
Алексей Сухоруков
3. С учетом приседенных требований, какова может быть оценка отставания актуальности данных в филиалах от центральной базы. Синхронизаця имеет периодический или непрерывный характер? Если периодический, каков ожидаемый период и опять, насколько велико отставание.
Можно периодически и квазинепрерывно.
Алексей Сухоруков
4. В описанной конфигурации какова может быть нагрузка на центральную базу (сервер). Это актуальный вопрос, поскольку база и так работает на пределе своей возможности.
Дополнительная нагрузка будет. Но если вынести дистрибьютора на выделенный сервер, то она будет минимальной.
Алексей Сухоруков
5. При потере связи с центральным сервером, какое время понадобится, чтобы начать работу с базой данных в удаленном офисе?
Никакое не потребуется. Работоспособность БД подписчика не зависит от сеансов репликации.
Алексей Сухоруков
6. При потере связи с центральным сервером, каков риск повреждения удаленной базы (получить неработающую базу). Это вопрос по механизму синхронизации. Аварийное нарушение связи может отразиться на корректности данных в удаленной базе? Дело в том, что центральная база обслуживает базу 1с. Соответсвенно она хранит не только данные, но и метаданные конфигурации 1с. Если при обновлении конфигурации в ценральной базе произошла потеря связи с удаленной базой, тогда есть риск передачи не всей информации, о структуре конфигурации 1с. База не будет работать.
Реплицируются транзакции. Обеспечение логической целостности данных целиком в компетенции приложения. Если оно не использует транзакционность или использует как попало, то на подписчиках возможно периодическое нарушение логической целостности.

Так же следует учесть небыстрое применение снепшота в 240 Гб при инициализации подписчика и возможную необходимость горизонтальной фильтрации стаей публикации.

Исходя из перечисленного, думаю вам будет целесообразно смотреть в сторону специализированных решений по тиражированию данных 1С.
26 дек 12, 11:49    [13687467]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а не хотите терминальную ферму поднять и не связываться с репликациями?
оно вам надо - администрировать сложную распределенную инфраструктуру?
резервирование каналов связи, очень возможно, выйдет дешевле и будет работать стабильнее
26 дек 12, 11:55    [13687510]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
INVM и Crimean спасибо вам за внимание к теме.

1. Я считал так. 5 мегобайт в минуту это примерно 100 килобайт в секунду или 1 мегабит в секунду. Если учесть, что перефирийных баз будет примерно 10, тогда 50 мегабит. Если учесть, что логи транзакций больше чистых данных 1с (наверное), то получится еще больше. С учетом того, что в сети есть собственный траффик, это наверное много.
5 мегобайт в минуту получились следующим образом. У меня уже есть обмен с использованием механизма планов обмена 1с. В узле плана обмена центральной базы регистрируются изменения, далее они прочитываются в выборке и полученные объекты записываются в xml-файл. Средний объем прокачиваемых данных получился как раз такой. Я конечно здесь не учитываю, что xml - не самый компактный способ хранения данных.

2. Сеть может быть нестабильной и возможны отставания в репликации. Боючь, что здесь будут проблемы.

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

4. Механизмы 1с я уже использую и столкнулся с проблемами. Если я не успеваю сделать выборку изменений в течении 3 часов, тогда накапливается более 150000 объектов. Последующая выборка исчерпывает всю память на сервере, приводит к аварийному завершению работы аегента сервера 1с. Есть еще много других косяков. Например требуется синхронное обновление всех периферийных рабочих баз. Если обновление ночью не произошло, тогда возобновление обмена становится не возможным, ребуется значительное время на создания образа периферийной базы. Опят отставание на 3 часа обмен делает невозможным. Других механизмов платформа 1с не предлагает.

5. Сейчас и так все работают в терминальных сессиях на главной базе. Поднял тему, поскольку проблемы возникают при аварийном разрыве связи с главной базой. Простой филиала обходится очень дорого.

Буду признателен, если есть еще какие-либо замечания.
Серьезно настроен использовать механизм репликации.
Если из главной базы будут реплицироваться более 10 филиалов. Каке могут быть потенциально узкие места?
К обмену с использованием механизмов 1С сначала тоже относился оптимистично. Преодолел премерно 5 глюков. В основном это утечки памяти.
Сейчас обмен только с 1 базой работает нормально в течении дня, если нет длинных перерывов.
Вот какие еще проблемы случаются сейчас с использованием механизмов 1с.

1. Блокировки. База сейчас уже работает на пределе своих возможностей. Дополнительное считывание объектов в обмене вызывает риск блокировок. Ведь подключение обмена фактически удваивает количество считываний данных. Изнаально блокировки откатывали выборку. Теперь сохраняю заблокированные объекты, чтобы прочитать позже повторно.
2. Утечки памяти при больших выборках.
3. Есть большие объекты в 1с - наборы записей регистров подчиненные регистратору. Они уже зарегистрировались в узле плана обмена, но еще идет запись. Выборка из узла вызывает блокировку в таких случаях.
4. Упаковка больших объектов в xml вызывает аварийное заврешение из-за утечки памяти. Обошел использованием FastInfoSet в 1с.
5. Использование Управления распределенными базами данных УРИБ вызывает ошибки передачи метаданных в периферийные базу через раз. Обощел отказавшись от УРИБ, использую только механизм регистрации объектов в 1с.
6. Упаковка всей выборки в 1 файл xml (стандартный механизм) вызывает аварийное завершение из-за утечки памяти. Обошел с использованием упаковки объектов в небольшие файлы и обмен пакетами таких файлов.

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

Однако, все это выглядит достаточно рыхло. Слишком много проблемных точек для организации стабильной синхронизации. Вот и смотрю в сторону механизмов SQL. Еще раз, буду признателен, если кто-то озвучит возможные узкие места репликации для такой конфигурации.
26 дек 12, 13:40    [13688523]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
Алексей Сухоруков, к сожалению ( или счастью ) плотно не работал с 1C, но работал с другими системами, которые делают примерно тоже самое. Поэтому
1) Скорее всего вам не нужно передавать все 240ГБ данных филиалам, а потребуется передавать только какие-то справочники и необходимую информацию. Оцените эти размеры.
2) Реплицировать можно только объекты базы(таблицы/представления/процедуры/..). Так же можно накладывать фильтры на реплицируемные данные. Вы должны с помощью этих инструментов воссоздать логику хранения данных 1С. Насколько я знаю там не все просто/прозрачно.

Предположим вы выбрали репликацию транзакций, тогда
3)Много данных(снепшот) вы будете передавать только при иницилизации репликации или реиницилизации. Все остальное время будут передаваться относительное небольшие порции данных.
4)Размер лога или базы источника данных из-за репликации практически не увеличится. Но агент чтения журнала может не давать урезать/бэкапить лог, до тех пор. пока не прочитает данные.
5)Оценка отставания зависит, от нагрузки на сервер, канала до филиала, частоты изменения данных в реплицируемых таблицах.
6)Если связь обрывается, то вы просто не получаете новые данные. И чем дольше связи не будет, тем старее у вас будут данные.
7)На работоспособность самой базы отсутствие связи никак не влияет.
26 дек 12, 13:57    [13688702]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
Алексей Сухоруков, с блокировками могут быть проблемы только на момент создания snapshot. Требуются блокировки изменения схемы на все объекты из подписки. А во все остальное время, агент чтения журнала никаких блокировок не создает.
26 дек 12, 14:01    [13688751]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
Anatoly.
Благодарен Вам за уточнение.
Все же, поясните, что Вы имели ввиду: "Алексей Сухоруков, к сожалению ( или счастью ) плотно не работал с 1C, но работал с другими системами, которые делают примерно тоже самое".
Мне крайне важно Ваше мнение. Бывает, что простое замечание снимает все проблемы. Это как бульмо на глазу. Возможно, простое решение прямо под рукой, а я его не вижу.
Какие еще возможности 1с я не использовал.
В 1с мне нужен полный обмен. Передается 95 процентов всех справочников, документов, регистров.
В плане обмена зарегистрированы все объекты без фильтрации по каким-либо признакам.
Периферийные базы, аказавшись в изуляции, должны видеть все данные, как главном офисе, так и в других филиалах.
Я не могу передавать данные выборочно.
Что я не учитываю?
С другими системами я как раз не работал. Я еще раз повторюсь, в sql я новичек.
26 дек 12, 14:17    [13688978]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
Создание Snapshot, насколько я понимаю, это подготовка получателя данных при репликации.
Что-же, это можно сделать ночью, чтобы уже днем удаленная база поддерживалась в актуальном состоянии.
26 дек 12, 14:19    [13689003]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
На официальной странице microsoft есть такая фраза:
Репликация транзакций обычно используется в серверных средах и пригодна в следующих случаях:
- Издатель и подписчик являются базами данных, отличными от баз данных SQL Server (например, Oracle).
А как насчет postgresql?
26 дек 12, 14:42    [13689224]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Crimean
Member

Откуда:
Сообщений: 13147
при построении распределенной системы с возможностью автономной работы - не будет проблем когда 2 подразделения будучи в оффлайне спишут под ноль один и тот же товар? или это не есть проблема?
26 дек 12, 14:48    [13689292]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
Оказвшись в режиме автономной работы подразделение имеет доступ товарам только на совем складе.
К остальным подразделениям можно делать только заказы.
Автономная работа - это исключительная ситуация. Нужно только вводить счета, счета фактуры, расходные накладные и приходники. У каждого филиала есть своя нумерация ведется она только в режиме автономной работы.
Еще раз, это вынужденная мера. Задача - обесепчение бесперебойности работы. При возобновлении связи, созданные объекты мигрируют в главную базу средствами 1с. Если реплицирование позволит изолировать новые объекты, тогда можно синхронизировать средствами репликацирования.
26 дек 12, 15:21    [13689637]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Алексей Сухоруков
Периферийные базы, аказавшись в изуляции, должны видеть все данные, как главном офисе, так и в других филиалах.
Вам придется делать фильтрованные подписки. В противном случае будет петля -- филиал будет получать обратно свои же данные.
26 дек 12, 16:15    [13690063]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
Спасибо за совет.
Буду разбираться с этим.
Проблема заключается в том, что это 1с. Чтобы фильтровать, придется точно знать структру хранения данных. Здесь еще проблема в том, что каждую ночь происходит изменение структуры, которое подготовила команда программистов.
Рассматриваю такой сценарий. Когда центральная база стала недоступна, подписчик начинает использовать механизм регистрации объектов в узле плана обмена штатными средствами 1с. Когда связь восстановлена, регистрация подписки удаляется. Новые и измененные объекты переносятся в главную базу штатными средствами 1с, далее региструется новая подписка для периферийной базы, репликация восстанавливается.
26 дек 12, 16:43    [13690281]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Evgen
Member

Откуда: Екатеринбург
Сообщений: 91
invm
Алексей Сухоруков
Периферийные базы, аказавшись в изуляции, должны видеть все данные, как главном офисе, так и в других филиалах.
Вам придется делать фильтрованные подписки. В противном случае будет петля -- филиал будет получать обратно свои же данные.


@loopback_detection у sp_addsubscription вроде как раз не допускает образование петель. к тому же, если делать фильтрованные подписки, то не получится видеть всё.
26 дек 12, 21:41    [13691832]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Evgen
Member

Откуда: Екатеринбург
Сообщений: 91
еще надо учесть, что репликация транзакций с обновляемыми подписками - это практически всегда добавление guid-поля во все реплицируемые таблицы. не знаю, как отнесётся к этому 1С.
26 дек 12, 21:46    [13691846]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Evgen
invm
пропущено...
Вам придется делать фильтрованные подписки. В противном случае будет петля -- филиал будет получать обратно свои же данные.


@loopback_detection у sp_addsubscription вроде как раз не допускает образование петель. к тому же, если делать фильтрованные подписки, то не получится видеть всё.
@loopback_detection работает либо для обновляемой подписки, либо для обратной транзакционной репликации. У ТС же данные филиалов будут отправляться в ЦО средствами 1С.
26 дек 12, 22:27    [13691947]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Evgen
Member

Откуда: Екатеринбург
Сообщений: 91
invm
Evgen
пропущено...


@loopback_detection у sp_addsubscription вроде как раз не допускает образование петель. к тому же, если делать фильтрованные подписки, то не получится видеть всё.
@loopback_detection работает либо для обновляемой подписки, либо для обратной транзакционной репликации. У ТС же данные филиалов будут отправляться в ЦО средствами 1С.


слона-то я и не заметил :(
тогда, действительно, фильтрованная подписка
27 дек 12, 05:25    [13692756]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по синхронизации  [new]
Алексей Сухоруков
Member

Откуда:
Сообщений: 12
Столкнулся с проблемой при выборе метода "Публикация транзакций".
В таблицах базы 1с нет первичного ключа.
По всей видимости, репликация не подойдет.
Странно, в одних таблицах первичный ключ есть, в других - нет.
27 дек 12, 11:07    [13693735]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить