Serverless computing — это модель выполнения облачных вычислений , в которой поставщик облачных услуг выделяет машинные ресурсы по требованию, заботясь о серверах от имени своих клиентов. Serverless — неправильное название в том смысле, что серверы по-прежнему используются поставщиками облачных услуг для выполнения кода для разработчиков . Однако разработчики serverless- приложений не занимаются планированием емкости , конфигурацией, управлением, обслуживанием, отказоустойчивостью или масштабированием контейнеров, виртуальных машин или физических серверов. Когда приложение не используется, ему не выделяются вычислительные ресурсы. Цены основаны на фактическом количестве ресурсов, потребляемых приложением. [1] Это может быть формой утилитарных вычислений .
Одно из предлагаемых определений для бессерверных вычислений, которое охватывает эти идеи, заключается в том, что бессерверные вычисления — это «парадигма облачных вычислений, охватывающая класс платформ облачных вычислений, которые позволяют разрабатывать, развертывать и запускать приложения (или их компоненты) в облаке без выделения и управления виртуализированными серверами и ресурсами или без заботы о других эксплуатационных аспектах. Ответственность за эксплуатационные аспекты, такие как отказоустойчивость или эластичное масштабирование вычислительных, хранилищных и коммуникационных ресурсов для соответствия изменяющимся требованиям приложений, перекладывается на поставщика облачных услуг. Поставщики применяют биллинг на основе использования: они взимают с пользователей облака плату с мелкой детализацией, пропорционально ресурсам, которые приложения фактически потребляют из облачной инфраструктуры, таким как вычислительное время, память и дисковое пространство». [2] Обратите внимание, что определение бессерверных вычислений со временем расширилось. По словам Бена Кехо, бессерверные вычисления — это спектр; не следует зацикливаться на строгом определении бессерверных вычислений или какой-либо конкретной бессерверной технологии. Вместо этого следует сосредоточиться на бессерверном мышлении: как использовать бессерверные вычисления для решения своих бизнес-задач. [3]
Бессерверные вычисления могут упростить процесс развертывания кода в производстве . Это не полностью устраняет сложность, но в основном переносит ее из группы эксплуатации в группу разработки. И чем более мелкозернистым является приложение, тем сложнее им управлять. [ необходимо разъяснение ] [4]
Бессерверный код может использоваться в сочетании с кодом, развернутым в традиционных стилях, таких как микросервисы или монолиты . В качестве альтернативы приложения могут быть написаны как полностью бессерверные и не использовать никаких выделенных серверов вообще. [5] Это не следует путать с вычислительными или сетевыми моделями, которым не требуется фактический сервер для функционирования, такими как одноранговые сети (P2P).
По словам Янь Цуя, бессерверные решения следует внедрять только тогда, когда они помогают быстрее предоставлять ценность для клиентов. И при внедрении организации должны предпринимать небольшие шаги и снижать риски на этом пути. [6]
Поставщики Serverless предлагают вычислительные среды выполнения, которые выполняют логику приложения, но не хранят данные. Распространенные модели среды выполнения — это функция как услуга (FaaS) и контейнер как услуга . Распространенные языки, поддерживаемые Serverless средами выполнения, — это Java , Python и PHP . Обычно функции выполняются в границах изоляции, таких как контейнеры Linux .
Первой платформой исполнения кода с оплатой по факту использования была Zimki , выпущенная в 2006 году, но она не имела коммерческого успеха. [7] В 2008 году Google выпустила Google App Engine , в котором была реализована тарификация для приложений, использующих пользовательский фреймворк Python, но которые не могли выполнять произвольный код. [8] PiCloud, выпущенный в 2010 году, предлагал поддержку FaaS для Python.
Google App Engine, представленный в 2008 году, был первым абстрактным предложением для бессерверных вычислений. [9] App Engine включал в себя функции HTTP с 60-секундным тайм-аутом, хранилище больших двоичных объектов и хранилище данных с собственными тайм-аутами. Не допускалось сохранение в памяти. Все операции должны были выполняться в этих пределах, но это позволяло приложениям, созданным в App Engine, масштабироваться практически бесконечно и использовалось для поддержки ранних клиентов, включая Snapchat , а также многих внешних и внутренних приложений Google. Поддержка языка была ограничена Python с использованием собственных модулей Python, а также ограниченным выбором модулей Python на языке C, которые были выбраны Google. Как и более поздние бессерверные платформы, App Engine также использовала оплату по принципу «плати за то, что используешь». [10]
AWS Lambda , представленная Amazon в 2014 году, [11] популяризировала абстрактную модель бессерверных вычислений. Она поддерживается рядом дополнительных бессерверных инструментов AWS, таких как AWS Serverless Application Model (AWS SAM) , Amazon CloudWatch и другие.
В 2016 году Google Cloud Platform создала второе бессерверное предложение — Google Cloud Functions . [12]
Oracle Cloud Functions — это бессерверная платформа, предлагаемая на Oracle Cloud Infrastructure , и основанная на проекте Fn с открытым исходным кодом, чтобы разработчики могли создавать приложения, которые можно переносить в другие облачные и локальные среды. Она поддерживает код на Python , Go , Java , Ruby и Node . [13]
Появилось несколько бессерверных баз данных , расширяющих модель бессерверного выполнения на СУБД , устраняя необходимость в предоставлении или масштабировании виртуализированного или физического оборудования для баз данных.
Nutanix предлагает решение под названием Era, которое превращает существующую СУБД, такую как Oracle , MariaDB , PostgreSQL или Microsoft SQL Server , в бессерверную службу. [14]
Amazon Aurora предлагает версию своих баз данных без сервера, основанную на MySQL и PostgreSQL, предоставляя конфигурации с автоматическим масштабированием по требованию. [15]
Azure Data Lake — это высокомасштабируемая служба хранения и аналитики данных. Служба размещена в Azure , публичном облаке Microsoft. Azure Data Lake Analytics предоставляет распределенную инфраструктуру, которая может динамически выделять или отменять выделение ресурсов, поэтому клиенты платят только за те службы, которые они используют.
Oracle Cloud предлагает версию Oracle Autonomous Database, которая является сервисом Autonomous Transaction Processing. Сервис Serverless также включает в себя JSON-версию. [16]
Firebase , также принадлежащая Google, [17] включает в себя иерархическую базу данных и доступна по фиксированным и оплачиваемым по мере использования планам. [18]
Serverless может быть более рентабельным, чем аренда или покупка фиксированного количества серверов, [19] что обычно подразумевает значительные периоды недоиспользования или простоя. [1] Это может быть даже более рентабельным, чем предоставление группы автоматического масштабирования , из-за более эффективной упаковки базовых ресурсов машины.
Это можно описать как оплату по мере использования [19] или как bare-code, [19] , поскольку плата взимается исключительно за время и память, выделенные для запуска кода, без сопутствующих сборов за время простоя. [19] Полезная аналогия здесь — между арендой автомобилей (традиционные облачные виртуальные машины) и приложениями совместных поездок, такими как Uber или Lyft (серверные вычисления). Непосредственные выгоды от затрат связаны с отсутствием эксплуатационных расходов, включая: лицензии, установку, зависимости и расходы на персонал для обслуживания, поддержки или исправления. [19] Из-за бесконечной масштабируемости разработчики могут столкнуться с шоком от счетов в результате неисправного кода или атаки типа «отказ в обслуживании» . Однако эти деньги часто возмещаются за счет поставщика услуг. [20]
Кроме того, архитектура без сервера означает, что разработчикам и операторам не нужно тратить время на настройку и настройку политик или систем автоматического масштабирования; поставщик облачных услуг отвечает за масштабирование мощности в соответствии со спросом. [1] [21] [19] Как говорит Google: «от прототипа до производства и масштабирования в масштабах планеты». [19]
Поскольку облачные системы по своей природе масштабируются как в сторону увеличения, так и в сторону уменьшения, их называют скорее эластичными, чем масштабируемыми.
Небольшие команды разработчиков могут самостоятельно запускать код, не завися от команд инженеров инфраструктуры и поддержки; все больше разработчиков становятся специалистами DevOps , а различия между разработчиками программного обеспечения и инженерами по оборудованию стираются. [19]
С функцией как услугой , единицы кода, открытые внешнему миру, являются простыми функциями, управляемыми событиями . Это означает, что обычно программисту не нужно беспокоиться о многопоточности или прямой обработке HTTP- запросов в своем коде, что упрощает задачу разработки внутреннего программного обеспечения.
Serverless приложения подвержены заблуждениям распределенных вычислений . Кроме того, они подвержены следующим заблуждениям: [22] [23]
Редко используемый серверный код может страдать от большей задержки ответа , чем код, который постоянно выполняется на выделенном сервере, виртуальной машине или контейнере. Это связано с тем, что, в отличие от автоматического масштабирования, поставщик облачных услуг обычно полностью останавливает серверный код, когда он не используется. Это означает, что если среде выполнения (например, среде выполнения Java ) требуется значительное время для запуска, это создаст дополнительную задержку. [24] Это называется холодным стартом в серверных вычислениях.
Бессерверные вычисления не подходят для некоторых вычислительных рабочих нагрузок, таких как высокопроизводительные вычисления , из-за ограничений ресурсов, налагаемых поставщиками облачных услуг, а также потому, что, вероятно, будет дешевле массово предоставить необходимое количество серверов в любой момент времени. [25] Это затрудняет развертывание сложных приложений (например, с направленным ациклическим графом функций); бессерверные вычисления из коробки больше всего подходят для выполнения отдельных функций без сохранения состояния. Некоторые коммерческие предложения, такие как AWS Step Functions от Amazon и Azure Durable Functions от Microsoft, призваны облегчить эту задачу.
Диагностика проблем производительности или чрезмерного использования ресурсов с бессерверным кодом может быть сложнее, чем с традиционным серверным кодом, поскольку, хотя целые функции можно хронометрировать, [5] обычно нет возможности углубиться в более подробную информацию, прикрепив профилировщики , отладчики или инструменты APM . [26] Кроме того, среда, в которой работает код, обычно не является средой с открытым исходным кодом, поэтому его характеристики производительности не могут быть точно воспроизведены в локальной среде .
Согласно OWASP , бессерверные приложения уязвимы к разновидностям традиционных атак, небезопасному коду и некоторым специфичным для бессерверных атак (например, Denial of Wallet [27] ). Таким образом, риски изменились, и предотвращение атак требует изменения мышления. [28] [29]
Serverless иногда ошибочно считается более безопасным, чем традиционные архитектуры. Хотя это в некоторой степени верно, поскольку уязвимости ОС устраняются поставщиком облачных услуг, общая поверхность атаки значительно больше, поскольку в приложении гораздо больше компонентов по сравнению с традиционными архитектурами, и каждый компонент является точкой входа в serverless-приложение. Более того, решения по безопасности, которые клиенты использовали для защиты своих облачных рабочих нагрузок, становятся неактуальными, поскольку клиенты не могут контролировать и устанавливать что-либо на уровне конечной точки и сети, например, систему обнаружения/предотвращения вторжений (IDS/IPS). [30]
Это усиливается монокультурными свойствами всей серверной сети. (Один недостаток может быть применен глобально.) По словам Protego, «решение для обеспечения безопасности бессерверных приложений — это тесное партнерство между разработчиками, DevOps и AppSec, также известным как DevSecOps. Найдите баланс, при котором разработчики не владеют безопасностью, но и не освобождаются от ответственности. Примите меры, чтобы сделать это проблемой каждого. Создавайте кросс-функциональные команды и работайте над тесной интеграцией между специалистами по безопасности и командами разработчиков. Сотрудничайте, чтобы ваша организация могла устранять риски безопасности со скоростью бессерверных приложений». [31]
Многие среды функций без сервера основаны на закрытых публичных облачных средах. Здесь необходимо учитывать некоторые аспекты конфиденциальности , такие как общие ресурсы и доступ внешних сотрудников. Однако вычисления без сервера также могут выполняться в среде частного облака или даже локально, например, с использованием платформы Kubernetes . Это дает компаниям полный контроль над механизмами конфиденциальности, как и при хостинге в традиционных серверных установках.
Бессерверные вычисления охватываются Международным управлением по центрам обработки данных (IDCA) в их Framework AE360. [32] Однако часть, связанная с переносимостью, может стать проблемой при перемещении бизнес-логики из одного публичного облака в другое, для чего было создано решение Docker . Cloud Native Computing Foundation (CNCF) также работает над разработкой спецификации совместно с Oracle . [33]
Бессерверные вычисления предоставляются как сторонняя услуга. Приложения и программное обеспечение, работающие в бессерверной среде, по умолчанию привязаны к определенному поставщику облачных вычислений. Эта проблема усугубляется в бессерверных вычислениях, поскольку с его повышенным уровнем абстракции публичные поставщики разрешают клиентам загружать код только на платформу FaaS без полномочий настраивать базовые среды. Что еще более важно, при рассмотрении более сложного рабочего процесса, включающего Backend-as-a-Service (BaaS), предложение BaaS обычно может изначально запустить только предложение FaaS от того же поставщика. Это делает миграцию рабочей нагрузки в бессерверных вычислениях практически невозможной. Поэтому рассмотрение того, как проектировать и развертывать бессерверные рабочие процессы с точки зрения нескольких облаков , кажется многообещающим и начинает преобладать [ когда? ] . [34] [35] [36]
Следование практикам DevSecOps может помочь более эффективно использовать и защищать бессерверные технологии. [37] В бессерверных приложениях граница между инфраструктурой и бизнес-логикой размыта, и приложения обычно распределены по различным сервисам. По словам Янь Цуя, чтобы получить максимальную отдачу от усилий по тестированию, бессерверные приложения следует тестировать в основном для их интеграции, и, возможно, модульные тесты следует использовать только в случае сложной бизнес-логики. Кроме того, чтобы упростить отладку и реализацию бессерверных приложений, разработчикам следует использовать оркестровку в ограниченном контексте микросервиса и хореографию между ограниченными контекстами . [ 6]
По словам Янь Цуя, эфемерные ресурсы должны храниться вместе для достижения высокой сплоченности . Однако общие ресурсы, которые имеют длительное время развертывания (например, кластер AWS RDS ) и зона приземления должны иметь свой собственный отдельный репозиторий , конвейер развертывания и стек. [6]
Бессерверные функции могут использоваться для: [38]
{{cite web}}
: CS1 maint: url-status ( ссылка ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )