Должны ли действия Uber Cadence быть частью реализации сервисов? - PullRequest
1 голос
/ 03 июня 2019

У меня есть вопрос о «наилучшей практике» для осуществления деятельности в каденции.Когда действия рабочего процесса охватывают разные сервисы, обычно ли действия реализуются как часть самих сервисов, или более распространено разделение действий и использование API сервисов для взаимодействия со службами?

1 Ответ

1 голос
/ 03 июня 2019

Причины для встраивания действий непосредственно в отдельную службу:

  • Длительные операции : не существует стандартного и чистого способа реализации длительной операции в службе RPC.,Если для выполнения какого-либо действия может потребоваться несколько минут или более, обычно ожидается, что оно будет пульсировать, чтобы обеспечить своевременное время ожидания.Клиентская библиотека Cadence напрямую поддерживает сердцебиение.
  • Управление потоком : в рабочей конфигурации Cadence указывается максимальная скорость потребления и максимальное количество операций, обрабатываемых одновременно.Работник Cadence по сути является потребителем очереди, который получает новые задачи активности только тогда, когда у него есть возможность работать с ними в соответствии с конфигурацией.Когда активность вызывает удаленную службу, управление потоком данных теряется.При перегрузке удаленный сервис может только отклонить запрос.Операция Cadence поддерживает экспоненциальную повторную попытку в этом случае, но использование отказов и повторных попыток управления потоком явно является худшим решением.

В некоторых случаях встраивание невозможно:

  • Вызов внешних служб : часто рабочий процесс должен зависеть от существующих служб, которые не могут встраивать операции Cadence.В этом случае действие, вызывающее внешнюю службу, является единственным вариантом.Для управления потоком убедитесь, что вы указали политику экспоненциального повтора (включая список ошибок, которые не подлежат повторению) при выполнении действия.Для длительных операций смоделируйте вызов как два действия.Первый вызывает API start независимо от , а второй запрашивает результат в цикле внутри функции Activity.Операция PollForResult должна отправлять сердцебиение обратно в службу Cadence, чтобы убедиться, что она повторяется, если рабочий, на котором она работает, выходит из строя.
  • Неподдерживаемый язык программирования : Если у вас естьреализовать действие на языке, в котором по-прежнему отсутствует соответствующая клиентская библиотека Cadence, а затем часто предоставлять эту функцию как службу.
...