Бессерверные вычисления (serverless computing) помогают разработчикам приложений сосредоточиться на своей основной работе: больше не нужно беспокоиться о проблемах с серверами. Это фундаментальное изменение в архитектуре приложения, вместе с ним вы передаете в ведение поставщика облачных услуг:
- управление сервером (server management)
- масштабируемость (scalability)
- безопасность (security)
К недостаткам подхода можно отнести необходимость рефакторинга кода для работы с бессерверной системой, присущие ему архитектурные ограничения и сильную зависимость от поставщика.
Что такое “бессерверный”?
Нет одного определения “бессерверности”. Не во всех случаях это означает, что программному обеспечению не потребуются серверы для запуска программы. Есть два разных “бессерверных” подхода:
- Приложения, которые используют готовую серверную инфраструктуру. Приложения этого типа используют уже доступные в облаке базы данных, службы аутентификации, сторонние приложения и услуги. Такая модель называется “бэкэнд как услуга” (BaaS).
- Приложения полностью написаны самими разработчиками, но выполняются в вычислительных контейнерах, работающих без сохранения состояния*. Отдельные контейнеры создаются под события при каждом запросе и управляются третьей стороной. То есть бессерверная система при таком понимании является представителем cобытийно-ориентированной архитектуры (event driven architecture). Такой вариант связан с моделью “функция как услуга” (FaaS), которая обычно используется при создании микросервисной архитектуры приложений. AWS Lambda стали первым крупным поставщиком облачных услуг, предложившим FaaS. Дальше были Google Cloud Functions, Microsoft Azure Functions, IBM/Apache OpenWhisk (open source) в 2016 году и Oracle Cloud Fn (open source) в 2017 году.
*Контейнеры можно легко останавливать, удалять или развертывать на другом узле. Однако, перемещения возможны, только если у контейнера нет никаких зависимостей от узла, на котором он расположен. О таких контейнерах говорят, что они работают без сохранения состояния.
В бессерверной архитектуре ответственность за обновления (patching), защиту (securing) и масштабирование серверов (scaling of servers) возлагается на поставщика облачных услуг. Подход дает возможность создавать и запускать приложения (сервисы) без необходимости управлять инфраструктурой. Облачные сервисы можно считать бессерверными, если они соответствуют следующим критериям:
- Облачный сервис масштабируется автоматически
- Сервис предоставляется по модели ценообразования “pay-per-use” (оплата по факту использования), то есть цена основана на количестве исполнений (executions), а не на выделенных вычислительных мощностях
- Нет никаких серверов, которыми владелец должен управлять напрямую
Каковы преимущества бессерверных вычислений?
По прогнозам Gartner, более 50% глобальных предприятий развернут бессерверные платформы к 2025 году (сегодня этот показатель составляет 20%). Это произойдет по следующим причинам:
- Простота управления: благодаря бессерверному подходу разработчики могут сосредоточиться на своем приложении. Обязанности, связанные с инфраструктурой, ложатся на плечи поставщиков облачных услуг. Это снижает нагрузку на разработчиков и команды DevOps.
- Автомасштабирование (Autoscaling): отдав управление ресурсами поставщикам облачных услуг, вы снижаете эксплуатационные расходы (operating costs) и сокращаете количество требуемых сотрудников. Разработчикам не приходится справляться с такими проблемами, как интенсивный трафик или простои.
- Уменьшение задержки: модель Backend as a Service (BaaS) предоставляет инфраструктуру с использованием облачных систем. Вы можете распределить серверы по разным географическим регионам, ведь у вас нет арендованных “физических” серверов. По запросу код может запускаться ближе к конечному пользователю: уменьшаем задержку и улучшаем взаимодействие с клиентом.
- Скорость и гибкость. С бессерверным подходом вы тратите меньше времени на реализацию бизнес-идей. Команда может сосредоточиться на улучшении продукта и добавлении новых функций.
- Снижение затрат: разработчикам и командам DevOps не нужно арендовать больше мощностей, чем необходимо. Провайдеры берут на себя ответственность за управление ресурсами и их распределение, а цены зависят от количества ваших приложений. Это помогает снизить эксплуатационные расходы (operating costs).
Бессерверный подход дешевле?
Стоимость является одним из наиболее важных критериев при выборе облачной технологии/поставщика. Бессерверные предложения действительно отличают довольно низкие цены (пример ценообразования AWS Lambda). Однако, точная стоимость решения будет зависеть от вашего приложения, в некоторых случаях IaaS обойдется вам дешевле. Если ваше приложение/сервис требует частой интенсивной вычислительной работы и вы полностью будете использовать арендованные мощности, лучше выбрать IaaS, а не FaaS. Каждой компании необходимо проанализировать свои потребности и найти оптимальный подход к решению своей проблемы.
Как работают бессерверные вычисления?
Процессы в бессерверной модели рассматриваются как «функции, которые будут выполняться в соответствии с поступившими запросами» (a function to be applied according to the incoming demand). Функция, написанная и выполняемая в бессерверной модели, “проходит” следующие этапы:
- Функция написана разработчиком: функция служит для конкретной задачи в коде приложения.
- Разработчик определяет события: событие является триггером для выполнения функции, подобно HTTP-запросу.
- Событие инициируется гостем (is triggered by a guest). Пользователь запускает событие действием, например, щелчком по ссылке.
- Функция выполняется облаком: провайдер проверяет, был ли уже запущен экземпляр функции. В противном случае, “облачный” провайдер выполняет новую функцию.
- Результат отправляется клиенту: пользователь видит результат выполненной функции внутри приложения.
С какими проблемами можно столкнуться при использовании бессерверных вычислений?
Преимущества перехода на облачные бессерверные вычисления уравновешиваются следующими проблемами:
- Архитектурные ограничения: существует два вида архитектурных ограничений, которые могут снизить эффективность решения:
- “естественные” ограничения, такие как холодный запуск (cold starts) или задержка инициализации (initialization latency)
- “искусственные” ограничения, такие как ограничение времени выполнения функции (limiting function runtime)
- Меньший контроль над функциями: для бессерверной модели FaaS логика приложения (application logic) выполняется, когда запускается событиями. Для обеспечения этих дискретных функций приложению требуется факторизация (factorization). Это вызовет минимальные трудности, если вы изначально создавали микросервисную архитектуру, но в конечном итоге “бессерверность” может привести к разрастанию кода, что затруднит управление функциями.
- Нехватка опыта на рынке: предприятию требуется серьезный сдвиг в архитектуре приложений, чтобы перейти на бессерверную модель. Большинство разработчиков будут узнавать о бессерверных системах по мере появления проблем и сбоев. Это может привести к задержкам в реализации проектов.
- Зависимость от поставщика: поставщики облачных услуг стремятся к интеграции собственных продуктов. Вам, как клиенту, потребуется использовать несколько сервисов от одного и того же провайдера. Управление всеми аспектами работы приложения на одной платформе удобно для развертывания и масштабирования, но увеличивает зависимость от конкретного поставщика. Если пользователю потребуется перенести приложение на другую платформу, ему может потребоваться значительное время на восстановление системы.
Ведущие поставщики бессерверных вычислений
Ведущие компании, занимающиеся облачным IaaS, инвестируют в бессерверную технологию. Это выгодно для технологических компаний по разным причинам:
- У них уже есть инфраструктура, на основе которой можно предлагать новую услугу
- Бессерверные системы – это новая парадигма управления инфраструктурой, и, став первопроходцем, они определяют, как будут предлагаться бессерверные услуги. Это позволяет им замедлять отток клиентов, когда они приходят к бессерверной модели.
- Ведущие компании могут себе позволить экспериментировать с “бессерверностью”. Они смогут работать с компаниями, которые первые возьмутся за воплощение этого подхода в реальность.