Базы данных без серверов: глубокое погружение в Dynamodb и Cosmos Db

Безсерверные базы данных: глубокое погружение в DynamoDB и Cosmos DB

Рост бессерверных вычислений коренным образом изменил то, как организации создают и развертывают приложения. Абстрагируясь от управления серверами, разработчики могут сосредоточиться на написании кода и предоставлении функций, а не на предоставлении оборудования. Среди наиболее важных компонентов в этой парадигме - безсерверные базы данных, которые предлагают масштабирование по требованию, ценообразование с оплатой за использование и высокую доступность без эксплуатационных накладных расходов. Два ведущих облачных провайдера предлагают мощные решения для баз данных без серверов: Amazon DynamoDB (AWS) и Azure Cosmos DB (Microsoft). Оба полностью управляемые, глобально распределенные базы данных NoSQL, но они отличаются архитектурой, моделями согласованности, индексацией и интеграционными экосистемами. Это глубокое погружение подробно исследует каждую услугу, сравнивает их сильные стороны и компромиссы и дает рекомендации по выбору правильного инструмента для вашей рабочей нагрузки.

Что такое бессерверные базы данных?

Безсерверные базы данных - это службы баз данных, которые автоматически обрабатывают инфраструктурные задачи, такие как предоставление, масштабирование, патчирование и резервное копирование. Термин «безсерверные» не означает, что серверы не существуют; скорее, облачный провайдер управляет ими полностью, предоставляя только конечную точку базы данных для приложения. Ресурсы масштабируются и уменьшаются автоматически на основе спроса, а выставление счетов основано на потреблении - обычно оплачивают используемое хранилище и количество выполняемых операций чтения / записи.

Эта модель особенно выгодна для приложений с переменным или непредсказуемым трафиком, таких как флэш-продажи электронной коммерции, проникновение датчиков IoT, мобильные бэкэнд-сервисы и архитектуры, управляемые событиями. Безсерверные базы данных устраняют планирование емкости, снижают затраты на простои и упрощают разработку, предоставляя оптимизированные для задержки API и встроенную репликацию. Однако они также вводят компромиссы: стоимость может стать трудно прогнозируемой при очень высокой пропускной способности, а отсутствие контроля над базовым оборудованием может осложнить определенные оптимизации производительности или пути миграции.

Amazon DynamoDB – столп AWS Serverless

Amazon DynamoDB - это полностью управляемая база данных ключей и документов NoSQL, которая обеспечивает однозначную задержку в миллисекунде в любом масштабе. Запущенная в 2012 году, она стала базой данных по умолчанию для многих приложений без серверов AWS, бесшовно работая с Lambda, API Gateway, Step Functions и Kinesis. DynamoDB поддерживает как в конечном итоге последовательные, так и сильно согласованные чтения и предлагает такие функции, как глобальные таблицы, автомасштабирование, емкость по требованию, потоки DynamoDB для захвата данных об изменениях и глобальные вторичные индексы (GSI).

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

Модель ценообразования

Ценообразование DynamoDB основано на режиме емкости. Предусмотренная емкость требует, чтобы вы указали единицы пропускной способности для чтения и записи (RCUs / WCUs). Вы платите почасовую ставку за единицу, плюс затраты на хранение ($0,25 ГБ / месяц). Автомасштабирование регулируется в установленных вами пределах. Потребность в емкости Плата за миллион единиц запроса на чтение / запись (RRUs / WRUs) и включает в себя премию за эластичность. Хранение, передача данных, репликация глобальных таблиц, DAX, потоки и резервное копирование оплачиваются отдельно. Для пиковых рабочих нагрузок, по требованию, обычно дешевле; для устойчивых потоков, обеспеченный уровень бесплатно 25 ГБ хранения и 200 миллионов запросов в месяц (для новых учетных записей).

Случаи общего использования

Ограничения и соображения

Хотя DynamoDB является мощным, DynamoDB не подходит для всех. Его возможности запроса ограничены: вы можете запрашивать только по первичному ключу (или GSI) и дополнительным условиям диапазона. Комплексные соединения, агрегация и полнотекстовый поиск требуют внешних услуг, таких как Elasticsearch или Aurora. Максимальный размер элемента 400 КБ может быть ограничительным для больших документов. Глобальные таблицы в конечном итоге могут быть сложными: недооценка пропускной способности приводит к дросселированию, в то время как чрезмерное предоставление приводит к потере денег. Сильно последовательные чтения ограничены основной копией (недоступной во вторичных регионах). Отсутствие собственного безсерверного интерфейса SQL (например, PartiQL DynamoDB) иногда рассматривается как кривая обучения для команд, привыкших к реляционным базам данных.

Официальная документация Amazon DynamoDB

Azure Cosmos DB – глобальная распределенная многомодельная база данных

Microsoft Azure Cosmos DB - это полностью управляемая база данных NoSQL, предназначенная для критически важных приложений, которые требуют глобального распространения, эластичного масштабирования и нескольких моделей согласованности. В отличие от DynamoDB, Cosmos DB является многомодельной из коробки: он поддерживает документ (SQL API), ключевое значение (Table API), граф (Gremlin API), семейство столбцов (Cassandra API) и MongoDB API. Эта гибкость позволяет разработчикам использовать знакомые языки запросов, извлекая выгоду из базовой глобальной репликации Cosmos DB и гарантий SLA под ключ.

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

  • Многомодель и много-API: Вы можете выбрать между NoSQL (документ), MongoDB, Cassandra, Gremlin (граф) и Table API. Все API находятся на одном ядре — движке Cosmos DB — поэтому они разделяют пропускную способность, индексацию и глобальное распределение.
  • Глобальное распределение (под ключ): С помощью нескольких кликов или строк кода можно реплицировать данные в любое количество регионов Azure. Cosmos DB поддерживает многорегиональные записи (active-active) с автоматическим разрешением конфликтов.
  • Пять четко определенных уровней согласованности: Сильная, ограниченная несвежесть, сессия, согласованный префикс и Eventual. Вы можете выбрать уровень по запросу, уравновешивая производительность с гарантиями согласованности.
  • Автоматическая индексация: По умолчанию все свойства элементов индексируются без определения схемы вручную. Это ускоряет произвольные запросы, но вы можете настроить политику индексации для снижения потребления RU.
  • Единицы запросов (RUs): Cosmos DB использует унифицированную пропускную способность, измеряемую в единицах запросов в секунду. 1 RU соответствует чтению в 1 КБ. Считывания быстрее (1 RU за чтение), чем записи (5 RU за 1 КБ записи). Вы обеспечиваете пропускную способность на контейнер или базу данных или используете режим без сервера (автомасштаб).
  • SLA гарантирует: 99,999% доступность чтения, 99,999% пишет для многорегионального, и <10 мс задержка для чтения и записи на P99 (в пределах той же области).
  • Изменение питания: Постоянный, упорядоченный журнал изменений элементов, который может быть использован Azure Функциями или другими процессорами для событийных архитектур.
  • Аналитический магазин: Встроенный столбчатый магазин для запуска крупномасштабных аналитических запросов без влияния на транзакционные рабочие нагрузки (с использованием Synapse Link).

Модель ценообразования

Ценообразование Cosmos DB основано на обеспеченной пропускной способности (RU) и потребленном хранилище. Вы также можете использовать режим без сервера (обзор на момент написания), где вы платите за потребленные RU и хранилище, масштабирование до нуля при холостом режиме. Обеспеченная пропускная способность может быть установлена на контейнер или на базу данных. Автомасштаб позволяет установить максимальный предел RU и система настраивается в этом диапазоне. Стоимость хранения примерно $0,25 ГБ / месяц (аналог DynamoDB). Расходы на передачу данных для многорегиональной репликации являются дополнительными. Cosmos DB обеспечивает бесплатный уровень 1000 RU / с и 25 ГБ хранилища для первой учетной записи за подписку.

По сравнению с DynamoDB, RU-моделирование Cosmos DB является более детальным и может быть более сложным для оценки, особенно для многомодельных рабочих нагрузок. Однако автоматическая индексация и настраиваемая согласованность могут уменьшить общие RU, необходимые, особенно для приложений с большим объемом чтения, которые могут выдерживать возможную согласованность.

Случаи общего использования

  • Приложения Enterprise SaaS: Многоарентные системы, требующие геораспределенного доступа с низкой задержкой и сильных SLA.
  • IoT и временные ряды: Проглатывание данных датчиков высокой скорости с глобальными представлениями.
  • Платформы электронной коммерции: Каталоги товаров, корзины покупок, управление заказами, с многорегиональными активными развертываниями.
  • Аналитика в реальном времени: Использование коммутатора изменений и Synapse Link для управления приборными панелями и моделями машинного обучения.
  • Графические приложения: Социальные сети, рекомендательные движки и графы знаний через Gremlin API.

