Cosmos DB знаменует полное погружение Microsoft в мир NoSQL/нереляционных СУБД. Созданная в качестве серверной СУБД для собственных веб-серверов Microsoft, она общедоступна в качестве облачного сервиса Azure.
На конференции Microsoft Build в Сиэтле корпорация представила Cosmos DB, новую облачную СУБД Azure как сервис, заменяющую DocumentDB, прежнюю NoSQL-СУБД Microsoft.
Римма Неме, которая демонстрировала Cosmos DB во время своего доклада в первый день конференции Build и которая является архитектором этого продукта, была столь любезна, что встретилась со мной для его углубленного обсуждения. Она имеет ученую степень доктора компьютерных наук, прежде она работала в подразделении Microsoft Research. Примечательно, что в течение некоторого времени Неме была также в команде SQL Server. Если уж она преисполнена энтузиазма по поводу Cosmos DB, то я убежден, что мне следует больше знать об этом продукте.
Что там на палубе?
Неме действительно полна энтузиазма. По ее мнению, разработчики должны использовать Cosmos DB для любых новых приложений на базе Azure. Это смелое утверждение, особенно для бывшего члена команды SQL Server, который работал над такими передовыми функциями, как PolyBase (которая позволяет SQL Server обращаться с файлами в Hadoop и Azure Blob Storage словно это локальные таблицы) и In-Memory OLTP (первоначальное название — Hekaton).
Вот основные причины, по которым Неме является столь ярой сторонницей Cosmos DB:
- она по максимуму проверена в боевых условиях, послужив серверной СУБД для некоторых крупнейших онлайновых сервисов Microsoft;
- она оптимизирована для записи и чтения с малой задержкой. Это достигается благодаря использованию твердотельных дисков для хранения и структур данных без «запирания» и блокировки, которые, что интересно, напоминают используемые также в модели SQL Server In-Memory OLTP;
- она территориально распределена по региональным ЦОДам Azure. Она уже доступна в любом из них и автоматически станет доступна в новых регионах, когда они будут подключены к Интернету, поскольку это фундаментальный сервис для самой Microsoft;
- разработчикам не нужно беспокоиться о прокладке территориально распределённых сетей: данные автоматически выдаются в ближайшей к пользователю точке. Более того, настройка географического распределения настолько проста, что достаточно щелкнуть мышкой на карте, чтобы добавить или исключить регион, не прерывая работу приложения. Microsoft метко называет эту особенность «глобальным распределением под ключ»;
- в отличие от других NoSQL-СУБД, которые навязывают вам модель так называемой «эвентуальной целостности» (eventual consistency) применительно к географически распределенному распространению обновлений базы данных, Cosmos DB позволяет вам выбирать между этой моделью, моделью строгой целостности, напоминающей реляционную СУБД, и тремя промежуточными вариантами между этими двумя крайностями;
- она поддерживает все четыре модели NoSQL — ключ-значение, документная, семейство колонок и граф;
- хотя Cosmos DB относится к категории NoSQL, она поддерживает собственный диалект SQL, а также другие API-интерфейсы (собственные JavaScript API и MongoDB API, Apache Gremlin и Azure Table Storage API, доступные в виде ознакомительных версий, в планах значатся и другие API-интерфейсы);
- в отличие от многих других NoSQL-СУБД — а в данном отношении и реляционных СУБД, — которые могут быть скупы на индексирование, Cosmos DB индексирует каждый столбец по умолчанию. Разработчики вольны отказаться от индексирования определенных столбцов, но им нет необходимости выбирать столбцы для индексирования.
Забота о бизнесе
Возможно, главная причина энтузиазма Неме по поводу Cosmos DB связана с бизнесом (помимо докторской степени она имеет также диплом MBA). Microsoft подкрепляет заявленную производительность новой СУБД кодифицированными соглашениями об уровне обслуживания (SLA), гарантирующими малую задержку, высокую пропускную способность, целостность и высокую доступность.
Это не побочный вопрос. Как подчеркнула Неме, Cosmos DB — не просто технология, это сервис, который с самого начала создавался как сервис, а не является облачной версией продукта для ЦОДа (подобно Azure SQL Database, которая представляет собой перенесенную в облако версию SQL Server). Сервисы — это бизнесы, так что бизнес-функции являются главными для этой платформы.
Конкуренция с Dynamo
При таких SLA, такой модели ценообразования и оплаты (которые, видимо, останутся такими же, как у DocumentDB), считает Неме, Cosmos DB вполне может конкурировать с Amazon Web Services DynamoDB. Последняя, не имеющая таких SLA, является фундаментальным сервисом NoSQL-СУБД и ядром стратегии «гравитации данных» (data gravity) AWS.
Чем больше данных вводят клиенты в DynamoDB, тем прочнее они привязываются к облаку AWS и тем вероятнее, что они будут больше использовать сервисы AWS. У Microsoft не было сильного конкурента DynamoDB. Хотя DocumentDB была до некоторой степени конкурентоспособна и обладала регулируемой целостностью (adjustable consistency), которая имеется в Cosmos DB, она представляла собой подмножество Cosmos DB и была в значительной степени лишена ее универсальности. Создав Cosmos DB, Microsoft получила возможность выставить на скачках лошадь, а не пони.
Нет мира без SQL
Должен признаться, что нахожу платформу Cosmos DB, если она работает так, как объявлено, весьма привлекательной. Но шесть лет назад я написал для Microsoft исследование «NoSQL и платформа Windows Azure». Хотя оно представляло собой введение в технологию NoSQL, в сущности это было отрицание использования модели NoSQL в производственных приложениях. В исследовании говорилось, что определенные функции NoSQL в любом случае доступны на платформе Microsoft Azure и что реляционные СУБД с их гарантиями целостности и кодифицированной схемой остаются правильным выбором для большинства производственных приложений.
По существу, исследование было заказано командой SQL Server, чтобы подтвердить правильность реляционной модели, на которой базировалась их СУБД наряду с Oracle, Postgres и MySQL. Хотя Microsoft, разумеется, выплатила мне гонорар, приведенные в исследовании доводы и тогда, и теперь соответствуют моему искреннему мнению по поводу того, где какая модель СУБД работает.
Может ли Cosmos «вступать в отношения»?
Хотя это ставит меня в несколько затруднительное положение по отношению к Cosmos DB, появляется обнадеживающая мысль, что однажды Cosmos DB, которую Microsoft преподносит как «мультимодальную» СУБД, сможет поддерживать реляционные операции так же хорошо, как поддерживает сейчас режимы ключ-значение, документов, семейства колонок и графов. Действительно, СУБД семейства колонок фактически построены на основе схемы, если каждое семейство колонок содержит только одно значение. Это то, что с большим успехом использует Apache Cassandra.
Если это может делать Cassandra, значит может и Cosmos DB. И если затем в последней появится полный диалект SQL вроде SQL Server Transact-SQL (T-SQL), то в сочетании с географическим распределением, малой задержкой и SLA она может стать очень популярной среди корпоративных разработчиков, когда их компании перейдут к облакам.
И несмотря на то, что лицо Неме стало непроницаемым, когда я спросил ее, начала ли Microsoft уже думать об этом, я был бы очень удивлен, если бы это было не так.