Масштабировать лазурную функцию через код C # - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в функциях Azure. Мне нужно написать код на C #, который масштабирует функции Azure на основе некоторых условий.

Например:
У меня всего 10 клиентов, для которых будет вызываться функция Azure. Но из этих 10 есть один клиент с высоким приоритетом . Если поступит какой-либо запрос функции для этого высокоприоритетного клиента, я хочу масштабировать свою функцию Azure и запустить этот запрос на новом экземпляре. Как только этот запрос будет выполнен, я хочу уничтожить этот масштабированный экземпляр. Таким образом, мой высокоприоритетный клиент получает полный серверный ресурс для использования.

Мои вопросы:

  1. Возможно ли то, что я хочу?
  2. Если да:
    Как?
    Каким должен быть код C # для масштабирования?
    Как переслать мой запрос в новый экземпляр?
    Как я могу уничтожить текущий масштабированный экземпляр?
  3. Если нет:
    Каким должен быть лучший способ уделять первоочередное внимание выбранным клиентам в Azure Function?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Это невозможно. Вы не можете напрямую влиять на алгоритм масштабирования функций Azure (в плане потребления).

Blob Trigger, в частности, имеет некоторые известные ограничения, описанные в документации . В частности, могут быть задержки в обработке BLOB-объектов.

Для более быстрого масштабирования я предлагаю вам использовать триггеры Event Grid, которые должны хорошо масштабироваться как для ваших «приоритетных», так и для «неприоритетных» клиентов. См. Образец изменения размера изображения .

0 голосов
/ 03 июля 2018

Прежде чем я попытаюсь дать ответ на ваши вопросы, я сначала хотел бы кое-что объяснить. Функции Azure могут выполняться двумя различными способами: в плане потребления и в плане обслуживания приложения. Чтобы вы могли в полной мере использовать функции (или фактически без сервера), вы должны запустить свои функции в плане потребления.

  • План потребления - Когда ваша функция выполняется, Azure предоставляет все необходимые вычислительные ресурсы. Вам не нужно беспокоиться об управлении ресурсами, и вы платите только за время выполнения кода.
  • План обслуживания приложения - Запустите свои функции, как в Интернете, на мобильных устройствах и в приложениях API. Если вы уже используете Службу приложений для других своих приложений, вы можете запускать свои функции на том же плане без дополнительных затрат.

и

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

О масштабировании:

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

Scaling Azure Functions

Более интересная информация о масштабировании: Масштаб функций Azure и хостинг

Учитывая ваши требования, моя идея заключается в том, чтобы использовать реальную силу функций, запустив их в Плане потребления. Если у вас высокоприоритетный клиент, предоставьте ему собственный экземпляр функции, который запускается собственным контейнером в хранилище BLOB-объектов (посмотрите на ссылку в комментарии @ Gonzo345). Это гарантирует, что он будет обработан, как только он поступит, и он будет нести расходы только в том случае, если для высокоприоритетного клиента появится триггер. Из-за идеи плана потребления он создаст экземпляр функции, запустит все необходимое для запуска и уничтожит экземпляр.

Между прочим: Триггеры Blob в конце являются триггерами опроса. Когда есть много движения, они довольно быстрые. Но когда ничего особенного не происходит, для изменения функции учетной записи хранения может потребоваться до нескольких минут. Если вы хотите обрабатывать события в реальном времени, взгляните на Сетка событий .

Теперь вернемся к вашим вопросам:

  1. Да, так и должно быть. Для требуется, чтобы ваше функциональное приложение работало в плане обслуживания приложений
  2. Посмотрите здесь: Отключите автоматическое масштабирование и вручную масштабируйте ваши экземпляры
  3. См. 2:)
...