Ограничения и соображения

Широта Cosmos DB поставляется с кривой обучения. Модель RU требует тщательного планирования: вы платите за выделенную емкость даже при простое время (если не используете безсерверное). Эффективное выполнение произвольных запросов часто зависит от автоматической индексации, но плохо разработанные индексы могут взорвать стоимость RU. Запросы с перекрёстным разделом менее эффективны, потому что они касаются каждого раздела. Сильно согласованные чтения и многорегиональные записи увеличивают задержку и стоимость. Аналитический магазин доступен только для SQL API и MongoDB API. Cosmos DB привязан к экосистеме Azure; интеграция с другими облаками или локальными объектами может быть более сложной. Предел размера объекта составляет 2 МБ (против 400 КБ DynamoDB). Как управляемый сервис, у вас нет прямого контроля над ОС, версией движка базы данных или аппаратным обеспечением.

Официальная документация Azure Cosmos DB

Сравнение голов с головами: DynamoDB против Cosmos DB

Выбор между этими двумя безсерверными базами данных зависит от вашего существующего облачного провайдера, характеристик рабочей нагрузки и конкретных требований к функциям. Ниже приведено структурированное сравнение по ключевым измерениям.

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

DynamoDB в первую очередь имеет ключевое значение и документ. Он использует собственный API (AWS SDK) вместе с PartiQL (SQL-совместимый язык запросов). Cosmos DB предлагает пять API: SQL (документ), MongoDB, Cassandra, Gremlin (граф) и Table. Это дает Cosmos DB явное преимущество для команд, желающих использовать существующие драйверы или мигрировать из других баз данных NoSQL без переписывания запросов.

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

Обе поддерживают многорегиональную репликацию. DynamoDB использует Global Tables с возможной согласованностью (или сильной только в пределах одного региона). Cosmos DB обеспечивает многорегиональные записи с несколькими уровнями согласованности, в том числе сильные по регионам (хотя и с задержкой). Глобальное управление распределением Cosmos DB проще с портала.

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

DynamoDB предлагает два: конечный и сильный. Cosmos DB предлагает пять: возможный, последовательный префикс, сеанс, ограниченная несвежесть и сильный. Более тонкая гранулярность позволяет Cosmos DB оптимизировать стоимость и производительность для конкретных случаев использования (например, согласованность на уровне сеанса для корзин электронной коммерции очень популярна).

Запросы и индексация

DynamoDB требует, чтобы вы определили первичный ключ и необязательный ключ сортировки; он автоматически индексирует первичные ключи и GSI. Вы также можете создавать редкие индексы. Специальный запрос ограничен. Cosmos DB автоматически индексирует все свойства по умолчанию, позволяя произвольные запросы без предварительного определения схемы. Это делает Cosmos DB более гибким для поисковых запросов, но может увеличить стоимость RU для рабочих нагрузок с высокой записью.

Пропускная способность и ценовая гранулярность

DynamoDB использует RCU/WCU — считывания составляют половину стоимости записей (1 RCU за 4 КБ, 1 WCU за 1 КБ). Cosmos DB использует RU — 1 RU = 1 КБ считывания, 5 RU за 1 КБ записи. Стоимость RU Cosmos DB варьируется в зависимости от уровня согласованности и индексируемых свойств. Заряды DynamoDB по требованию на единицу запроса, в то время как безсерверные (предварительные) сборы Cosmos DB за потребленный RU. В целом, DynamoDB дешевле для простых рабочих нагрузок с ключевым значением, в то время как Cosmos DB может быть более экономически эффективным для сложных запросов и глобального распространения из-за автоматической индексации, уменьшающей потребность во вторичных индексах.

Экосистемная интеграция

DynamoDB глубоко интегрирован с AWS (Lambda, API Gateway, Kinesis, CloudWatch, CloudTrail, IAM). Cosmos DB естественным образом интегрируется с Azure (функции, логические приложения, Event Hubs, Synapse, Power BI). Оба предлагают каналы изменений и триггеры, управляемые событиями. Выбор часто сводится к тому, в какого облачного провайдера ваша организация инвестирует.

SLA и ограничения

