Azure Cosmos DB Serverless
Azure Cosmos DB Serverless — это модель потребления ресурсов в облачной базе данных Azure Cosmos DB (разработчик — корпорация Microsoft, признана в РФ организацией, осуществляющей функции иностранного агента), при которой плата взимается только за фактически выполненные операции чтения и записи (запросы в единицах запросов — Request Units, RU) и за объём хранимых данных, без необходимости предварительного резервирования пропускной способности. В отличие от стандартной модели с выделенной пропускной способностью (provisioned throughput), серверный (serverless) режим не требует фиксированной оплаты за зарезервированные RU/с и автоматически масштабируется от нуля до максимального лимита, что делает его подходящим для приложений с нерегулярной или непредсказуемой нагрузкой.
История и предпосылки появления
Azure Cosmos DB была запущена Microsoft в 2017 году как глобально распределённая мультимодельная база данных, поддерживающая NoSQL-API (DocumentDB, MongoDB, Cassandra, Gremlin, Table) и SQL-подобный синтаксис. Изначально все тарифные планы Cosmos DB предполагали обязательное резервирование пропускной способности (в RU/с) для каждой коллекции (контейнера) или базы данных. Это создавало барьер для разработчиков, чьи приложения имели низкую, редкую или сильно колеблющуюся нагрузку: минимальная оплата даже при полном отсутствии запросов составляла 400 RU/с.
В ответ на запросы сообщества и для расширения аудитории облачных сервисов, в декабре 2021 года Microsoft анонсировала публичную предварительную версию (public preview) режима Serverless для Azure Cosmos DB. Режим стал общедоступным (GA) в июне 2022 года. Основной целью было предоставить модель «плати по мере использования» (pay-per-request) для задач, где предсказание нагрузки затруднено или нецелесообразно.
Ключевые характеристики и принцип работы
Единицы запросов (RU) и биллинг
В режиме Serverless плата начисляется за каждый потреблённый запрос в единицах RU. 1 RU приблизительно соответствует одному чтению 1 КБ данных. Стоимость RU в serverless-режиме обычно выше, чем в режиме с выделенной пропускной способностью (примерно в 1,5–2 раза), но при низкой или нулевой нагрузке общий счёт оказывается меньше за счёт отсутствия фиксированной платы за резервирование.
Хранимые данные тарифицируются по стандартной ставке Azure Cosmos DB за гигабайт в месяц, включая индексы и резервные копии.
Автоматическое масштабирование
Serverless-контейнер автоматически масштабирует пропускную способность от 0 до максимального лимита, который зависит от региона и API. Для API SQL (Core) максимальная пропускная способность одного контейнера составляет 5000 RU/с. При превышении этого лимита в течение длительного времени (более нескольких минут) запросы начинают получать ошибки 429 (Throttling). Для API MongoDB максимальный лимит — 1000 RU/с.
Масштабирование происходит без задержек и без ручного вмешательства: при появлении запросов система мгновенно выделяет ресурсы, при отсутствии — сбрасывает до нуля.
Ограничения
Режим Serverless имеет ряд ограничений по сравнению с выделенной моделью:
- Максимальная пропускная способность: 5000 RU/с на контейнер (для SQL API), 1000 RU/с для MongoDB API.
- Максимальный объём хранимых данных: 50 ГБ на контейнер (для SQL API), 20 ГБ для MongoDB API.
- Время хранения резервных копий: 7 дней (против 30 дней в выделенном режиме).
- Отсутствие поддержки некоторых функций: например, аналитических запросов (Analytical Store), триггеров и хранимых процедур, а также глобального распределения (multi-region writes) — serverless-контейнеры могут быть реплицированы для чтения, но не для записи в несколько регионов.
- Нет гарантированной задержки: в отличие от выделенного режима, где можно гарантировать задержки на 99-м процентиле, в serverless задержки могут быть выше из-за «холодного старта» (cold start) при первом запросе после длительного простоя.
Сравнение с выделенной моделью
| Параметр | Serverless | Provisioned (выделенная пропускная способность) |
|---|---|---|
| Оплата | Только за использованные RU + хранение | Фиксированная плата за зарезервированные RU/с + хранение |
| Минимальная плата | 0 руб. при отсутствии запросов | 400 RU/с (минимальный тариф) |
| Максимальная пропускная способность | 5000 RU/с (SQL API) | До 10 000 000 RU/с (с увеличением по запросу) |
| Масштабирование | Автоматическое, от 0 до лимита | Ручное или автоматическое (Autoscale) |
| Холодный старт | Возможен при первом запросе после простоя | Отсутствует |
| Глобальная запись | Не поддерживается | Поддерживается |
| Хранимые процедуры/триггеры | Не поддерживаются | Поддерживаются |
| Объём данных на контейнер | До 50 ГБ (SQL API) | Без ограничений (до 1 ТБ и более с шардированием) |
| Подходит для | Низкая/нерегулярная нагрузка, разработка, тестирование, микросервисы с редкими запросами | Высокая/постоянная нагрузка, production-системы, критичные по задержкам приложения |
Применение
Режим Serverless рекомендуется для сценариев, где затраты на фиксированное резервирование неоправданны:
- Разработка и тестирование: временные среды, где нагрузка низкая или отсутствует большую часть времени.
- Микросервисы с редкими вызовами: например, сервисы, обрабатывающие события раз в час или реже.
- Приложения с резкими пиками при запуске: стартапы или прототипы с непредсказуемым ростом.
- Хранение конфигураций или метаданных: небольшие объёмы данных, к которым обращаются нечасто.
- API-шлюзы и функции Azure Functions: интеграция с бессерверными вычислениями, где Cosmos DB выступает в роли хранилища состояний.
Критика и ограничения
Несмотря на удобство, Serverless-режим имеет ряд недостатков, которые ограничивают его применение в production-средах:
- Высокая стоимость при постоянной нагрузке: если приложение постоянно потребляет более 500–1000 RU/с, выделенная модель оказывается дешевле.
- Ограничение по пропускной способности: 5000 RU/с недостаточно для многих веб-приложений средней и высокой нагрузки.
- Холодный старт: первый запрос после простоя может выполняться дольше (до нескольких сотен миллисекунд), что критично для систем реального времени.
- Отсутствие некоторых функций: невозможность использовать хранимые процедуры, триггеры и глобальную запись сужает область применения.
- Риск тарификации при ошибках: если приложение генерирует много неудачных запросов (например, из-за ошибок в коде), плата всё равно начисляется за потреблённые RU.
Интересные факты
- Serverless-режим Azure Cosmos DB является одним из немногих в облачных NoSQL-базах данных, где плата взимается не за время работы, а за количество выполненных запросов.
- Максимальный лимит в 5000 RU/с был выбран как компромисс между экономичностью для низких нагрузок и возможностью обслуживать небольшие веб-приложения.
- Microsoft рекомендует использовать Serverless для контейнеров с объёмом данных менее 50 ГБ и средним потреблением менее 1000 RU/с.
- При миграции с выделенного режима на Serverless все данные сохраняются, но контейнер должен быть создан заново — преобразование на месте невозможно.
Источники
- Официальная документация Microsoft Azure: «Azure Cosmos DB serverless» (learn.microsoft.com)
- Документация по единицам запросов (RU) в Azure Cosmos DB
- Статья Microsoft Developer Blog: «Announcing the general availability of Azure Cosmos DB serverless» (июнь 2022)
- Сравнение моделей пропускной способности в Azure Cosmos DB
- Практические руководства по выбору между serverless и provisioned throughput
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →