Должны ли Uber Cadence быть частью внедрения услуг?

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


person Tobias Furuholm    schedule 03.06.2019    source источник


Ответы (1)


Причины для встраивания активностей непосредственно в отдельный сервис:

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

Бывают случаи, когда встраивание невозможно:

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