Создание бессерверных приложений с помощью функций Azure и решений .NET

Опубликовано: 2023-09-21

Создание бессерверных приложений с помощью функций Azure и решений .NET

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

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

Что такое функции Azure?

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

Некоторые ключевые аспекты и преимущества функций Azure:

  • Управляемый событиями: функции запускаются событиями от многих служб Azure и сторонних поставщиков. К ним относятся HTTP-запросы, таймеры, очереди, бессерверные API и многое другое. Вы можете запустить код в ответ на эти события.
  • Автоматическое масштабирование. Azure автоматически управляет функциями и масштабирует их в зависимости от частоты входящих запросов и нагрузки на обработку. Вам не нужно подготавливать и масштабировать серверы вручную.
  • Оплата за выполнение: вы платите только за вычислительные ресурсы, необходимые для запуска вашего кода. Когда ваши функции не выполняются, плата за простой не взимается.
  • Несколько языков: Функции поддерживают C#, JavaScript, Python, PowerShell, Java и другие. Вы можете разрабатывать функции на предпочитаемом вами языке.
  • Бессерверная работа. Используя Функции, вы сосредоточиваетесь на написании кода и позволяете Azure выполнять всю подготовку, настройку и управление сервером. Вы получаете настоящий бессерверный опыт.

Разработка функций .NET локально

Для локальной разработки функций .NET вам потребуются основные инструменты Azure Functions, которые представляют собой интерфейс командной строки для разработки, тестирования и развертывания функций Azure как локально, так и в Azure.

Чтобы настроить среду разработки:

  1. Установите последнюю версию .NET Core SDK.
  2. Установите основные инструменты функций Azure с помощью инструмента dotnet install -g Microsoft.Azure.WebJobs.Script.WebHost.
  3. Создайте каталог для проекта приложения функций и запустите func init.
  4. Это создаст пример проекта функций с шаблоном функции.

Теперь вы можете добавить код функции, протестировать его локально и опубликовать в Azure с помощью интерфейса командной строки func. Добавьте файл run.csx для функции C#, запускаемой HTTP:

Источник

Копировать

#r «Newtonsoft.Json»

использование Microsoft.AspNetCore.Mvc;

использование Microsoft.Extensions.Primitives;

использование Newtonsoft.Json;

использование System.Net;

использование System.Threading.Tasks;

общедоступная статическая асинхронная задача <IActionResult> Run (запрос HttpRequest, журнал ILogger)

{

log.LogInformation("Триггерная функция HTTP C# обработала запрос.");

имя строки = req.Query[“имя”];

строка requestBody = ожидайте нового StreamReader(req.Body).ReadToEndAsync();

динамические данные = JsonConvert.DeserializeObject(requestBody);

имя = имя ?? данные?.имя;

вернуть имя!= ноль

? (ActionResult)new OkObjectResult($”Привет, {имя}”)

: new BadRequestObjectResult(“Пожалуйста, передайте имя в строке запроса или в теле запроса”);

}

Проверьте это локально, запустив func host start, который запускает шлюз функций на вашем локальном хосте. Теперь вы можете запустить его с помощью Postman или браузера с http://localhost:7071/api/HttpExample?name=John.

Выбор триггеров и привязок Функций Azure

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

Некоторые распространенные триггеры в функциях:

  • HTTP-триггер: для создания REST API и конечных веб-точек. Код запускается HTTP-запросами.
  • Триггер по таймеру: для запланированных заданий, которые выполняются по расписанию, например, каждые 5 минут.
  • Триггер очереди: для обработки сообщений из очередей хранилища.
  • Триггер BLOB-объектов: для реагирования на новые или обновленные BLOB-объекты в хранилище BLOB-объектов Azure.

Привязки позволяют функциям взаимодействовать с внешними хранилищами данных и сервисами. Общие привязки включают в себя:

  • Очередь хранения: для вывода сообщений в очереди хранения.
  • Хранилище BLOB-объектов: для чтения и записи в хранилище BLOB-объектов Azure.
  • Cosmos DB: для запроса и изменения документов в службе базы данных Azure Cosmos DB.
  • Служебная шина: для обработки сообщений из очередей и тем Azure Service Bus.

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

