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

Azure Cosmos DB

Azure Cosmos DB — это глобально распределённая многомодельная система управления базами данных (СУБД), разработанная корпорацией Microsoft. Относится к классу NoSQL-баз данных и предназначена для обеспечения высокой доступности, низкой задержки доступа к данным и автоматического масштабирования в глобальном масштабе. Ключевая особенность Cosmos DB — поддержка нескольких моделей данных (документная, графовая, семейство столбцов, ключ-значение) и нескольких API, включая SQL API, MongoDB, Cassandra, Gremlin и Table.

История

Azure Cosmos DB была впервые представлена публике в мае 2017 года на конференции Microsoft Build. Проект изначально разрабатывался внутри Microsoft под кодовым названием «Project Olympus» и был создан для поддержки собственных глобальных сервисов компании, таких как Bing, Office 365 и Skype. Первоначально сервис назывался Azure DocumentDB и поддерживал только документную модель данных с API, похожим на SQL. С выпуском Cosmos DB Microsoft расширила функциональность, добавив поддержку других NoSQL-моделей и API.

В 2019 году Microsoft объявила о запуске Azure Cosmos DB Serverless, позволяющего платить только за потреблённые ресурсы без необходимости предварительного выделения пропускной способности. В 2021 году была добавлена поддержка Azure Synapse Link, позволяющая выполнять аналитические запросы непосредственно к данным Cosmos DB без копирования их в отдельное хранилище.

Архитектура и ключевые характеристики

Глобальное распределение

Основная архитектурная концепция Cosmos DB — глобальное распределение. База данных может быть развёрнута в любом количестве регионов Azure по всему миру. Данные автоматически реплицируются между выбранными регионами, обеспечивая низкую задержку чтения (менее 10 мс для чтения и менее 15 мс для записи в пределах одного региона) и высокую доступность (SLA 99,999% для чтения и 99,99% для записи). Пользователь может настроить политику согласованности данных и выбрать, какие регионы будут участвовать в репликации.

Модели данных и API

Azure Cosmos DB поддерживает несколько моделей данных через различные API:

  • SQL API (Core API): Документная модель, использующая SQL-подобный синтаксис для запросов. Это основной API, предоставляемый по умолчанию. Данные хранятся в формате JSON.
  • MongoDB API: Полностью совместим с протоколом MongoDB (версии 3.6 и 4.0). Позволяет приложениям, написанным для MongoDB, подключаться к Cosmos DB без изменения кода.
  • Cassandra API: Поддерживает протокол Apache Cassandra (версия 3.x). Позволяет использовать Cosmos DB как замену для кластеров Cassandra.
  • Gremlin API: Графовая модель данных, использующая язык запросов Apache TinkerPop Gremlin. Предназначена для работы с графами (узлы и рёбра).
  • Table API: Поддерживает протокол Azure Table Storage, предоставляя масштабируемое хранилище типа «ключ-значение» с возможностью запросов по ключу.

Уровни согласованности

В отличие от традиционных реляционных баз данных, которые обычно предлагают только строгую согласованность, Cosmos DB предоставляет пять чётко определённых уровней согласованности, которые пользователь может выбирать в зависимости от требований приложения:

  1. Strong (Строгая): Гарантирует, что все операции чтения увидят последнюю запись. Обеспечивает самую высокую согласованность, но самую высокую задержку.
  2. Bounded Staleness (Ограниченное устаревание): Чтения могут отставать от записей не более чем на заданное количество версий или интервал времени (например, не более 5 секунд).
  3. Session (Сессионная): Гарантирует, что в рамках одной сессии (например, пользовательской) клиент увидит все свои собственные записи. Это уровень по умолчанию.
  4. Consistent Prefix (Согласованный префикс): Гарантирует, что чтения никогда не увидят записи в неправильном порядке (например, сначала версию 2, потом версию 1).
  5. Eventual (Конечная): Самая слабая согласованность. Гарантирует, что в конечном итоге все реплики получат все записи, но в любой момент времени чтения могут вернуть устаревшие данные.

Производительность и единицы запросов (RU)

Производительность в Cosmos DB измеряется в единицах запросов (Request Units, RU). RU — это абстрактная единица, которая объединяет в себе потребление процессора, памяти и операций ввода-вывода. Каждая операция (чтение, запись, запрос) потребляет определённое количество RU. Пользователь может заранее выделить определённое количество RU в секунду для контейнера или базы данных. Автоматическое масштабирование позволяет динамически увеличивать или уменьшать выделенные RU в зависимости от нагрузки.

Классификация и виды

Azure Cosmos DB можно классифицировать по нескольким признакам:

  • По модели данных: Документная (SQL, MongoDB), графовая (Gremlin), столбцовая (Cassandra), ключ-значение (Table).
  • По способу распределения: Глобально распределённая база данных с возможностью выбора регионов.
  • По уровню управления: Полностью управляемый облачный сервис (PaaS — Platform as a Service). Пользователь не управляет серверами, операционной системой или обновлениями.
  • По типу использования: Операционные базы данных (OLTP — Online Transaction Processing) для приложений с высокой нагрузкой на чтение и запись.

Применение

Azure Cosmos DB используется в следующих сценариях:

  • Интернет-вещей (IoT): Обработка и хранение потоков данных от миллионов устройств.
  • Персонализация и рекомендации: Хранение профилей пользователей и их поведения для предоставления персонализированного контента.
  • Глобальные веб-приложения: Создание веб-сайтов и мобильных приложений, доступных пользователям по всему миру с низкой задержкой.
  • Системы управления контентом (CMS): Хранение и управление контентом для крупных медиа-порталов.
  • Финансовые услуги: Обработка транзакций и ведение реестров с высокой доступностью.
  • Игры: Хранение игровых данных, рейтингов и профилей игроков.

Критика

Несмотря на широкие возможности, Azure Cosmos DB подвергается критике по нескольким направлениям:

  • Стоимость: Модель ценообразования на основе RU может быть непредсказуемой для приложений с нестабильной нагрузкой. Высокая стоимость хранения данных по сравнению с некоторыми конкурентами (например, Amazon DynamoDB в определённых сценариях).
  • Сложность настройки: Настройка глобальной репликации, уровней согласованности и политик индексирования требует глубокого понимания архитектуры и может быть сложной для новичков.
  • Ограничения модели данных: Несмотря на поддержку нескольких моделей, Cosmos DB не является реляционной базой данных и не поддерживает полноценные SQL-запросы с JOIN и транзакциями ACID в том же объёме, что и традиционные СУБД.
  • Привязка к облаку: Сервис является проприетарным и тесно связан с экосистемой Microsoft Azure. Миграция на другую платформу может быть сложной и дорогостоящей.

Интересные факты

  • Azure Cosmos DB была использована для поддержки работы Cortana — голосового помощника Microsoft.
  • Технология TokuDB, лежащая в основе некоторых механизмов хранения Cosmos DB, была приобретена Microsoft в 2018 году.
  • Cosmos DB поддерживает автоматическое индексирование всех полей по умолчанию, что упрощает разработку, но увеличивает стоимость хранения.

Источники

  1. Microsoft Docs. «Introduction to Azure Cosmos DB».
  2. Microsoft Docs. «Consistency levels in Azure Cosmos DB».
  3. Microsoft Docs. «Request Units in Azure Cosmos DB».
  4. Статья «Azure Cosmos DB: The database of the future» на портале TechCrunch (2017).
  5. Официальный блог Microsoft Azure.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →