Бессерверные сервисы облачных вычислений появились в 2014 году с AWS Lambda, которая позволяла запускать код без выделения серверов или управления ими. AWS Lambda — пример функции как услуги (FaaS), где результат обработки событий не зависит от состояния памяти сервера и содержимого локальной файловой системы. Такие эластичные вычисления позволяли быстро наращивать и высвобождать ресурсы процессоров, памяти и средств хранения без необходимости что-то планировать и предпринимать меры для обработки пиковых нагрузок.
За AWS Lambda быстро последовали решения от Microsoft Azure и Google Cloud. Позже облачные провайдеры начали предлагать и другие услуги в бессерверной форме. Это последний, новый взгляд на облачные сервисы, и на практике бессерверные архитектуры за счет возможностей масштабирования часто обходятся в разы дешевле, чем постоянные серверы, предназначенные для выполнения тех же нагрузок.
Сейчас бессерверных решений все больше, в том числе пару лет назад появились и первые проекты в России. На Хабре о бессерверных вычислениях есть раздел, но куда менее популярный, чем он того заслуживает. Попытаемся это исправить.
Итак, Serverless. Крупным планом.
Что значит бессерверность?
Несмотря на название, бессерверность не означает, что серверы не используются. Просто вам не нужно заказывать и поддерживать выделенные машины как таковые. Не нужно управлять инфраструктурой, мониторить ее, конфигурировать, распределять ресурсы. Когда на бессерверную службу придет запрос на выполнение кода, облачный провайдер просто выделит специально под его обработку виртуальную машину или модуль (набор контейнеров, обычно управляемых Kubernetes). А когда выполнение бессерверного кода завершится, выделенные ресурсы возвратятся в общий пул. Вы платите только за реально затраченные ресурсы серверов — в зависимости от потребовавшихся мощностей и времени активности процесса.
Бессерверные функции могут вызывать друг друга (или другие службы), записывать информацию в общие файловые системы и базы данных. Одним из их самых больших технических преимуществ является невероятная масштабируемость. В отличие от выделенных серверов, которые могут быть перегружены скачками трафика, новые бессерверные модули или виртуальные машины просто запускаются для каждого нового события, которое в них нуждается. Любой пик трафика проходится автоматически. А когда ресурсы становятся не нужны, все они автоматически возвращаются в пул.
Что происходит, когда модуль подходящего размера недоступен в пуле при поступлении очередного запроса? Облачный провайдер просто создает новый. Правда, может возникать некоторая задержка в обработке запроса, вплоть до нескольких секунд. Если такая большая задержка является проблемой для вашего use case, можно заплатить, чтобы некоторые функции всегда были инициализированы и готовы к ответу. AWS, например, называет эту услугу Provisioned Concurrency. У других облачных провайдеров названия другие, но смысл один и тот же: они полагаются на предзагрузку некоторых функций, чтобы уменьшить задержку их ответа до сотен миллисекунд даже в крайнем случае. Как говорит сама Amazon, это идеально подходит для реализации интерактивных сервисов, в том числе веб-серверов для мобильных устройств, чувствительных к задержкам микросервисов или синхронных API.
Бессерверные функции и службы обычно показывают очень высокую стабильность, так как для их обработки провайдеры выделяют избыточные вычислительные мощности, распределенные физически. И нет никакой разницы, какая именно из машин будет обрабатывать код. Вероятность потерять всё при сгорании одного ЦОД — стремится к нулю.
В дополнение к бессерверным услугам от провайдеров существует множество разных независимых платформ и SDK, предназначенных для создания бессерверных приложений. В том числе Kubeless, Pulumi, OpenFaaS, OpenWhisk и Serverless Framework.
Детальнее о принципах работы бессерверных архитектур можно почитать в этой статье (англ.).
Чем отличаются бессерверные базы данных
По словам Джима Уокера из Cockroach Labs, создателя CockroachDB, бессерверная база данных работает на основании девяти основных принципов:
- Практически полное отсутствие ручного управления сервером
- Автоматическое гибкое масштабирование приложений и сервисов
- Встроенная отказоустойчивость и изначально отказоустойчивый сервис
- Всегда в наличии + мгновенный доступ
- Механизм выставления счетов за услуги на основе потребления
- Возможность выжить в случае любого отказа
- Географический масштаб, распределенность
- Гарантии транзакции
- Элегантность реляционного SQL
При этом принципы 1-5 являются основными, их можно применить по отношению к любой бессерверной службе. А принципы 6-9 относятся только к глобальным базам данных SQL.
Традиционным способом подключения к большинству баз данных является установление постоянного TCP-соединения от клиента к серверу. Но для бессерверных баз данных это не подходит: настройка TCP-соединения для обработки каждой функции может занять чересчур много времени. В идеале клиент должен подключаться к бессерверной конечной точке почти мгновенно (менее 100 мс) и получать ответ на свой запрос в течение секунды. Чтобы обеспечить это, некоторые бессерверные БД (например, Amazon Aurora Serverless) поддерживают соединения HTTP (HTTPS) и работают над пулом соединений, необходимым для поддержки масштабирования и создания практически мгновенных соединений.
Как бессерверные БД могут сэкономить вам деньги
Традиционные базы данных должны быть рассчитаны на максимальную ожидаемую нагрузку запросов. А значит, и деньги на ее поддержку тратятся «по максимуму». Если же БД можно масштабировать вверх и вниз без необходимости переноса данных, можно экономить деньги, увеличивая нагрузку ЦП в периоды высокой нагрузки и уменьшая ее в периоды низкой нагрузки.
В бессерверной архитектуре клиент платит не за резервируемые (по максимуму) мощности, а за конкретные операции чтения, записи, удаления или время активной работы модулей. Что позволяет с легкостью проходить пиковые периоды, и не терять лишние деньги во время «застоя». Также этот подход позволяет более точно рассчитать экономику проекта в условиях невозможности точно спрогнозировать его масштабы. Снимается большая боль бизнеса — оплата мощностей за время простоя. Можно платить только за те вычисления, которые действительно были проведены.
Бессерверные базы данных обычно вообще не нуждаются в изменениях размеров. Вы не платите за мощности, пока не отправляется запрос, а когда он отправляется, вы получаете столько ресурсов, сколько нужно для выполнения вашего запроса. Затем плата взымается за использованную мощность, помноженную на время активности БД. Вы платите только за те вычисления, которые вам нужны, и, в зависимости от масштаба и характера вашего трафика, это может стать для вас огромным экономическим преимуществом. По данным Amazon, вы можете сэкономить до 90% стоимости поддержки вашей базы данных с помощью Aurora Serverless.
Бессерверные архитектуры выигрывают от значительного снижения эксплуатационных расходов, сложности и времени разработки. Но взамен вы увеличиваете зависимость от конкретных поставщиков и можете не получить полного пакета услуг, к которому привыкли — из-за сравнительной молодости всей экосистемы.
В каких случаях бессерверные БД не оптимальны
Рекомендуемые варианты использования бессерверных баз данных — это случаи переменных или непредсказуемых рабочих нагрузок, управления парком корпоративных баз данных, приложения «ПО как услуга» и масштабируемые базы данных, разделенные на несколько серверов.
Но у serverless есть и минусы. Так, из-за отсутствия стандартизации любые бессерверные функции, которые вы используете у одного поставщика, другим поставщиком будут реализованы слегка по-другому. И если вы захотите сменить поставщика, вам почти наверняка потребуется обновить свои операционные инструменты и, вероятно, модифицировать свой код (например, чтобы удовлетворить другой интерфейс FaaS). Может, даже потребуется изменить дизайн или архитектуру, поскольку у конкурирующих поставщиков услуг есть серьезные отличия в реализации.
Ну и конечно, если пиковых нагрузок и периодов затухания нет, главного преимущества serverless вы лишаетесь. Базы данных с предсказуемой и постоянной нагрузкой проще и дешевле обрабатывать путем развертывания традиционных серверов. Даже те БД, которые сильно загружены в рабочие дни и потом простаивают в выходные и праздничные дни, обычно лучше обрабатываются серверами, а не бессерверными системами — при условии, что вы отключаете серверы на каждые выходные и праздники. Несмотря на развитие serverless, такой подход в основном остается более рентабельным.
Но бессерверные вычисления — это все еще довольно новый, неизведанный мир. Имеющиеся недостатки здесь постепенно устраняются, экосистема развивается, а преимущества технологии становятся все более очевидными.
Примеры бессерверных баз данных
На момент написания этой статьи свободно доступны не так много бессерверных баз данных. Некоторые, как, например, MongoDB Atlas, предлагают бессерверные функции пока только в формате превью. Но большинство лидеров, следуя за Amazon, вышли со своими serverless-решениями. Так что выбрать уже есть из чего.
Amazon Aurora Serverless
Автоматически масштабируемая конфигурация, доступная по требованию для Amazon Aurora. Предполагает автоматическое подключение, отключение и масштабирование ресурсов в зависимости от потребностей приложения. Позволяет запускать базу данных в облаке, исключая необходимость управления ее ресурсами вручную. Достаточно создать адрес сервера базы данных, указать желаемые пределы изменения ресурсов БД и подключить нужные приложения.
Совместима с MySQL и PostgreSQL. Является частью сервиса Amazon Relational Database Service (RDS), поэтому есть интеграции с MariaDB, Oracle и SQL Server.
Плата за ресурсы начисляется на посекундной основе. При этом между конфигурациями Standard и Serverless можно быстро переключиться в консоли управления Amazon RDS.
Amazon DynamoDB
Полностью управляемая бессерверная база данных NoSQL, предназначенная для запуска высокопроизводительных приложений любого масштаба. Предлагает встроенную защиту, непрерывное резервное копирование, автоматическую репликацию в нескольких регионах, кэширование в памяти и удобные инструменты экспорта данных.
Azure SQL Database Serverless
Это версия Microsoft SQL Server, которая автоматически масштабирует вычислительные ресурсы в зависимости от вашей рабочей нагрузки. Счета выставляются за количество вычислений, используемых в секунду. При этом платформа автоматически приостанавливает работу баз данных в периоды неактивности, и тогда выставляет счета только за их хранение. При восстановлении активности работа БД автоматически возобновляется.
Как и AWS, Azure предлагает 1 миллион вызовов и 400 000 ГБ-секунд бесплатно каждый месяц. Дальше — по 20 центов за каждый последующий миллион вызовов
Azure Synapse Serverless
Позволяет использовать T-SQL для запроса данных из озера данных в Azure, а не выделять под это ресурсы заранее. Вы платите только за выполненные запросы, а стоимость зависит от объема данных, обработанных каждым запросом.
CockroachDB Serverless
Бесплатная опция, которая в настоящее время находится в стадии бета-тестирования в облаке Cockroach Labs, совместимом с PostgreSQL. Может использовать высокодоступные кластеры в AWS или Google Cloud в многопользовательской конфигурации. Ограничения для бесплатного использования: 250 млн запросов в месяц и 5 ГБ для хранения.
Fauna
Гибкая, удобная для разработчиков транзакционная база данных, предоставляемая в виде безопасного и масштабируемого бессерверного облачного API с собственным GraphQL. Сочетает в себе гибкость систем NoSQL с реляционными запросами и транзакционными возможностями БД SQL. Поддерживает как язык запросов Fauna, так и GraphQL.
Google Cloud Firestore
Бессерверная документно-ориентированная база данных NoSQL, которая является частью Google Firebase. В отличие от базы данных SQL, в Cloud Firestore нет таблиц или строк. Вместо этого вы храните данные в документах, которые организованы в коллекции. Каждый документ содержит набор пар ключ-значение.
Cloud Firestore оптимизирован для хранения больших коллекций небольших документов. Все документы должны храниться в коллекциях. Документы могут содержать вложенные коллекции и вложенные объекты, которые могут включать в себя примитивные поля, например, строки, и сложные объекты, такие как списки.
СУБД разработана в качестве замены Realtime Database с возможностью быстрых запросов и масштабирования. Вкупе с нативными SDK и удобной аутентификацией, Google рассчитывает, что этот вариант займет свою нишу в сфере мобильных и веб-приложений, которые планируют не выходить за лимиты масштабирования.
PlanetScale
Совместимая с MySQL бессерверная платформа базы данных на базе Vitess. Vitess — это система кластеризации баз данных для горизонтального масштабирования MySQL (а также Percona и MariaDB). Vitess также поддерживает Slack, Square, GitHub, YouTube и многое другое.
Yandex Database
Уже полтора года при создании базы данных в YDB можно выбрать один из двух режимов работы: Serverless или Dedicated. Режим потом не может быть изменен. Бессерверная Yandex Database — это распределённая NewSQL СУБД. Она поддерживает реляционную модель данных и оперирует таблицами с предопределённой схемой.
Работает язык запросов YQL (Yandex Query Language), диалект SQL. API сервиса в режиме бессерверных вычислений совместим с API Amazon DynamoDB, с помощью него можно выполнять операции над документными таблицами.
Подробнее на Хабре информация по YDB есть тут.
Oracle Cloud Functions
Одна из очень свежих бессерверных платформ, первой реализации меньше двух лет. Выгодный вариант, если запросов у вас не очень много. Первые 2 миллиона вызовов функций в месяц — бесплатно, дальше вы платите по $0,2 за каждый последующий миллион (для сравнения, у MongoDB будет $0,3 за 5 млн). Функции интегрируются с Oracle Cloud Infrastructure, сервисами платформы и приложениями SaaS. Поскольку Cloud Functions основан на проекте Fn с открытым исходным кодом, разработчики могут создавать приложения, которые можно легко переносить в другие облачные и локальные среды.
Redis Enterprise Cloud
Полностью управляемая бессерверная база данных, работающая в AWS, Azure и Google Cloud. Корпоративные модули могут расширять Redis из простого хранилища структуры данных типа «ключ-значение» до мощного инструмента с поддержкой JSON и искусственного интеллекта.
Redis Enterprise выполняет автоматическое повторное сегментирование и перебалансировку, сохраняя при этом низкую задержку и высокую пропускную способность для транзакционных нагрузок. Функция Redis on Flash (RoF) позволяет размещать часто используемые данные в памяти, чтобы дополнительно уменьшить задержку при их вызове. Но бесплатного хранилища здесь предлагается всего 30 МБ.
Как видим, бессерверные базы данных предлагают высокомасштабируемое облачное хранилище, не требуя от вас никакой предварительной подготовки. Все они предлагают оплачивать только то, что вы используете, а многие, пытаясь приманить пользователей, на небольших объемах даже являются полностью бесплатными — особенно если вас устраивает ограниченная максимальная скорость обработки запросов.
Бессерверные БД отлично подходят для небольших мобильных и веб-приложений, для тестирования MVP, для стартапов. Возможность быстро и дешево доставлять решения на рынок, а потом масштабировать их в зависимости от фактического спроса, дает огромное конкурентное преимущество.
В то же время бессерверные решения подходят не всем, поэтому будьте осторожны с теми, кто говорит, что они заменят все ваши существующие архитектуры. Сложная отладка, проблемы с мониторингом, зависимость от конкретного поставщика услуг и возможное повышение задержки при росте количества запросов означают, что для крупных и устоявшихся систем, с сотнями миллионов обращений к БД ежедневно, традиционные решения окажутся более предпочтительными.
Промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HabrFIRSTVDS.
Более 50 тысяч активных серверов и 10 тысяч клиентов, которые с нами больше 5 лет.