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


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

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

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

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

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

Обзор

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

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

Примечание.

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

На следующей схеме показаны все три способа интеграции.

              Как интегрируются Функции Azure и Azure Cosmos DB

Триггер, входные и выходные привязки Azure Functions для 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 Functions и привязка вывода для базы данных Azure Cosmos DB.

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

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

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

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

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

Нативная интеграция между Azure Cosmos DB и Azure Functions доступна на портале 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, чтобы справиться с нагрузкой. Все функции могут работать параллельно, используя выделенное количество единиц запроса в секунду, при этом согласованность данных гарантируется.

  • Глобальная репликация. Можно выполнять репликацию данных 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" по-настоящему: