#cadence-workflow #temporal-workflow
#частота-workflow #темпоральный рабочий процесс
Вопрос:
Я пытаюсь понять варианты использования дочернего рабочего процесса с темпоральной / убер-частотой. В чем преимущество дочернего рабочего процесса по сравнению с простым разделением вашего рабочего процесса на функции? У меня довольно сложный рабочий процесс, который я рассматриваю для разделения на несколько дочерних рабочих процессов, но я не уверен в плюсах / минусах этого.
Ответ №1:
- Дочерний рабочий процесс может быть размещен отдельным набором рабочих процессов, которые не содержат кода родительского рабочего процесса. Таким образом, он будет действовать как отдельная служба, которая может быть вызвана из множества других рабочих процессов.
- Один рабочий процесс имеет ограниченный размер. Например, он не может выполнить 100 тыс. действий. Дочерние рабочие процессы можно использовать для разделения проблемы на более мелкие фрагменты. Один родитель с 1000 дочерними элементами, каждый из которых выполняет 1000 действий, дает 1 миллион выполненных действий.
- Дочерний рабочий процесс можно использовать для управления некоторым ресурсом, используя его идентификатор, чтобы гарантировать уникальность. Например, рабочий процесс, который управляет обновлениями хоста, может иметь дочерний рабочий процесс для каждого хоста (имя хоста является идентификатором рабочего процесса) и использовать их для обеспечения сериализации всех операций на хосте.
- Дочерний рабочий процесс можно использовать для выполнения некоторой периодической логики без увеличения размера родительской истории. Родитель запускает дочерний процесс, который выполняет периодический логический вызов continue as new столько раз, сколько необходимо, затем завершает. С родительской точки зрения, если посмотреть, это всего лишь один вызов дочернего рабочего процесса.
Основным ограничением дочернего рабочего процесса по сравнению с размещением всей логики приложения в одном рабочем процессе является отсутствие общего состояния. Родитель и потомок могут взаимодействовать только с помощью асинхронных сигналов. Но если между ними существует тесная связь, возможно, было бы проще использовать один рабочий процесс и просто полагаться на общее состояние объекта.
Я лично рекомендую начинать с реализации одного рабочего процесса, если ваша проблема имеет ограниченный размер с точки зрения количества выполняемых действий и обработанных сигналов. Это просто проще, чем несколько асинхронно взаимодействующих рабочих процессов.
Также часто наблюдается, что рабочие процессы — это не просто функции, в них можно использовать всю мощь OO. Используйте структуры, интерфейсы и другие методы OO, чтобы разбить логику на более управляемые абстракции.