Управление соединениями в функциях Azure для мультитенантных приложений - предотвращение ошибки: превышен порог хоста - PullRequest
1 голос
/ 12 марта 2019

Функции Azure выполняются в приложениях функций. В плане потребления функциональные приложения запускаются в изолированной программной среде веб-приложения Azure, что накладывает определенные ограничения на то, что разрешено делать коду функции. В частности, существует ограничение на количество подключений к внешним службам, которые приложение-функция может одновременно открывать. Максимальное количество подключений в настоящее время составляет 300. Это означает, что приложение-функция может иметь максимум 300 подключений HttpClient, CloadBlobClient, DocumentClient и SqlClient. Следовательно, код функции должен быть спроектирован таким образом, чтобы предотвратить открытие слишком большого количества соединений при поступлении запросов, в противном случае время выполнения функции вызовет такую ​​ошибку: «Превышен порог хоста». С другой стороны, мы не хотим восстанавливать дорогостоящие ресурсы, такие как соединения с базой данных, при каждом вызове функции.

Microsoft предлагает использовать статические переменные для соединений, чтобы уменьшить это ограничение: https://github.com/Azure/azure-functions-host/wiki/Managing-Connections Однако в типичном мультитенантном приложении разным арендаторам могут назначаться разные строки соединения для каждой службы. Например, мы используем каталог с записями для базы данных и строк подключения BLOB-объектов для каждого арендатора. Это означает, что использование единственной статической переменной для CloudBlobClient или одного SqlClient не будет вариантом для нашего случая. Мы думали о некоторых решениях. Например, мы можем создать круговой список из 300 статических переменных для хранения соединений. Но тогда это может создать дополнительные сложности и увеличить размер нашего времени выполнения.

Как бы вы решили эту проблему? Известны ли вам какие-либо решения для эффективной обработки соединений при использовании функций Azure в типичном мультитенантном приложении?

...