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

Откуда:
Сообщений: 1134
Интересно мнение профессионалов.(сразу скажу что дам не все вводные)
Итак, есть ИТ система под MSSQL(работающая под клиентом известной компании), также есть две разнородные, интегрированные, ИТ системы. Это система ККМ(фискальный регистратор) и система ЕГАИС(например, учет алкоголя). Необходимо обеспечить транзакционную целостность по всем транзакциям этих разнородных систем. Правда есть один ньюанс - не все они транзакционные(правда статус ошибки возвращают, таймаут и т.п.). Какие вы можете предложить костыльки для того, что бы обеспечить синхронную работу трех систем? Тем кто не в теме - приведу пример. Вам нужно в MSSQL провести транзакцию , но важно что бы чек ККМ(кассы попросту говоря пробился синхронно) пробился в рамках этой транзакции. Но вот в чем проблема - система не транзакционная - форматы не предусматривают компенсации на уровне протоколов. Может бумага закончится для ККМ, может УТМ зависнуть. Какие лучше в этом случае предусмотреть действия? Какие вообще возможны варианты?Для меня очевидно две важные функциональные возможности - задача минимум - непрерывный процесс обслуживающий такие конфликты, выравнивающий данные. Задача максимум - синхронно ожидать возможного сбоя систем, не отпускать процесс и информировать потом всех участников(все ИТ системы). Разумеется если нет допуска к инфраструктуре ИТ системы то первый вариант затруднителен или невозможен. Во втором случае приложение необходимо писать с учетом специфики взаимодействия со всеми системами но при этом он предполагает все равно определенные накладки и отсутствие транзакционной целостности, пускай и маловероятное.
5 авг 16, 00:59    [19502788]     Ответить | Цитировать Сообщить модератору
 Re: Протоколы двухфазных транзакций для разнородных систем(ЕГАИС,DB,ККМ).  [new]
x1ca4064
Member

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

Полной транзакционности, думаю, добиться нельзя, т.к. можете сформировать продажу в УТМ, а после этого здание организации будет уничтоженно ядерным взрывом, что очень печально, т.к. продажа уже будет зафиксированна ЕГАИС, а слипчек не напечатан

Без УТМ алкогольный чек нельзя формировать, поэтому

можно попробовать так:

С ФРом:

1. Запрашиваем состояние ФР
1.1 Связи нет - rollback
1.2 Чек открыт?
1.2.1 Да - Отмена чека
1.2.2.1 Ошибка отмены - rollback

2. Открытие чека
2.1 Какая-либо ошибка - rollback

3. Формирование продаж в цикле, если какая-либо ошибка -rollback

4. Закрытие чека
4.1 Если ошибка - rollback
4.2 commit

С УТМом:
1. Передаем запрос продажи УТМ
1.1 Если ошибка - rollback

2. Печатаем слип ЕГАИС
2.1 Если ошибка
2.1.1 Делаем запрос возврата УТМ
2.1.2 Если ошибка - *особый случай*, rollback

3. Формируем чек
3.1 Если ошибка
3.1.1 Делаем запрос возврата УТМ
3.1.2 Если ошибка - *особый случай*, rollback

4. commit

*особый случай* можно запоминать и формировать запросы возврата после восстановления УТМ
5 авг 16, 04:22    [19502978]     Ответить | Цитировать Сообщить модератору
 Re: Протоколы двухфазных транзакций для разнородных систем(ЕГАИС,DB,ККМ).  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 1144
x1ca4064,

Врать не буду, я бы такое вообще в отдельный сервис завернул и все сервера дергал бы уже из него.
5 авг 16, 13:23    [19505182]     Ответить | Цитировать Сообщить модератору
 Re: Протоколы двухфазных транзакций для разнородных систем(ЕГАИС,DB,ККМ).  [new]
x1ca4064
Member

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

IMHO, проблема не в том, откуда "дергать", а в том, чтобы получить уверенность - операция прошла успешно или не прошла совсем.
5 авг 16, 13:53    [19505422]     Ответить | Цитировать Сообщить модератору
 Re: Протоколы двухфазных транзакций для разнородных систем(ЕГАИС,DB,ККМ).  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 1144
ну это уже от конкретных систем зависит и от обработчика ошибок который напишешь
5 авг 16, 14:56    [19505947]     Ответить | Цитировать Сообщить модератору
 Re: Протоколы двухфазных транзакций для разнородных систем(ЕГАИС,DB,ККМ).  [new]
МуМу
Member

Откуда:
Сообщений: 1134
В принципе к минимизации подобных ошибок будем двигаться. Даже методологии будем писать(для разработчиков). К УТМ-у свои требования ведь не предъявишь. Создание джобов - где можно компенсирующих(в будущем), тотальное логирование(в том числе все запросы к ЕГАИС), методологии для программистов знающих что такое транзакционная среда но не знающая что есть и другие системы. А я вообще в этой теме случайно оказался:)
5 авг 16, 23:48    [19508609]     Ответить | Цитировать Сообщить модератору
 Re: Протоколы двухфазных транзакций для разнородных систем(ЕГАИС,DB,ККМ).  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51257
x1ca4064
проблема не в том, откуда "дергать", а в том, чтобы получить уверенность - операция прошла успешно или не прошла совсем.

Это делается так:
1. Проводишь первую фазу коммита там, где такое умеют.
2. Проводишь операцию там, где двухфазный коммит не умеют, считая её атомарной.
3. Проводишь вторую фазу коммита.

В случае ошибки на каком-либо этапе откатываешь всё. Проблемой остаётся только сверить состояние систем при обломе второй фазы коммита.
6 авг 16, 14:06    [19509573]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить