Делятся ли функции Azure контекстом между запущенными экземплярами?

Я работаю над одним проектом на основе функций Azure, и у меня есть один статический вспомогательный класс с буфером (частный статический ConcurrentDictionary), который содержит некоторый список элементов, подлежащих обработке в конце выполнения, вопрос в том, будет ли этот буфер общим между несколькими запущенными экземплярами?


person Ivan Sukhetskyi    schedule 10.05.2018    source источник


Ответы (2)


Это зависит.

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

Если ваше приложение-функция получает слишком много запросов для обработки в одном экземпляре, будет создан второй экземпляр, который не будет делиться ничем с первым экземпляром. Итак, в этом сценарии у вас будет 2 (и 3, 4, N, если нужно) словарей.

Любой из этих экземпляров также может исчезнуть в любой момент времени, поэтому вы не можете надежно хранить что-либо в словаре между выполнениями. Вы можете сделать это с «максимальными усилиями», например. для кэширования данных.

person Mikhail Shilkov    schedule 10.05.2018

Функции Azure не обязательно выполняются на одном и том же компьютере каждый раз, когда они вызываются, а это означает, что общая память будет изменчивой, поскольку в будущем вызов может произойти на совершенно новом компьютере.

В идеале проектируйте вещи так, чтобы они не сохраняли состояние, и используйте технологию, более подходящую для постановки задач в очередь на потом, например очередь Azure.

Если вам необходимо сохранить некоторое состояние, поместите его в более постоянное место, например в каталог %HOME% или в хранилище.

person Fenton    schedule 10.05.2018