Должны ли действия Uber Cadence быть частью реализации сервисов?
У меня есть вопрос о "наилучшей практике" для осуществления деятельности в каденции. Когда действия рабочего процесса охватывают разные сервисы, обычно ли действия реализуются как часть самих сервисов, или более распространено разделение действий и использование API сервисов для взаимодействия со сервисами?
1 ответ
Решение
Причины встраивания деятельности непосредственно в отдельный сервис:
- Длительные операции. Не существует стандартного и чистого способа реализации длительной операции в службе RPC. Если для выполнения какого-либо действия может потребоваться несколько минут или более, обычно ожидается, что оно будет пульсировать, чтобы обеспечить своевременный тайм-аут. Клиентская библиотека Cadence напрямую поддерживает сердцебиение.
- Управление потоком: рабочая конфигурация Cadence определяет максимальный уровень потребления и максимальное количество действий, обрабатываемых одновременно. Работник Cadence по сути является потребителем очереди, который получает новые задачи активности только тогда, когда у него есть возможность работать с ними в соответствии с конфигурацией. Когда активность вызывает удаленную службу, управление потоком данных теряется. При перегрузке удаленный сервис может только отклонить запрос. Операция Cadence действительно поддерживает экспоненциальную повторную попытку в этом случае, но использование отказов и повторных попыток управления потоком является явно худшим решением.
Бывают случаи, когда встраивание невозможно:
- Вызов внешних служб. Часто рабочий процесс должен зависеть от существующих служб, которые не могут встраивать операции Cadence. В этом случае действие, вызывающее внешнюю службу, является единственным вариантом. Для управления потоком убедитесь, что вы указали политику экспоненциального повтора (включая список ошибок, которые не подлежат повторению) при выполнении действия. Для длительных операций смоделируйте вызов как два действия. Первый вызывает запуск любого API, а второй опрашивает результат в цикле внутри функции Activity. Операция PollForResult должна отправить запрос в службу Cadence, чтобы убедиться, что она повторяется, если рабочий, на котором она размещена, выходит из строя.
- Неподдерживаемый язык программирования: если вам нужно реализовать действие на языке, который все еще не имеет соответствующей клиентской библиотеки Cadence, то использование этой функции в качестве службы часто является самым простым вариантом.