Поделиться через


Бессерверные вычисления баз данных с помощью Azure Cosmos DB и Функций Azure

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

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

Функции Azure могут создавать изолированные подключения к базам данных для каждого вызова, если программный клиент базы данных не управляется должным образом, что может повлиять на производительность подключений при высокой нагрузке, особенно в тарифном плане Consumption. Однако при использовании привязок или триггеров Cosmos DB функции Azure внутренне используют общий клиент пакета SDK Cosmos DB, обеспечивая эффективное объединение подключений в нескольких вызовах. Azure Cosmos DB поддерживает как режимы подключения на основе HTTP, так и на основе TCP. Эта архитектура поддерживает масштабируемые и высокопроизводительные рабочие нагрузки, требующие динамического доступа к данным.

Обзор

Функции Azure Cosmos DB и Azure позволяют интегрировать базы данных и бессерверные приложения следующим образом:

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

Замечание

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

На следующей схеме показана каждая из этих трех интеграции:

Интеграция Azure Cosmos DB и Функций Azure

Триггер функций Azure, входная привязка и выходная привязка для Azure Cosmos DB можно использовать в следующих сочетаниях:

  • Триггер функций Azure для Azure Cosmos DB можно использовать с выходной привязкой к другому контейнеру Azure Cosmos DB. После того как функция выполняет действие над элементом в канале изменений, его можно записать в другой контейнер (запись в тот же контейнер, из который он был получен, будет эффективно создавать рекурсивный цикл). Кроме того, можно использовать триггер Функций Azure для Azure Cosmos DB для эффективной миграции всех измененных элементов из одного контейнера в другой контейнер с использованием выходной привязки.
  • Входные привязки и выходные привязки для Azure Cosmos DB можно использовать в той же функции Azure. Это хорошо работает в случаях, когда вы хотите найти определенные данные с входной привязкой, изменить его в функции Azure, а затем сохранить его в одном контейнере или другом контейнере после изменения.
  • Входная привязка к контейнеру Azure Cosmos DB может использоваться в той же функции, что и триггер Функций Azure для Azure Cosmos DB, и может использоваться с выходной привязкой или без нее. Это сочетание можно использовать для применения актуальной информации о обмене валют (извлекаемой с входной привязкой к контейнеру обмена) к каналу передачи изменений новых заказов в сервисе корзины покупок. Обновленный объем корзины покупок с примененным текущим преобразованием валюты можно записать в третий контейнер с помощью выходной привязки.

Случаи использования

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

Вариант использования Интернета вещей — триггер функций Azure и выходная привязка для Azure Cosmos DB

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

Реализация: Использование триггера Функций Azure и выходной привязки для Azure Cosmos DB

  1. Триггер функций Azure для Azure Cosmos DB используется для активации событий, связанных с оповещениями об автомобилях, таких как включение индикатора проверки двигателя в подключенном автомобиле.
  2. Когда загорается индикатор Check Engine, данные датчика отправляются в Azure Cosmos DB.
  3. Azure Cosmos DB создает или обновляет новые документы данных датчика, а затем эти изменения передаются в триггер Функций Azure для Azure Cosmos DB.
  4. Триггер вызывается при каждом изменении данных для сбора данных датчиков, поскольку все изменения передаются через канал изменений.
  5. Пороговое условие используется в функции для отправки данных датчика в отдел гарантии.
  6. Если температура также превышает определенное значение, оповещение также отправляется владельцу.
  7. Выходная привязка функции обновляет запись автомобиля в другом контейнере Azure Cosmos DB для хранения сведений о событии обработчика проверки.

На следующем рисунке показан код, написанный на портале Azure для этого триггера.

Создание триггера Функций Azure для Azure Cosmos DB на портале Azure

Вариант использования финансовых средств — триггер таймера и входная привязка

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

Реализация: триггер таймера с входной привязкой Azure Cosmos DB

  1. С помощью триггера таймера можно получить сведения о балансе банковского счета, хранящиеся в контейнере Azure Cosmos DB с интервалами времени с помощью входной привязки.
  2. Если баланс ниже порогового значения низкого баланса, заданного пользователем, выполните действия из функции Azure.
  3. Выходная привязка может быть интеграцией SendGrid , которая отправляет сообщение электронной почты из учетной записи службы на адреса электронной почты, определенные для каждой из учетных записей с низким балансом.

