Несколько надежных функций в одном функциональном приложении

#azure-functions #azure-durable-functions

#azure-функции #azure-durable-функции

Вопрос:

Возможно ли разместить несколько надежных функций в одном функциональном приложении? Как мы можем указать другое имя центра задач для каждой надежной функции?

Комментарии:

1. Да, в одном функциональном приложении можно разместить несколько надежных функций. Есть ли какая-либо конкретная необходимость указать, чтобы иметь разные центры задач для каждой надежной функции?

2. Если одна надежная функция имеет большую нагрузку, чем другая, я предполагаю, что на производительность более легкой функции может повлиять количество исторических строк, создаваемых более тяжелой функцией. Также для устранения неполадок, я думаю, будет проще просматривать каждую историю отдельно. Однако я не нашел способа указать концентратор задач для другого оркестратора

3. Я не использовал это, но могу попробовать определить task hub в DurableClient атрибуте типа — [DurableClient(TaskHub = "%MyTaskHub%")] . где %..% искать значение в настройках приложения

4. да, я пробовал это, но это не работает

Ответ №1:

Нет, не пытайтесь размещать более одной надежной функции в одном функциональном приложении. По сути, надежные функции используют ресурсы хранилища для оркестровки. Вы автоматически управляете этими очередями и таблицами хранилища, и они существуют в учетной записи хранилища. Пока все просто.

Если несколько надежных функций должны использовать одну и ту же учетную запись хранилища, для каждой из них требуется свой собственный набор ресурсов хранилища, поэтому среда выполнения использует «имя центра задач» для определения, какие ресурсы хранилища использовать для каждой надежной функции.

Если две надежные функции используют одни и те же ресурсы хранилища, произойдут странные вещи, и ни одна из ваших функций не будет работать. Среда выполнения будет маршрутизировать триггерные события для любой функции, по-видимому, случайным образом, оставляя большинство оркестровок в состоянии ожидания или выполнения и никогда не завершая.

Имя концентратора задач по умолчанию основано на имени функционального приложения, но его можно переопределить в файле host.json

 {
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "hubName": "CustomTaskHubName"
    }
  }
}
 

Вот в чем проблема: у функционального приложения может быть настроено только одно имя узла задачи, что означает, что каждая надежная функция должна размещаться в своем собственном функциональном приложении с собственным конвейером развертывания и, возможно, собственным репозиторием кода и т. Д., В зависимости от ваших настроек.

Кроме того, в атрибуте DurableClient есть свойство TaskHub, которое предполагает, что у вас может быть несколько имен концентраторов задач в одном приложении. Однако документация в этом отношении неясна, и я не смог заставить ее работать после множества попыток. Из того, что я могу сказать, это исключительно для извлечения конфигурации из настроек приложений, чтобы упростить изменение имени центра задач в средах разработки, тестирования и производства. Было бы здорово, если бы я ошибался в этом.

Ответ №2:

Добавление к ответу Дэниела Дайсона:

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

Согласно документам Microsoft, в одном функциональном приложении может быть несколько надежных функций, если вы убедитесь, что имена концентраторов задач разные.

Источник: https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-task-hubs?tabs=csharp