|
Как лучше организовать отказоустойчивость цепочки создания документов | ☑ | ||
---|---|---|---|---|
0
Ymryn
17.06.14
✎
14:12
|
Мое почтение. Надеюсь, что не сильно корявое название темы дал. Описание ситуации. Есть обработка, результатом выполнения которой служит создание и проведение нескольких документов (следующий на основании предыдущего). Такая мифическая: "Сделать хорошо". Собственно обратная сторона - если она где-то споткнулась, то это беда. Поэтому стоит вопрос обеспечения отказоустойчивости, чтобы конфликты транзакций или отключения питания не приводили систему в ступор. Пока вижу два решения:
1) Весь код по созданию и проведению документов загонять в единую транзакцию 2) Делать статусы и менять статус по мере отработки каждого вида документа, и как следствие учить обработку продолжать работу адекватно с любого статуса. Сейчас склоняюсь больше к первому варианту, но хотелось бы услышать мнение более умных людей о том, как лучше решать подобную проблему. (На тему посмотри как делает типовая: типовая поступает правильно и не делает цепочку документов, ну или я не смог найти подобного примера :( ) |
|||
1
Maxus43
17.06.14
✎
14:14
|
1. Транзакция.
Для этого и придумана, не вижу смысла изобретать что-то новое, если тем более нет промежутка во времени между созданием документов, сразу вся цепочка. Если есть промежутки - тут можно бизнесс-процесс замутить какой-нибудь |
|||
2
Ymryn
17.06.14
✎
14:18
|
(1) Меня напрягают лишние блокировки на регистры, которые возникают. Ибо если я правильно понимаю, то первый документ будет держать все свои регистры до тех пор пока не проведется последний и не зафиксируется транзакция. Конечно это не будет длительное время висеть, но все же.
|
|||
3
H A D G E H O G s
17.06.14
✎
14:20
|
В данной транзакции уже происходили ошибки...
|
|||
4
vde69
модератор
17.06.14
✎
14:20
|
если важна цепочка документов - то Вам к "последовательностям"
то есть 1. обработка "все хорошо" в одной транзакции 2. все документы регистрируем в новой последовательности 3. делаем регламент востановления последовательности для корректной обработки измений задним числом 4. делаем регламент оповещения по почте "все плохо", в случае если неактуальная последовательность не востанавливалась более Х часов |
|||
5
shuhard
17.06.14
✎
14:26
|
(0) или стоит отказаться от всех документов и заменить их одним - корректировкой записей Рг
поскольку ни что не помешает пользователям в дальнейшем разорвать столь любовно установленную между ними связь |
|||
6
Ymryn
17.06.14
✎
14:26
|
(4) честно признаюсь, не совсем понял зачем в моем случае последовательности, если мы уже все запихнули в транзакцию. По крайней мере ручное исправление документов не предусматривается и пользователь вообще в идеале не знает об их существовании. А обработка при необходимости может повторно отработать корректировки и перестроить все документы с нуля, ибо документы связаны по основанию и с верхушки все дерево раскручивается без проблем. Поправьте меня, пожалуйста, если я что-то упустил и последовательность добавляет надежности в описанной выше ситуации.
|
|||
7
Ymryn
17.06.14
✎
14:30
|
(5) сможет. Но защита от вандализма пользователей - это отдельная песня, в данном случае я не пытаюсь решить подобную проблему. Цель, чтобы обработка сама по себе выдерживала пользователя, который не умеет читать сообщения, а не загоняла себя в состояние, когда без помощи специалиста и лома её к жизни не вернуть.
|
|||
8
Ymryn
17.06.14
✎
14:31
|
(7) *и не загоняла себя
|
|||
9
Fish
17.06.14
✎
14:33
|
(7) Автоматически создаваемые цепочки документов - это зло. Если можно обойтись без этого - то лучше обойтись, и делать всё одним документом.
|
|||
10
Ymryn
17.06.14
✎
14:38
|
(9) Не спорю и даже полностью согласен, что цепочки - это зло. Ибо уже сталкивался с их реализациями и успел наплеваться. Но я пока не уверен, что написать свой документ, заменяющий цепочку из 3х типовых - это оправданно. Особенно с учетом, что есть желание сохранить поддержку конфигурации.
|
|||
11
Maxus43
17.06.14
✎
14:42
|
(2) делай, не боись. блокируются не полностью регистры, а только их записи по регистратору (в зависимости от режима блокировок конечно и если SQL)
|
|||
12
Ymryn
17.06.14
✎
14:50
|
Спасибо всем большое.
|
|||
13
vde69
модератор
17.06.14
✎
15:16
|
если на стене висит ружье, значит оно выстрелет....
варианта два для получения отказоустойчивости 1. делаешь Один документ с разными статусами и всю логику обработки вносишь внутрь документа 2. делаешь несколько документов и к ним последовательность с механизмом контроля все остальные варианты точно не отказоустойчивые... даже вариант с блокировкой периода/документов и то не является надежным... |
|||
14
vhl
17.06.14
✎
15:19
|
(13) 3. Пишешь все в одной транзацкции и не паришься со статусами и последовательностями
|
|||
15
vde69
модератор
17.06.14
✎
16:48
|
(14) а потом приходит студент из франя и тупо лезет в заднее число и правит пару доков :)
делать нужно так, что-бы после твоего увольнения это работало без лишних вопросов |
|||
16
vhl
17.06.14
✎
16:51
|
(15) Зависит от задачи. Если задача просто создать документы в определенной последовательности, то не нужно ничего городить. А если важно влияние в учете одних документов на другие, то да.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |