Открыть сервис

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) при первом запросе после длительного простоя.

Сравнение с выделенной моделью

ПараметрServerlessProvisioned (выделенная пропускная способность)
ОплатаТолько за использованные 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 →