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

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

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

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

Обзор

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

  • Создайте управляемый событиями триггер Функции 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 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. Когда загорается индикатор проверки двигателя, данные датчика отправляются в 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 для Azure Cosmos DB.
  2. При вставке нового пользователя вызывается функция, результат которой сохраняется с помощью выходной привязки.
  3. Функция отправляет запрос к базе данных графа, чтобы найти всех пользователей, которые непосредственно связаны с новым пользователем, и получает этот набор данных.
  4. Затем эти данные сохраняются в Azure Cosmos DB, после чего их легко получить любое внешнее приложение, показывающее новому пользователю подключенных друзей.

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

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

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

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

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

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

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

Во всех этих вариантах использования функция отделена от приложения, поэтому постоянно запускать новые экземпляры приложения не нужно. Вместо этого служба "Функции 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 может масштабироваться мгновенно. Если у вас есть сотни или тысячи функций, которые отправляют запросы и записывают данные в один и тот же контейнер, можно увеличить число единиц запроса в секунду, чтобы справиться с нагрузкой. Все функции могут работать параллельно, используя выделенное количество единиц запроса в секунду, при этом согласованность данных гарантируется.

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

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

Преимущества службы "Функции Azure":

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

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

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

Если вы не уверены, что подойдет для вашей реализации: Flow, Logic Apps, служба "Функции Azure" или веб-задания, ознакомьтесь с разделом Сравнение Microsoft Flow, Logic Apps, функций и веб-заданий Azure.

Дальнейшие действия

Теперь можно подключить Azure Cosmos DB и службу "Функции Azure" по-настоящему: