Бессерверные приложения: Архитектура, шаблоны и реализация в Azure

Снимок экрана, на котором показана обложка электронной книги, посвященной бессерверным приложениям

ВЕРСИЯ 3.0 — обновлена Функции Azure версии 3

Можно загрузить по ссылке: https://aka.ms/serverlessbookpdf

ИЗДАТЕЛЬ

Подразделение Microsoft Developer Division, команды разработки .NET и Visual Studio

Подразделение корпорации Майкрософт

One Microsoft Way

Redmond, Washington 98052-6399

© Корпорация Майкрософт (Microsoft Corporation), 2018–2020

Все права защищены. Запрещается полное или частичное воспроизведение или передача настоящей книги в любом виде или любыми средствами без письменного разрешения издателя.

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

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

Microsoft и товарные знаки, перечисленные на странице "Товарные знаки" на сайте https://www.microsoft.com, являются товарными знаками группы компаний Майкрософт.

Mac и macOS являются товарными знаками Apple Inc.

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

Автор:

Джереми Ликнесс (Jeremy Likness) , старший руководитель программы по данным .NET, корпорация Майкрософт.

Участник:

Сесил Филлип (Cecil Phillip) , старший советник по облачной разработке, корпорация Майкрософт.

Редакторы:

Билл Вагнер (Bill Wagner) , старший разработчик содержимого, корпорация Майкрософт.

Майра Вензел (Maira Wenzel) , старший разработчик содержимого, корпорация Майкрософт.

Участники и рецензенты:

Стив Смит (Steve Smith) , владелец, Ardalis Services.

Вступление

Бессерверная архитектура — это следующий этап эволюции облачных платформ в направлении полностью облачного машинного кода. С бессерверной архитектурой разработчики оказываются ближе к бизнес-логике и при этом могут не беспокоиться об инфраструктуре. Этот шаблон подразумевает не отсутствие серверов, а меньшую зависимость от них. Бессерверный код управляется событиями. Код может запускаться чем угодно — от традиционных веб-запросов HTTP до таймера или результата передачи файла. Инфраструктуру в бессерверной архитектуре можно моментально масштабировать в зависимости от потребностей, и вы платите дискретно, только за то, что действительно используете. Бессерверная архитектура требует нового мышления и подхода к созданию приложений. Она не подходит для решения всех задач. Как разработчик, вы должны решить:

  • Каковы преимущества и недостатки бессерверной архитектуры?
  • Зачем вам нужна бессерверная архитектура для ваших приложений?
  • Как вы будете создавать, тестировать, развертывать и обслуживать бессерверный код?
  • Где в ваших приложениях имеет смысл перенести код в бессерверную архитектуру и как лучше всего осуществить это преобразование?

Об этом руководстве

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

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

Эволюция облачных платформ

Бессерверная архитектура — это кульминация нескольких этапов развития облачных платформ. Все началось с физического оборудования в центре обработки данных, а затем появились концепции инфраструктуры как услуги (IaaS) и платформы как услуги (PaaS).

Эволюция от локальной до бессерверной архитектуры

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

  • Какое оборудование установить?
  • Как ограничить физический доступ к компьютеру?
  • Требуется ли источник бесперебойного питания (ИБП) для центра обработки данных?
  • Куда отправляются резервные копии хранилища?
  • Там требуется резервное питание?

Список можно продолжать, а затраты были огромными. Во многих случаях ИТ-отделы мирились со значительными издержками. Издержки были связаны с выделением чрезмерного количества серверов и резервных компьютеров для аварийного восстановления и резервных серверов для горизонтального масштабирования. К счастью, с появлением технологии виртуализации (например, Hyper-V) и виртуальных машин возникла концепция инфраструктуры как услуги (IaaS). Виртуализованная инфраструктура позволяла использовать основу из стандартного набора серверов и гибкую среду с возможностью выделения серверов по требованию. Что еще важнее, виртуализация подготовила почву для использования облака, где можно было предоставлять виртуальные машины как услугу. Компании могли больше не волноваться за резервное питание или физические компьютеры. Вместо этого они сосредоточились на виртуальной среде.

IaaS по-прежнему требует высоких издержек, ведь компании все равно выполняют различные задачи. К таким задачам относятся следующие.

  • Исправление и резервное копирование серверов.
  • Установка пакетов.
  • Обновление операционной системы.
  • Мониторинг приложения.

На следующем этапе эволюции удалось сократить издержки с помощью платформы как услуги (PaaS). С PaaS поставщик облачных служб сам занимается операционными системами, исправлениями системы безопасности и даже пакетами, необходимыми для поддержки определенной платформы. Вместо того, чтобы создавать виртуальные машины, затем настраивать .NET и устанавливать серверы служб IIS, разработчики просто выбирают целевую платформу, например веб-приложение или конечную точку API, и развертывают код напрямую. Вопросов об инфраструктуре стало меньше:

  • Службы какого размера нам нужны?
  • Как выполнять горизонтальное масштабирование служб (добавлять больше серверов или узлов)?
  • Как увеличить масштаб служб (увеличить емкость размещения серверов или узлов)?

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

  • Что активирует код?
  • Что делает код?

Для бессерверного кода инфраструктура не так важна. В некоторых случаях разработчик вообще больше не думает о размещении. Веб-запросами может управлять экземпляр IIS, Kestrel, Apache или другой веб-сервер, разработчик занимается только триггером HTTP. Триггер предоставляет стандартные кроссплатформенные полезные данные для запроса. Полезные данные упрощают не только процесс разработки, но и тестирование, а в некоторых случаях код можно легко переносить между платформами.

Другая особенность бессерверной архитектуры — это дискретное выставление счетов. Довольно часто веб-приложения размещают конечные точки веб-API. В традиционных архитектурах без операционной системы, реализациях IaaS и даже PaaS ресурсы для размещения API-интерфейсов оплачиваются постоянно. Вы платите за размещение конечных точек, даже если не пользуетесь ими. Обычно один API вызывается чаще других, поэтому вся система масштабируется с целью поддержки популярных конечных точек. В бессерверной архитектуре конечные точки можно масштабировать независимо друг от друга и платить только за использование, а не за те API-интерфейсы, которые не вызываются. Перенос обычно значительно сокращает текущие затраты на поддержку конечных точек.

Темы, которые выходят за рамки этого руководства

В этом руководстве описаны архитектурные подходы и конструктивные шаблоны и не рассматриваются детали реализации функций Azure, Logic Apps или других бессерверных платформ. В данном руководстве, например, не рассматриваются, расширенные рабочие процессы с Logic Apps или возможности функций Azure, такие как настройка общего доступа к ресурсам независимо от источника (CORS), применение личных доменов и передача SSL-сертификатов. Эти сведения доступны в онлайн-документации по функциям Azure.

Дополнительные ресурсы

Кому необходимо это руководство

Данное руководство предназначено для разработчиков и архитекторов решений, занимающихся разработкой корпоративных приложений с помощью .NET, где можно использовать бессерверные компоненты локально или в облаке. Оно полезно для разработчиков, архитекторов и технических руководителей, которые хотят:

  • Понять плюсы и минусы бессерверной разработки
  • Научиться работать с бессерверной архитектурой
  • Изучить примеры реализации бессерверных приложений

Как пользоваться руководством

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

Отправить отзыв

Руководство и примеры постоянно дополняются, поэтому мы ждем ваших отзывов. Если у вас есть комментарии о том, как можно улучшить это руководство, используйте раздел отзывов в нижней части любой страницы, созданный на основе проблемы GitHub.