Сегодня облачные решения, чтобы они там не значили, очень популярны, и каждый хочет использовать их в своих проектах. Но, к сожалению, мало кто из владельцев действительно задумывается зачем они нужны, как работают, как могут помочь или навредить проекту.Давайте разбираться, кому и зачем это нужно, как это все работает и какие инструменты сегодня существуют.Облачные технологии уже стали неотъемлемой частью разработки благодаря Amazon Web Services, Microsoft Azure и Google Cloud Platform. Так что serverless или бессерверная архитектура — логический следующий шаг в развитии облаков, цель которого — ускорение разработки и снижение издержек. Рынок согласен с этим утверждением — каждый год сегмент serverless-услуг растёт на 75% и при развитии в таком темпе достигнет 7,7 миллиардов долларов к 2021 году. Только в 2018 году технологией стали пользоваться в 1,5 раза чаще: serverless использовали 36% опрошенных представителей компаний, а ещё 22% — экспериментировали на предмет внедрения.Что такое serverless?Несмотря на название, концепция не предполагает отказа от серверов как таковых — их мощности всё ещё нужны для работы приложений. Просто физический или выделенный виртуальный сервер с конкретными характеристиками заменяется абстрактным, ресурсы для которого берутся из общего пула гигагерц и мегабайт у провайдера.Преимущества ServerlessДля работы приложения всегда выделяется ровно столько ресурсов, сколько нужно Больше не будет ситуации, когда сервер простаивает из-за низкой нагрузки или не справляется в пиковые моменты.Экономится время на настройку и обслуживание серверовБольше не надо заниматься подбором сервера, разбираться в настройке, следить за работой, обновлять программы. Теперь управление серверами лежит на провайдере. А разработчик может сконцентрироваться на качестве и защищённости кода. Меньше затратМало того, что закупка и обслуживание оборудования теперь на провайдере. Теперь и оплата за динамически меняющиеся мощности — тоже динамическая. Нет нагрузки — нет затрат, понадобились дополнительные мощности на пару часов — эти часы и оплачиваете. Infrastructure as code (IaC) Усложнение архитектуры приложения и большое количество провайдеров способствует к переходу описания инфраструктуры в коде проекта. Монолитное приложение на классических серверах настраивается 1 раз и работает пока что-то не сломается. Если понадобится обновить один из компонентов приложения, это может быть невозможным без больших затрат и переписи половины или даже всего кода. Всё усложнится, если разработчика, писавшего это приложение, уже нет в компании и кому-то придётся разбираться в коде с нуля. Serverless-решения зачастую разворачиваются в облаке запуском одной команды вместо конфигурации сервера с нуля, установки библиотек или даже перевозки и коммутации сервера в другом датацентре.Недостатки ServerlessПривязка к сервисуВозможна ситуация, когда разработав и запустив serverless приложение на одной из платформ, вы не сможете переехать на другую без серьёзной переработки кода из-за различия в архитектуре сервисов и отсутствия поддержки нужных языков. Например, в системах управления баз данных — AWS использует DynamoDB, Azure — CosmosDB. AWS поддерживает язык Go, Google Cloud Platform — нет. Повышенные расходы в некоторых случаяхНе все приложения по умолчанию выигрывают от перехода на serverless и динамической оплаты. В зависимости от количества запросов и задействованных ресурсов, выделенный сервер может быть выгоднее. Ограниченный срок жизни инстансаОбратная сторона экономии на ресурсах — нельзя сделать так, чтобы для ускорения работы какие-то инстансы работали постоянно. Задержки из-за постоянных холодных стартовПродолжение предыдущего недостатка — если процесс завершился к тому моменту, когда он понадобился снова — придётся тратить 1-3 секунды на запуск. Сложность дебаггингаИз-за деления на модули, в serverless приложениях сложнее отследить причины ошибок — ведь приходится отслеживать каждый модуль отдельно, а также связи между ними.Нужен ли переход на serverless именно вамХотя у технологии есть свои преимущества, вовсе не значит, что на неё надо переходить всем. Serverless не подойдёт тем, у кого стабильная и постоянная нагрузка на сервера или тем, кто не хочет отказываться от собственных серверов по соображениям контроля и безопасности. Может быть и так, что в вашем случае выгоднее и удобнее продолжить разработку монолитного приложения. Если вы всё прикинули, подсчитали выгоды от Serverless и решили начать разработку такого приложения или же переписать имеющееся под такую архитектуру — давайте разберёмся, какой провайдер подойдёт для этого лучше всего. Выбор провайдера для serverless разработкиВ 2020 году на рынке представлено около десятка компаний, которые предоставляют облачные сервисы для бессерверной разработки. Из них наибольшими ресурсами и популярностью обладают 3: AWS Lambda от Amazon, Azure Functions от Microsoft и Google Cloud Functions. Есть у них и перспективные конкуренты, например, IBM, Alibaba и несколько других. Но здесь и сейчас для разработки лучше выбрать кого-то из большой тройки.AWS LambdaСервис-пионер для разработки бессерверных приложений появился в 2014 году и за счёт раннего старта занял самую большую долю на рынке. Поддерживает Node.js, Python, Java (Java 8), C #, Go, Visual Basic, F #.ПреимуществаБольшой выбор стран и регионов. Вы можете выбрать датацентр, который территориально ближе к вашей аудитории, чтобы контент загружался быстрее.Подробная документация и большое сообщество. Если у вас проблема — то с большой долей вероятности кто-то уже столкнулся с ней и предложил решениеЛучшая скорость “холодного старта”. Важно для stateless приложений, которые не сохраняют состояние сеанса клиента на сервереОбучение и сертификацияНедостаткиМаксимум параллельно выполняемых операций ограничен 1000Меньше возможностей для загрузки приложения на хостингAzure FunctionsСервис номер 2, появился на рынке в 2016 году. Поддерживает C #, F #, Python, Java, Javascript, Node.js, PHP, Bash, Batch, PowerShellПреимуществаЛучший срок жизни инстанса. Но тут палка о двух концах — чем дольше инстанс занимает ресурсы — тем больше вы платите, но тем быстрее работает приложение в случае повторных обращений.Поддержка большого количества языковУдобная интеграция с сервисами Microsoft, что неудивительно.НедостаткиНельзя настроить свою виртуальную машину, можно только выбрать из уже сконфигурированныхGoogle Cloud FunctionsСервис был запущен в 2017 году, но долгое время находился в бета-стадии и отставал от двух других. Ситуация стала меняться в 2018 году, когда Google занялся активным развитием Cloud Functions. Несмотря на это, платформа до сих пор отстаёт от лидеров по количеству дата-центров, поддерживаемых языков и возможностей интеграции с другими продуктами. Поддерживает Node.js, Python. ПреимуществаСамая быстрая настройка деплоя. Cвязано это с тем, что Гугл предлагает минимальное количество опций. Такой подход хорош для новичков.Наиболее гибкое ценообразование и лучший бесплатный тариф.Интеграция с клиентскими сервисами Google, например, за несколько минут можно настроить работу c Google Sheets или Google Docs из serverless-функций.НедостаткиПоддержка всего двух языков программированияМаксимальное количество функций — 1000 на проектСамое маленькое сообществоСамая дорогая оплата — на момент написания статьи 2000000 запросов и 1536мб памяти обошлись бы в 53 доллара США и 70 центов с учётом оплаты сверх бесплатного пакета.На чём писать?Несмотря на относительную молодость технологии serverless, уже есть фреймворки — программные продукты, которые дают программисту готовые базовые модули, на основе которых он дальше занимается разработкой. Самым продвинутым и популярным на — данный момент является фреймворк Serverless — с таким же названием, как и сама технология. Он написан на Node.js и хорош своей универсальностью:справляется с разными видами задач на уровне специализированных фреймворковпревосходит другие фреймворки в задачах за пределами их специализациисовместим с AWS, Azure, Google Cloud и другими сервисамиподходит для разработки любого масштабаесть бесплатная версия для индивидуальных разработчиков и малых команд, а также платная с разширенными возможностями: интеграцией с другими программами, увеличенным количеством ивентов и возможностью подключить 5 и более разработчиков.Но мало написать приложение, для его работы нужно нужно создать инфраструктуру и управлять ей. В рамках подхода Infrastructure as Code с задачей её сборки и настройки лучше всего справляется инструмент декларативного управления инфраструктурой Terraform. С помощью него можно описать желаемую конфигурацию инфраструктуры и буквально одной командой сразу создать её, вместо ручного введения команд по отдельности.Также как и фреймворк Serverless, Terraform совместим с AWS, Azure и Google Cloud.