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

Microsoft Azure Cosmos DB

Microsoft Azure Cosmos DB — это глобально распределённая многомодельная система управления базами данных (СУБД), предоставляемая как облачный сервис (Database-as-a-Service, DBaaS) в составе платформы Microsoft Azure. Служба разработана для обеспечения эластичного масштабирования пропускной способности и хранилища, поддержки нескольких моделей данных (документная, графовая, семейство столбцов, ключ-значение) и гарантированной задержки на чтение и запись на уровне миллисекунд, независимо от географического расположения данных.

История

Разработка Cosmos DB началась в 2010 году под кодовым названием «Project Florence» как внутренняя система Microsoft для поддержки глобально распределённых приложений, таких как Office 365, Skype и Bing. Основной задачей было создание базы данных, способной обрабатывать огромные объёмы данных с низкой задержкой в глобальном масштабе. В 2014 году система была переименована в Azure DocumentDB и выпущена как публичный облачный сервис с поддержкой документной модели (JSON). В мае 2017 года на конференции Microsoft Build была анонсирована Azure Cosmos DB как эволюция DocumentDB с расширенной поддержкой нескольких моделей данных, глобального распределения и нескольких API-интерфейсов.

Архитектура и принципы работы

Физическая архитектура

Cosmos DB использует распределённую архитектуру на основе контейнеров (коллекций, графов, таблиц), которые автоматически реплицируются между географически распределёнными регионами. Физически данные хранятся на твёрдотельных накопителях (SSD) в дата-центрах Microsoft Azure. Каждый контейнер делится на логические разделы (partitions), которые автоматически распределяются по физическим серверам. При увеличении нагрузки система автоматически создаёт новые разделы и перераспределяет данные.

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

Ключевая особенность Cosmos DB — возможность глобального распределения данных с несколькими моделями согласованности. Пользователь может выбрать любое количество регионов Azure для размещения реплик. Система поддерживает автоматическую репликацию данных между регионами с возможностью переключения на другой регион в случае отказа (автоматическое аварийное восстановление). Для управления распределением используется протокол репликации на основе консенсуса, оптимизированный для глобальных сетей.

Модели согласованности

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

  • Strong (сильная) — гарантирует, что все операции чтения возвращают последнюю запись. Требует репликации на все регионы, что увеличивает задержку.
  • Bounded staleness (ограниченное устаревание) — чтение может отставать от записи на заданное количество операций (K) или время (T). Обеспечивает глобальный порядок операций.
  • Session (сессионная) — в рамках одной сессии клиента чтение гарантированно видит свои собственные записи. Наиболее часто используемая модель.
  • Consistent prefix (согласованный префикс) — гарантирует, что чтение никогда не увидит операций в неправильном порядке, но может пропустить некоторые записи.
  • Eventual (конечная) — не даёт никаких гарантий порядка, но в конечном итоге все реплики приходят к одному состоянию. Обеспечивает минимальную задержку.

Поддержка моделей данных и API

Cosmos DB является многомодельной, что означает, что одни и те же данные могут быть доступны через разные API без изменения хранилища. Поддерживаются следующие API:

Основные характеристики

Эластичное масштабирование

Пропускная способность (количество операций чтения/записи в секунду) и объём хранилища масштабируются независимо. Пользователь выделяет количество единиц запросов (Request Units, RU) в секунду на контейнер или базу данных. Одна RU приблизительно соответствует 1 КБ данных при чтении документа. Система автоматически распределяет нагрузку по разделам.

Гарантированная производительность

Cosmos DB предоставляет соглашение об уровне обслуживания (SLA), гарантирующее задержку на чтение менее 10 мс и на запись менее 15 мс для документов размером до 1 КБ. Для глобально распределённых конфигураций гарантируется задержка на чтение менее 10 мс в 99-м перцентиле. Также гарантируется доступность 99,99% для конфигураций с несколькими регионами.

Безопасность и соответствие

Сервис поддерживает шифрование данных в покое и в пути, аутентификацию через ключи доступа или Azure Active Directory, а также интеграцию с виртуальными сетями Azure (VNet). Cosmos DB соответствует многочисленным стандартам, включая ISO 27001, SOC 1/2/3, HIPAA, GDPR и FedRAMP.

Применение

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

  • Интернет вещей (IoT) — сбор и обработка данных с миллионов устройств.
  • Игровая индустрия — хранение профилей игроков, игровых состояний и таблиц лидеров.
  • Электронная коммерция — управление каталогами товаров, корзинами покупок и транзакциями.
  • Социальные сети и мессенджеры — хранение сообщений, лент новостей и профилей пользователей.
  • Финансовые услуги — обработка транзакций, управление рисками и аналитика в реальном времени.
  • Бэкенд для мобильных приложений — синхронизация данных между устройствами и сервером.

Ограничения и критика

Несмотря на широкие возможности, Cosmos DB имеет ряд ограничений:

  • Стоимость — сервис считается одним из самых дорогих среди облачных баз данных, особенно при высоких требованиях к пропускной способности (RU). Оптимизация запросов для снижения потребления RU является критически важной задачей.
  • Сложность модели RU — единица запросов (RU) не является интуитивно понятной и требует тщательного планирования и профилирования для точной оценки затрат.
  • Ограничения на размер документа — максимальный размер одного документа составляет 2 МБ.
  • Отсутствие нативной поддержки транзакций ACID — транзакции поддерживаются только в рамках одного логического раздела (контейнера). Глобальные транзакции между разделами не поддерживаются.
  • Зависимость от экосистемы Azure — сервис доступен только в облаке Microsoft Azure, что может быть проблемой для мультиоблачных стратегий.

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

  • Cosmos DB является одной из немногих облачных баз данных, которая предоставляет гарантии производительности на уровне SLA, включая задержку и доступность.
  • Внутренняя версия Cosmos DB, используемая для Office 365 и Skype, обрабатывает более 10 миллиардов запросов в день.
  • Протокол репликации Cosmos DB, известный как «Tardigrade», был разработан для обеспечения глобальной согласованности с минимальной задержкой.

Источники

  • Документация Microsoft Azure: «Azure Cosmos DB — глобально распределенная многомодельная база данных».
  • Статья «Azure Cosmos DB: The Database of the Future» — Microsoft Research, 2017.
  • Официальные спецификации SLA для Azure Cosmos DB.
  • Материалы конференции Microsoft Build 2017 — анонс Azure Cosmos DB.
  • Статья «Understanding Request Units in Azure Cosmos DB» — Microsoft Docs.

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

На главную BFOmetr →