- PVSM.RU - https://www.pvsm.ru -

«Архитектуры приложений»: немного о бессерверных архитектурах

В стандарте IEEE 1471 [1] термин «архитектура» определен [2] как базовая организация системы, описывающая связи между компонентами этой системы и внешней средой, а также определяющая принципы её проектирования и развития. В одной из предыдущих статей мы уже рассматривали [3] несколько видов архитектур [4] программного обеспечения. Сегодня мы обратим свой взор на набирающие популярность бессерверные архитектуры, поскольку это достаточно «горячая» тема в сфере software-решений: уже появляется специальная литература [5], фреймворки [6], организуются конференции [7].

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

«Архитектуры приложений»: немного о бессерверных архитектурах - 1 [8]

/ фото John Voo [9] CC [10]

Бессерверные приложения широко используют сторонние сервисы, которые выполняют задачи, обычно решаемые серверами. Причем эти сервисы могут представлять собой целые экосистемы (например Azure и AWS) или быть самостоятельными решениями (например Parse или Firebase).

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

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

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

Несколько примеров

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

Она [система] состоит из уровня представления, логического уровня и уровня данных. Уровень представления – это компонент, с которым непосредственно взаимодействуют пользователи (веб-страница, интерфейс приложения и др.). Логический уровень содержит код для преобразования действий пользователя, производимых на первом уровне, то есть отвечает за поведение приложения. Уровень данных состоит из хранилища (куда входят базы данных, кэши, файловые системы и др.), где размещаются данные приложения.

Структура выглядит следующим образом:

«Архитектуры приложений»: немного о бессерверных архитектурах - 2

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

«Архитектуры приложений»: немного о бессерверных архитектурах - 3

Это достаточно упрощённый вариант, но даже здесь видно, что произошло множество изменений. Задачи аутентификации теперь решает BaaS-сервис (BaaS – Backend-as-a-Service). Через BaaS-сервис также происходит обращение к базе данных, которая хостится [11] «на стороне».

Часть серверной логики была перенесена к клиенту, в частности, теперь он занимается слежением за сессией пользователя, страничной навигацией, чтением из базы данных продуктов и отображением информации. А за обработку базы данных покупок теперь отвечает FaaS-функция (FaaS – Function-as-a-Service), которая хранится на сервере для безопасности.

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

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

«Архитектуры приложений»: немного о бессерверных архитектурах - 4

В случае бессерверной архитектуры получается следующая схема:

«Архитектуры приложений»: немного о бессерверных архитектурах - 5

Здесь пользовательское приложение заменяется FaaS-функцией, которая работает внутри управляемого событиями контекста, предоставляемого вендором. При этом среда FaaS может обрабатывать несколько кликов пользователей параллельно, создавая копии кода функции.

Достоинства и недостатки бессерверного решения

Передача управления частью систем третьей стороне также порождает свои недостатки. Например, это может [12] вылиться в некоторую потерю контроля и, к примеру, непредвиденные апгрейды API. Также разбиение одного приложения на несколько частей со вплетенными в структуру разнообразными сервисами приводит к увеличению «числа точек перегиба», что может усложнить процедуру тестирования.

С другой стороны в силу вступает эффект экономии от масштаба, например, вы платите меньше за управление БД, поскольку вендор обслуживает еще множество таких же однотипных баз данных. Больше всего выгоду такого подхода оценят [13] компании, которым приходится иметь дело с нестабильными паттернами потребления трафика. При использовании бессерверных архитектур мощности сервера не будут простаивать в ожидании всплесков активности.

Также бессерверные системы гораздо проще поддерживать. Сторонние компании, предоставляющие облачные услуги, прилагают множество усилий для обеспечения их доступности и масштабируемости. Более того, любая оптимизация производительности FaaS-приложения автоматически снижает операционные издержки. Например, если выполнение какого-либо действия занимало 1 секунду, а после внесения правок стало занимать 200 мс – это приведет к уменьшению стоимости услуги на 80% без изменений в инфраструктуре.

Заключение

Большинство применений FaaS пока что представляют собой обычные приложения, завернутые в новую оболочку. Команды разработчиков «накидывают» новые решения и смотрят, как они поведут себя в контексте бессерверных платформ. Бессерверный подход маловероятно станет панацеей, и вряд ли заменит все существующие архитектуры [3], однако можно с уверенностью сказать, что эта область будет развиваться и толкнет вперед сферу разработки программного обеспечения.

P.S. Мы, со своей стороны, также предлагаем несколько интересных материалов из нашего блога о корпоративном IaaS [14]:

Автор: ИТ-ГРАД

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arhitektura-prilozhenij/184456

Ссылки в тексте:

[1] IEEE 1471: https://en.wikipedia.org/wiki/IEEE_1471

[2] определен: http://www.sei.cmu.edu/architecture/start/glossary/moderndefs.cfm

[3] рассматривали: https://habrahabr.ru/company/it-grad/blog/276297/

[4] архитектур: http://berb.github.io/diploma-thesis/original/042_serverarch.html

[5] литература: https://www.amazon.com/gp/product/1680501496?ie=UTF8&tag=martinfowlerc-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1680501496

[6] фреймворки: https://github.com/serverless/serverless

[7] конференции: http://serverlessconf.io/

[8] Image: https://habrahabr.ru/company/it-grad/blog/309026/

[9] John Voo: https://www.flickr.com/photos/138248475@N03/

[10] CC: https://creativecommons.org/licenses/by/2.0/

[11] хостится: https://www.reg.ru/?rlink=reflink-717

[12] может: https://charity.wtf/2016/05/31/operational-best-practices-serverless/

[13] оценят: http://martinfowler.com/articles/serverless.html

[14] корпоративном IaaS: http://it-grad.ru/iaas/iaas-vmware/virtual-infrastructure/

[15] Эволюция ERP-систем: отказ от on-premises-инсталляций в пользу облачных и гибридных решений: http://goo.gl/ewlGAi

[16] Зарубежное или локальное размещение данных в облаке: подводные камни: http://goo.gl/jEefDO

[17] Переезд в облако: трансформация технологий и бизнеса: http://goo.gl/0vKzJ3

[18] Первая российская BaaS-платформа Scorocode разместилась в IaaS-облаке «ИТ-ГРАД»: http://goo.gl/q8NnbF

[19] Источник: https://habrahabr.ru/post/309026/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best