На следующих изображениях показан код на портале Azure для этого сценария.

Index.js файл триггера таймера для финансового сценария

Файл Run.csx для триггера таймера в финансовом сценарии

Сценарий использования в играх — триггер функций Azure и выходная привязка для Azure Cosmos DB

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

Реализация: Использование триггера Функций Azure и выходной привязки для Azure Cosmos DB

  1. Используя графовую базу данных Azure Cosmos DB для хранения всех пользователей, вы можете создать новую функцию с триггером Azure Functions для Azure Cosmos DB.
  2. При вставке нового пользователя вызывается функция, а затем результат сохраняется с помощью выходной привязки.
  3. Функция запрашивает базу данных графа для поиска всех пользователей, которые напрямую связаны с новым пользователем, и возвращает этот набор данных функции.
  4. Затем эти данные хранятся в Azure Cosmos DB, откуда их можно легко получить любым клиентским приложением, которое показывает новому пользователю его подключенных друзей.

Вариант использования розничной торговли — несколько функций

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

Реализация: Несколько триггеров функций Azure для Azure Cosmos DB, которые прослушивают один контейнер

  1. Вы можете создать несколько функций Azure, добавив триггеры функций Azure для Azure Cosmos DB, каждая из которых настроена на прослушивание одного и того же канала изменений данных корзины покупок. Если несколько функций прослушивают один и тот же поток изменений, для каждой функции требуется новая коллекция лизингов. Дополнительные сведения о коллекциях аренды см. в разделе "Общие сведения о библиотеке обработчика канала изменений".
  2. При каждом добавлении нового элемента в корзину покупок пользователей каждая функция вызывается независимо от канала изменений из контейнера корзины покупок.
    • Одна функция может использовать содержимое текущей корзины для изменения отображения других элементов, которые пользователь может заинтересовать.

    • Другая функция может обновить итоги инвентаризации.

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

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

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

Инструментальная оснастка

Встроенная интеграция между Azure Cosmos DB и Функциями Azure доступна на портале Azure и в Visual Studio.

Зачем выбирать интеграцию Функций Azure для бессерверных вычислений?

Функции Azure предоставляют возможность создавать масштабируемые единицы работы или краткие фрагменты логики, которые могут выполняться по запросу, без подготовки или управления инфраструктурой. Используя Функции Azure, вам не нужно создавать полнофункционное приложение для реагирования на изменения в базе данных Azure Cosmos DB, вы можете создавать небольшие повторно используемые функции для конкретных задач. Кроме того, вы также можете использовать данные Azure Cosmos DB в качестве входных или выходных данных в функцию Azure в ответ на событие, например HTTP-запросы или триггер времени.

Azure Cosmos DB — это рекомендуемая база данных для архитектуры бессерверных вычислений по следующим причинам:

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

  • Без схемы. Azure Cosmos DB — это база данных без схемы, поэтому она уникально способна обрабатывать любые выходные данные из функции Azure. Этот "способный справиться с чем угодно" подход упрощает создание различных функций, которые все выводят данные в Azure Cosmos DB.

  • Масштабируемая пропускная способность. Пропускная способность может увеличиваться и уменьшаться мгновенно в Azure Cosmos DB. Если у вас есть сотни или тысячи функций, выполняющих запросы и записывающих данные в один и тот же контейнер, вы можете увеличить RU/s для обработки нагрузки. Все функции могут работать параллельно, используя выделенные RU/с, и ваши данные гарантированно будут целостными.

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

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

Преимущества функций Azure:

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

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

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

Если вы не уверены, подходят ли Flow, Logic Apps, Функции Azure или WebJobs для вашей реализации, см. Выбор между Flow, Logic Apps, Functions и WebJobs.

Дальнейшие шаги

Теперь давайте подключим Azure Cosmos DB и Azure Functions для реального использования.