Согласитесь с @ Peter, вот мое понимание ссылок, поправьте меня, если это не имеет смысла.
Информация, связанная с механизмом запуска BLOB-объектов, хранится в учетной записи хранения Azure для нашего приложения Function (определяетсянастройка приложения AzureWebJobsStorage
).Блокировки находятся в контейнере BLOB-объектов с именем azure-webjobs-hosts
, и есть очередь azure-webjobs-blobtrigger-<FunctionAppName>
для внутреннего использования.
См. Другую часть в том же комментарии .
Обычно только 1 из N экземпляров хоста сканирует новые большие двоичные объекты (на основе одноэлементной блокировки идентификатора хоста).Когда он находит новый BLOB-объект, он добавляет к нему сообщение очереди, и один из N хостов обрабатывает его.
Итак, на первом этапе - поиск новых BLOB-объектов, функция масштабирования не участвует.,Блокировка идентификатора одноэлементного хоста реализована с помощью аренды BLOB-объектов, как упоминалось в @Peter (проверьте BLOB-объект locks/<FunctoinAppName>/host
в azure-webjobs-hosts
).
Как только внутренняя очередь начинает получать сообщения новых больших двоичных объектов, функция масштабирования начинает работать, когда экземпляры хоста извлекают и обрабатывают сообщения вместе.Когда обрабатывается BLOB-сообщение, оно не может быть просмотрено другими экземплярами и будет удалено позже.
Кроме того, чтобы гарантировать, что обработанный BLOB-объект никогда не запускает функцию позже (например, при следующем цикле сканирования), еще один механизм BLOB-квитанции .