Size: a a a

1С, БСП, DevOps и Архитектура

2020 March 12

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
Количество мест, которые могут пойти не так таково, что лучше в это вообще не ввязываться и перейти в pub-sub с подтверждением, без операции "отката"
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
Т.е. pub операции и установка статусов. И даже такая схема довольно хрупкая. Дешевле пожертвовать надежностью и допустить, что иногда будет несогласованность
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
С какой то низкой, но не нулевой вероятностью
источник

A

Alexey Lab Sosnoviy in 1С, БСП, DevOps и Архитектура
Сагу уже обсуждали?
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Alexey Lab Sosnoviy
Сагу уже обсуждали?
Какую?
источник

AP

Aleksandr Ponkratov in 1С, БСП, DevOps и Архитектура
Anton Selin
Не пофиг. До тех пор, пока система А не приняла данные из системы Б, то система Б может эти данные менять у себя сколько хочет. Но как только система А получила из системы Б (уведомила её об этом) порцию данных, то внесение изменений системой Б в эти данные невозможны.
Если есть возможность добавить один метод в <Б>, то можно так:

1. Запрос в <Б> за порцией необработанных объектов
2. Обработка каждого объекта из списка
2.1  Запрос в <Б> для блокировки объекта и получения его данных
2.2 Обработка объекта в <А>
2.2.1 Открытие транзакции
2.2.2 Выполнение действий в системе <А>
2.2.3
Успешно: фиксация транзакции
Ошибка: отправка запроса в <Б> для снятия блокировкиотправка запроса в <Б> для снятия блокировки, отмена транзакции
источник

A

Alexey Lab Sosnoviy in 1С, БСП, DevOps и Архитектура
John Doe
Какую?
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Aleksandr Ponkratov
Если есть возможность добавить один метод в <Б>, то можно так:

1. Запрос в <Б> за порцией необработанных объектов
2. Обработка каждого объекта из списка
2.1  Запрос в <Б> для блокировки объекта и получения его данных
2.2 Обработка объекта в <А>
2.2.1 Открытие транзакции
2.2.2 Выполнение действий в системе <А>
2.2.3
Успешно: фиксация транзакции
Ошибка: отправка запроса в <Б> для снятия блокировкиотправка запроса в <Б> для снятия блокировки, отмена транзакции
В 2.2.3 маленький нюанс - приложение может упасть безвозвратно и ничего никуда уже не отправить
источник

AP

Aleksandr Ponkratov in 1С, БСП, DevOps и Архитектура
John Doe
В 2.2.3 маленький нюанс - приложение может упасть безвозвратно и ничего никуда уже не отправить
Согласен. 100% гарантию целостности дать не получится. Такие кейсы можно разбирать вручную вместе с причинами падения приложения
источник

AN

Alexey Novoselov in 1С, БСП, DevOps и Архитектура
Alexey Lab Sosnoviy
Сагу уже обсуждали?
про саги я в самом первом ответе написал, но похоже народ не сильно в курсе
источник

AS

Anton Selin in 1С, БСП, DevOps и Архитектура
Не в курсе
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Нормуль для ознакомления, а в 1С-то видел хоть раз такое?
источник

A

Alexey Lab Sosnoviy in 1С, БСП, DevOps и Архитектура
John Doe
Нормуль для ознакомления, а в 1С-то видел хоть раз такое?
Неа, пока только мечтаю.
источник

AN

Alexey Novoselov in 1С, БСП, DevOps и Архитектура
это как ра про то, что есть две идемпотентные операции ВыполнитьЗагрузку() и ОтменитьЗагрузку(), реализовать такое вполне возможно при необходимости.
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Alexey Novoselov
это как ра про то, что есть две идемпотентные операции ВыполнитьЗагрузку() и ОтменитьЗагрузку(), реализовать такое вполне возможно при необходимости.
В 1С даже чтоб увидеть асинхронность это лет 5 назад было вообще редкость, не говоря уж об идемпотентности
источник

AN

Alexey Novoselov in 1С, БСП, DevOps и Архитектура
ну хз, мы а УХе такое делали, правда там на регистрах сведений все, и никакие умные механизмы платформы, типа подсчета итогов, не испльзовались
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
Alexey Novoselov
про саги я в самом первом ответе написал, но похоже народ не сильно в курсе
Саги - это и есть альтернатива распределенным транзакциям.
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
Вернее, один из вариантов их реализации с определенными заранее допущениями
источник

AO

Andrey Ovsiankin in 1С, БСП, DevOps и Архитектура
А потом все сведется к логу транзакций в кафке и eventual consistency вместе с CQRS на пару. Но это уже не про 1С и вообще, такое делать - еще вопрос надо ли в каждом утюге )
источник

AS

Anton Selin in 1С, БСП, DevOps и Архитектура
Aleksandr Ponkratov
Если есть возможность добавить один метод в <Б>, то можно так:

1. Запрос в <Б> за порцией необработанных объектов
2. Обработка каждого объекта из списка
2.1  Запрос в <Б> для блокировки объекта и получения его данных
2.2 Обработка объекта в <А>
2.2.1 Открытие транзакции
2.2.2 Выполнение действий в системе <А>
2.2.3
Успешно: фиксация транзакции
Ошибка: отправка запроса в <Б> для снятия блокировкиотправка запроса в <Б> для снятия блокировки, отмена транзакции
Такой вариант выходит оптимальным... Допущения должны быть, иначе как сказал Андрей..выходит нечто, чего потом сам бояться будешь
источник