Cosmos DB предлагает комплексные SLA для задержки (P99 < 10 мс считывает / записывает под 1 КБ), пропускной способности (высокая доступность) и согласованности (для сильных). DynamoDB рекламирует однозначную миллисекундную задержку и 99,999% доступность для глобальных таблиц, но не предлагает формальную задержку SLA. Cosmos DB также имеет максимальное хранилище на контейнер 20 ТБ (или неограниченное с разделением разделов), в то время как DynamoDB имеет предел размера элемента 400 КБ и 10 ГБ на жесткий предел раздела (хотя вы можете масштабировать разделы).

Когда выбрать какой?

Руководство для разработчиков DynamoDB | Введение в Cosmos DB

Лучшие практики для внедрения базы данных без сервера

Независимо от того, какую базу данных вы выберете, следование проверенным шаблонам поможет вам избежать распространенных ошибок:

Дизайн для разделения

В DynamoDB и Cosmos DB критически важен дизайн ключа раздела. Горячие разделы (где один ключ получает непропорциональное движение) дроссельной пропускной способности. Используйте клавиши высокой степени кардинальности (например, идентификатор пользователя, идентификатор устройства) и рассмотрите возможность записи шардинга для последовательных идентификаторов. В Cosmos DB вы можете разделять на пути /partitionKey; в DynamoDB ключ раздела выбирается при создании таблицы.

Использование Change Data Capture

Как DynamoDB Streams, так и Cosmos DB Change Feed позволяют создавать шаблоны, основанные на событиях. Используйте их для репликации данных в поисковых системах (Elasticsearch), создания материализованных просмотров, синхронизации со складами данных или запуска процессов нисходящего потока. Это снижает нагрузку на первичную базу данных и услуги разъединения.

Поймите свои потребности в последовательности

Бессерверные базы данных взимают меньшую плату за возможную согласованность. Оцените, действительно ли ваше приложение требует сильной согласованности. Если возможная приемлема, вы можете снизить затраты и улучшить задержку. Для Cosmos DB используйте согласованность сеансов для многих приложений электронной коммерции или социальных сетей - она обеспечивает гарантии чтения-вашей-записи на одну клиентскую сессию по более низкой цене RU, чем сильная.

Используйте соответствующий режим емкости

Для DynamoDB выберите предусмотренную емкость с автомасштабированием для стабильных рабочих нагрузок и по требованию для непредсказуемых пиков. Для Cosmos DB обеспеченная пропускная способность с автомасштабированием хороша для большинства производственных нагрузок; рассмотрите бессерверный (предварительный просмотр) для приложений для разработки / тестирования или легких приложений. Мониторинг потребляемых RU и установка предупреждений для событий дросселя.

План резервного копирования и аварийного восстановления

Обе услуги предлагают восстановление точка-в-времени (PITR). Включите его для всех производственных баз данных. Резервное копирование DynamoDB является непрерывным и восстанавливается в новой таблице; Резервное копирование Cosmos DB может быть непрерывным или периодическим. Тестовое восстановление периодически. Для глобального DR настройте многорегиональную репликацию (Global Tables или Cosmos DB multi-region пишет) и получите план отказоустойчивости.

Управление затратами

Использование отслеживания с помощью инструментов управления затратами в облаке (AWS Cost Explorer, Azure Cost Management). Для DynamoDB используйте резервную емкость для предсказуемой пропускной способности. Для Cosmos DB рассмотрите возможность использования безсерверного или автомасштабного, чтобы избежать оплаты неработающих RU. Удалите неиспользованные индексы и таблицы. Используйте сжатие там, где оно поддерживается (например, включите сжатие в аналитическом магазине Cosmos DB).

Заключение

Безсерверные базы данных, такие как Amazon DynamoDB и Azure Cosmos DB, превратились в корпоративные платформы, которые позволяют разработчикам создавать глобально масштабируемые приложения без операционного бремени. DynamoDB превосходит по простоте, узким шаблонам запросов и глубокой интеграции AWS, что делает его выбором по умолчанию для многих бессерверных микросервисов. Cosmos DB предлагает превосходную гибкость с поддержкой нескольких моделей, настраиваемой согласованностью и всеобъемлющими SLA, удовлетворяя сложные глобальные приложения и потребности в устойчивости к полиглотам. Правильный выбор в конечном итоге зависит от вашей облачной стратегии, шаблонов доступа к данным и толерантности к операционной сложности. Понимая сильные стороны, ограничения и модели ценообразования каждой базы данных, вы можете разрабатывать надежные, экономичные системы, которые легко масштабируются с вашим бизнесом.

AWS Serverless Database Resource Hub |Azure Cosmos DB Product Page