Использование устойчивых функций

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

Например, вы можете построить рабочий процесс с помощью устойчивых функций, который состоит из:

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

Преимущества использования устойчивых функций включают в себя:

  • Надежные повторные попытки: Durable Functions автоматически повторяет функции действий в случае сбоя.
  • Асинхронные вызовы. Функция оркестратора может асинхронно запускать функции действий и ожидать их завершения.
  • Контрольные точки: состояние постоянно проверяется, поэтому рабочие процессы можно восстановить даже после перезапуска или сбоя приложения.

Давайте рассмотрим простой рабочий процесс, который организует два действия:

Источник

Копировать

[ИмяФункции("Оркестратор")]

общедоступная статическая асинхронная задача RunOrchestrator(

[OrchestrationTrigger] контекст IDurableOrchestrationContext)

{

var output1 = await context.CallActivityAsync<string>(“DotNetActivity”, “Hello”);

var output2 = await context.CallActivityAsync<string>(“DotNetActivity”, output1);

// возвращаем результат

вернуть вывод2;

}

[ИмяФункции("DotNetActivity")]

public static Task<string> Run(

Строковый ввод [ActivityTrigger],

журнал ILogger)

{

log.LogInformation($”Функция DotNetActivity обработана: {input}”);

return Task.FromResult(input.ToUpper());

}

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

Рекомендации по разработке функций Azure

Некоторые рекомендации, которым следует следовать при разработке функций Azure:

  • Используйте внедрение зависимостей. Внедряйте службы зависимостей в функции для улучшения тестируемости.
  • Избегайте длительных процессов: функции предназначены для запуска кода на небольших процессорах. Делайте выполнение кода коротким.
  • Используйте неизменяемые типы данных: функции не имеют состояния, поэтому избегайте изменяемых типов и побочных эффектов, которые могут вызвать проблемы.
  • Централизованная обработка ошибок: добавьте общую логику обработки ошибок, а не обрабатывайте ошибки повсюду индивидуально.
  • Структурированное ведение журнала. Стандартизированное ведение журнала помогает при отладке, мониторинге и аудите.
  • Регулирование и повторные попытки. Обрабатывайте ошибки регулирования, реализуя повторные попытки с экспоненциальной задержкой.
  • Управление версиями: строгие триггеры версий, привязки и входы/выходы, чтобы избежать нарушения изменений.
  • Мониторинг и инструментирование. Используйте такие инструменты, как Application Insights, для ведения журналов, мониторинга производительности и анализа использования.
  • Используйте привязки контекста. Используйте привязки контекста для доступа к таким вещам, как настройки приложения, без дополнительных зависимостей.

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

Развертывание функций в Azure

Когда функции будут готовы, вы можете развернуть их в Azure через Azure CLI, PowerShell, Visual Studio или непосредственно из интерфейса командной строки основных инструментов функций Azure:

Копировать

func azure functionapp опубликовать <имя-приложения-функции>

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

  • Автоматическое масштабирование — функции масштабируются в зависимости от объема входящих запросов или временных триггеров.
  • Высокая доступность. Несколько экземпляров в центрах обработки данных обеспечивают высокую доступность.
  • Мониторинг и ведение журнала. Используйте такие инструменты, как Application Insights, для мониторинга производительности, ошибок и т. д.
  • Бессерверная платформа – нет серверов для предоставления/управления. Вы просто сосредотачиваетесь на коде.
  • Непрерывное развертывание. Используйте конвейеры CI/CD для автоматического развертывания при изменении кода.

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

Заключение

Бессерверные вычисления с функциями Azure позволяют разработчикам сосредоточиться на бизнес-логике, переложив всю инфраструктуру и управление операциями на Azure. Встроенная поддержка разработки .NET, включая возможность найма разработчиков ядра ASP.NET , позволяет с легкостью создавать надежные бессерверные решения на C#. С помощью триггеров, привязок и устойчивых функций разработчики могут создавать комплексные управляемые событиями архитектуры и рабочие процессы в виде функций без отслеживания и с сохранением состояния. В сочетании с лучшими практиками функции Azure позволяют создавать и развертывать бессерверные приложения в облаке с легкостью и масштабируемостью.