Понимание бессерверных вычислений: упрощение управления инфраструктурой
Управление инфраструктурой добавляет дополнительный слой сложности к современному рабочему процессу разработки ПО. Поддержка серверов в рабочем состоянии, забота об обновлениях безопасности и масштабирование ресурсов отнимают ценное время у DevOps-команд. С бессерверными вычислениями (serverless) все операции инфраструктуры обрабатываются провайдером сервиса. Таким образом, serverless позволяет командам разработки фокусироваться на написании кода вместо траты слишком большого времени на управление инфраструктурой.
Эта статья объясняет, что такое бессерверные вычисления и как они соотносятся с разными моделями облачного развертывания. Мы также изучим плюсы и минусы serverless и поговорим о некоторых распространенных сценариях использования.
Что такое бессерверные вычисления?
Бессерверные вычисления (serverless computing) — метод развертывания и запуска кода в облаке без необходимости заниматься провижинингом серверов и управлением инфраструктурой. Несмотря на название, serverless все еще полагается на облачные или физические серверы для выполнения кода. Однако разработчики не заботятся о базовой инфраструктуре. Это остается на совести serverless-провайдера, который динамически аллоцирует необходимые вычислительные ресурсы и управляет ими от имени пользователя.
Для разработчиков это означает нулевое время, потраченное на администрирование серверов, обслуживание, масштабирование ресурсов или планирование мощностей. Они просто загружают свой код и позволяют провайдеру запускать серверную логику на основе разных событий или запросов. В отличие от привычных моделей облачного биллинга, serverless-сервисы тарифицируются на основе количества выполнений кода или когда срабатывает определенное событие.
Как работают бессерверные вычисления?
В serverless-среде код запускается событиями и выполняется как функция. Именно поэтому serverless часто ассоциируется с «Functions-as-a-Service» или FaaS, что является похожей концепцией. FaaS — событийно-ориентированная облачная модель, обрабатывающая серверную логику для выполнения кода без какого-либо вмешательства пользователя. Этими событиями может быть что угодно: от простого HTTP-запроса, API-вызова, до запроса к базе данных или загрузки файла.
Функции выполняются в stateless-контейнерах. Это означает, что вычислительные ресурсы для запуска функции провижинятся только при вызове. Никакие данные не сохраняются в RAM и не записываются на диск. После выполнения запроса состояние приложения сбрасывается, и памяти о транзакции не остается. Новый запрос требует провижининга ресурсов с нуля и выполнения кода без ссылки на предыдущий вызов.
Для приспособления к этому stateless-состоянию, приложения должны быть спроектированы как функции, способные запускаться в stateless-контейнерах. Обычно это достигается через микросервисы. Большие монолитные приложения разбиваются на меньшие сегменты и взаимосвязываются через API. Монолитные приложения все еще могут запускаться как одиночные функции, но это не распространенная практика. Имея в виду, что новый вычислительный контейнер провижинится при каждом запросе, большие функции негативно влияют на скорость и длительность выполнения.
FaaS-функции не запускаются бесконечно. Они терминируются через определенное время после вызова. В большинстве случаев функции тайм-аутятся примерно через пять минут. Это означает, что приложения, запускающие длительные задачи, должны быть перепроектированы с учетом лимитов терминации.
Провижининг и инициализация контейнеров для выполнения функции также занимают время. Обычно это измеряется в миллисекундах. Однако сложные функции могут занимать несколько секунд для инициализации, вызывая большую задержку.
Существует два распространенных метода инициализации функции — warm start и cold start. Warm start переиспользует ресурсы от предыдущего события, тогда как cold start развертывает новый контейнер. Время инициализации и выполнения функции зависит от объема кода, языка программирования, количества библиотек, используемых скриптом, и многих других факторов. В терминах задержки, cold start занимает больше времени для запуска функции.
Как бессерверные вычисления соотносятся с BaaS, PaaS и IaaS?
Как и с любым софтовым трендом, нет официального определения, описывающего, что такое serverless, а что нет. Именно поэтому бессерверные вычисления часто путают с другими облачными сервисами и моделями развертывания. Концепция бессерверных вычислений вращается вокруг двух похожих областей:
Backend-as-a-Service (BaaS) — BaaS позволяет разработчикам фокусироваться на написании фронтенд-интерфейсов, перекладывая все бэкенд-операции на сервис-провайдера. Эти закулисные задачи обычно включают готовые аутентификацию пользователей, хранилище, управление базами данных и хостинг-сервисы. Также разработчикам не нужно управлять серверами, запускающими их бэкенд, что позволяет быстрее развертывать приложения.
Functions-as-a-Service (FaaS) — Эта serverless-модель облачного сервиса устраняет управление инфраструктурой. Сервис-провайдер занимается развертыванием вычислительных ресурсов по запросу для выполнения кода пользователя. Это происходит всякий раз, когда срабатывает событие или запрос. Serverless-функции запускаются в stateless-контейнерах, означая, что вычислительные ресурсы развертываются только при вызове функции.
Главная точка путаницы — между Backend-as-a-Service и Platform-as-a-Service (PaaS). Первое — техника serverless-вычислений, второе — модель облачного развертывания. Хотя они делят некоторые базовые характеристики, PaaS не соответствует требованиям serverless.
Platform-as-a-Service (PaaS) — С PaaS пользователи арендуют аппаратное и программное обеспечение, необходимое для разработческих рабочих нагрузок, у сервис-провайдера за подписку. Это позволяет разработчикам тратить больше времени на кодинг без забот об управлении инфраструктурой. С другой стороны, BaaS предлагает дополнительные функции, такие как out-of-the-box аутентификация пользователей, управляемые базы данных, email-уведомления и т.д. BaaS также позволяет разработчикам фокусироваться исключительно на построении фронтенда, интегрируя различные бэкенд-сервисы по запросу.
Infrastructure-as-a-Service (IaaS) — IaaS относится к self-service облачному решению, где провайдер хостит инфраструктуру от имени пользователя. Все операции по провижинингу и управлению серверами, включая установку ПО, обрабатываются пользователем. Некоторые IaaS-провайдеры также предлагают serverless-решения, но как отдельно отличные продукты.
Распространенные сценарии использования бессерверных вычислений
Как упоминалось ранее, serverless не для всех. Но если ваши потребности согласованы с некоторыми из этих сценариев, вы можете выиграть от serverless.
Построение API
Без серверов для управления, построение высокомасштабируемых и отзывчивых API — один из более популярных сценариев использования serverless. Функция автоскейлинга serverless гарантирует, что API всегда будут доступны даже под тяжелым трафиком. В дополнение к этому, пользователь не платит за простаивающие ресурсы, когда нет вызовов к API.
Веб-сайты и приложения
Развертывание веб-сайтов и веб-приложений на serverless-платформе не требует никакой предварительной настройки инфраструктуры. Это значительно сокращает время, необходимое для запуска полностью функционального веб-приложения. Функция автоскейлинга также играет значительную роль здесь, потому что пользователю не нужно беспокоиться о провижининге дополнительных серверов для поддержки роста спроса. В результате гораздо легче поддерживать 100% аптайм.
Мультиязыковые приложения
С serverless, одно приложение может быть написано на разных языках. Serverless позволяет разработчикам разбить монолитное приложение на меньшие части и запускать их как микросервисы. Эти микросервисы затем общаются друг с другом через API. Каждый сегмент приложения может быть написан на разных языках программирования.
CI/CD-пайплайны
Автоматизация — ключ к успешным пайплайнам разработки, тестирования и интеграции. Serverless позволяет разработчикам автоматически тестировать код и быстрее исправлять баги. Поскольку serverless событийно-ориентирован, пользователи могут настроить события для запуска автоматизированных тестов без какого-либо ручного вмешательства.
Каковы преимущества бессерверных вычислений?
По сравнению с традиционными серверно-ориентированными облачными вычислениями, бессерверные вычисления абстрагируют операции инфраструктуры. Все работает out-of-the-box, что в свою очередь обеспечивает более быстрые релизы кода и автоматизированную масштабируемость по более низкой цене.
Это три наиболее распространенных преимущества serverless:
Автоскейлинг
Serverless-провайдер масштабирует инфраструктурные ресурсы на основе спроса. Операции масштабирования выполняются динамически и автоматически без какого-либо вмешательства разработчиков.
Более быстрое время выхода на рынок
Без необходимости провижинить сложные серверные кластеры, разработчики могут больше фокусироваться на достижении более высокой скорости релизов. Это ускоряет время, необходимое для релиза кода в продакшн или внедрения инкрементных изменений кода, приводя к более быстрой доставке приложений клиентам.
Оптимизированные затраты
Поскольку все провижинится по запросу, организации никогда не должны платить за неиспользуемое пространство хранения, вычислительное время или нетворкинг. Потребление serverless-сервисов обычно измеряется в миллисекундах и тарифицируется соответственно.
Каковы недостатки бессерверных вычислений?
Как и с любым софтовым решением, serverless тоже имеет некоторые недостатки. Но в зависимости от приложения, которое вы строите, вы можете не так обеспокоены некоторыми из этих недостатков serverless.
Задержка (Latency)
При выполнении функции, serverless-провайдеры автоматически развертывают необходимые ресурсы при каждом вызове. В зависимости от размера рабочей нагрузки, контейнеры обычно провижинятся в миллисекундах, но могут занимать даже несколько секунд. Задержка может быть снижена через «warm starts», которые переиспользуют инстансы от предыдущего выполнения.
Длительность выполнения (Execution Duration)
Время выполнения serverless-функции ограничено и прерывается после определенного периода. Обычно это около пяти минут после вызова, но варьируется по провайдерам. Лимиты выполнения — главный недостаток для приложений, инициирующих длительные процессы. Смягчение этой проблемы возможно путем сегментации кода на меньшие части и запуска их как микросервисов.
Vendor Lock-In
Провайдеры обычно используют проприетарные технологии для включения своих serverless-сервисов. Это может вызывать проблемы для пользователей, желающих мигрировать свои рабочие нагрузки на другую платформу. При переходе на другого провайдера изменения в коде и архитектуре приложения неизбежны.
Безопасность
У пользователей мало контроля над конфигурацией инстанса, запускающего их код. Это скрыто от пользователя и попадает в область сервис-провайдера. Как таковое, операции безопасности также попадают в руки провайдера. Пользователь беспомощен, если происходит атака, полагаясь исключительно на провайдера для смягчения ущерба и восстановления системы. Приложения, имеющие множественные точки входа в serverless-среде, более подвержены уязвимостям из-за увеличенной поверхности атаки.
Какое будущее у бессерверных вычислений?
Бессерверные вычисления — все еще относительно новая технология. Ее будущее зависит от способности сервис-провайдеров решить некоторые из перечисленных выше недостатков — наиболее важно, cold starts. Провайдерам нужно сократить время, необходимое для выполнения функции после того, как она была в idle-состоянии некоторое время. Решение этой проблемы снизит задержку и обеспечит бесшовный пользовательский опыт.
Serverless сейчас полагается на stateless-контейнеры для выполнения функций. Будущее serverless движется в сторону включения stateful-приложений для использования преимуществ serverless. Это позволит разработчикам строить stateful-приложения без забот о бэкенд-управлении данными.
В терминах DevOps, serverless приведет к расширению NoOps. Этот тренд приведет к тому, что serverless-провайдеры будут обрабатывать все операции инфраструктуры от имени клиента. В таком окружении компаниям не нужно иметь in-house операционные команды.
В ближайшие годы Kubernetes ожидается стать фундаментом serverless. С поддержкой нетворкинга, гибкого автоскейлинга и мультиоблачных развертываний, переносимость Kubernetes улучшает serverless-вычисления более чем одним способом. Запуск определенных классов приложений в serverless непрактичен, так как сервис-провайдеры иногда ограничивают их поведение. С Kubernetes разработчики смогут преодолеть эти ограничения и строить serverless-платформы на основе своих специфических нужд.
Заключение
Хотя название подразумевает отсутствие серверов, бессерверные вычисления все еще полагаются на облачные или физические серверы. Это модель вычислений, устраняющая операции инфраструктуры, позволяющая разработчикам фокусироваться на написании и развертывании приложений. Serverless-модель вращается вокруг двух ключевых областей: Backend-as-a-Service и Functions-as-a-Service.
Первая предоставляет пользователям готовую бэкенд-архитектуру, вторая позволяет запускать приложения в stateless-контейнерах. Эти контейнеры провижинятся автоматически на основе событий или триггеров. Таким образом, serverless не серебряная пуля для всех текущих проблем разработки. Она в основном ориентирована на не-монолитные приложения, использующие архитектуру на основе микросервисов.
Облачные вычисления
- Бессерверные вычисления: новое поколение инноваций «As a Service»
- Топ курсов облачных вычислений на 2026: от AWS Fundamentals к Maryland MicroMasters
- Понимание облачных вычислений: как это работает и почему это важно
- Big Data и облачные вычисления: как они работают вместе
- Топ вызовов, ограничивающих внедрение Serverless — что нужно знать
- Облачные вычисления или локальная инфраструктура: что лучше для вашего бизнеса?
- Что такое сталь A2? Универсальная, стоимоэффективная марка инструментальной стали для промышленности и столя…
- Периферийные вычисления: Почему это важно для современного бизнеса
- Что такое квантовые вычисления? Руководство для начинающих
- Код ТН ВЭД (HS Code) для гидравлических насосов: классификация и применение