Cloudant¶
Cloudant — это документоориентированная система управления базами данных (NoSQL), предоставляемая как облачный сервис (DBaaS). Разработана на основе проекта Apache CouchDB и оптимизирована для работы с большими объёмами данных, высокой нагрузкой на запись и географически распределёнными приложениями. Cloudant обеспечивает автоматическое масштабирование, репликацию данных между дата-центрами и поддержку JSON-документов с возможностью полнотекстового поиска и аналитики.
¶История
Cloudant была основана в 2008 году в Кембридже (штат Массачусетс, США) Адамом Калфом, Майком Миллером и Аланом Хоффманом. Изначально проект развивался как хостинговая платформа для CouchDB, предоставляющая управляемую инфраструктуру для разработчиков. В 2012 году компания привлекла инвестиции в размере 12 миллионов долларов от венчурных фондов, включая Avalon Ventures и Sigma Prime Ventures.
В 2014 году Cloudant была приобретена корпорацией IBM за сумму, по разным оценкам, около 50 миллионов долларов. После сделки сервис был интегрирован в экосистему IBM Cloud (ранее Bluemix) и переименован в IBM Cloudant. В 2018 году IBM объявила о прекращении поддержки самостоятельной установки Cloudant (on-premises), полностью сосредоточившись на облачной версии. В 2021 году была запущена версия Cloudant для IBM Cloud Pak for Data, позволяющая развёртывать сервис в частных облаках.
¶Архитектура и принципы работы
¶Модель данных
Cloudant использует документоориентированную модель, где данные хранятся в виде JSON-документов. Каждый документ имеет уникальный идентификатор (_id) и может содержать произвольное количество полей. Поддерживаются вложенные структуры, массивы и ссылки на другие документы. В отличие от реляционных баз данных, схема данных не фиксирована — документы в одной базе могут иметь разную структуру.
¶Репликация и согласованность
Система основана на принципе eventual consistency (согласованность в конечном счёте). Cloudant использует многомастерную репликацию: данные могут записываться в любой узел кластера, а затем асинхронно распространяться на остальные. Это обеспечивает высокую доступность и устойчивость к сбоям, но не гарантирует мгновенную согласованность — при чтении возможны временные расхождения данных.
Репликация может быть настроена между разными дата-центрами, что позволяет создавать географически распределённые приложения. Для синхронизации используется протокол, основанный на механизме изменений CouchDB (_changes feed).
¶Индексация и поиск
Cloudant поддерживает несколько типов индексов:
- Первичный индекс — по
_idдокумента, автоматически создаётся для каждой базы. - Вторичные индексы — создаются с помощью MapReduce-функций (аналогично CouchDB). Позволяют выполнять запросы по произвольным полям и агрегации.
- Индексы для поиска — на базе Apache Lucene, обеспечивают полнотекстовый поиск с поддержкой стемминга, синонимов и ранжирования.
- Индексы для геопространственных запросов — позволяют искать документы по географическим координатам (например, в радиусе от точки).
¶API и протоколы
Cloudant предоставляет RESTful API для всех операций: создание, чтение, обновление и удаление документов (CRUD), управление базами данных, выполнение запросов. Основные протоколы:
- HTTP/HTTPS — базовый протокол для взаимодействия.
- WebSocket — для потоковой передачи изменений (
_changesfeed). - Apache CouchDB API — совместимость с клиентскими библиотеками CouchDB.
¶Классификация и виды
По типу развёртывания Cloudant делится на:
- Облачный сервис (IBM Cloudant) — полностью управляемая платформа, доступная через IBM Cloud. Включает автоматическое масштабирование, резервное копирование и мониторинг.
- Локальная версия (IBM Cloudant Local) — до 2018 года существовала версия для установки на собственные серверы. В настоящее время не поддерживается, но может использоваться в устаревших инфраструктурах.
- Версия для IBM Cloud Pak for Data — развёртывание в контейнерной среде Kubernetes, предназначенное для корпоративных клиентов, которым требуется контроль над данными.
По функциональности выделяют:
- База данных для операционных нагрузок (OLTP) — оптимизирована для высокочастотных операций записи и чтения (например, логирование, IoT-данные).
- База данных для аналитики — поддерживает MapReduce-запросы и агрегации, но не предназначена для сложных аналитических вычислений (в отличие от специализированных систем, таких как Apache Hadoop).
¶Применение
¶Основные сценарии
- Мобильные и веб-приложения — хранение пользовательских данных, сессий, конфигураций. Благодаря репликации Cloudant часто используется в приложениях, работающих в офлайн-режиме (например, синхронизация данных на мобильных устройствах).
- Интернет вещей (IoT) — сбор и хранение телеметрии с датчиков, устройств и сенсоров. Высокая пропускная способность на запись позволяет обрабатывать миллионы событий в секунду.
- Обработка событий и логов — хранение журналов событий, транзакций, аудита. Встроенная репликация обеспечивает отказоустойчивость.
- Каталоги и справочники — хранение продуктовых каталогов, библиотек контента, метаданных (например, в системах управления цифровыми активами).
¶Известные пользователи
- IBM — внутренние проекты, включая Watson и IBM Cloud.
- The Weather Company — хранение и обработка метеорологических данных.
- Samsung — использование в облачных сервисах для смартфонов.
- Volkswagen — сбор данных с автомобильных датчиков в рамках проекта «Connected Car».
¶Преимущества и недостатки
¶Преимущества
- Высокая доступность — автоматическая репликация между узлами и дата-центрами.
- Горизонтальное масштабирование — добавление узлов без остановки сервиса.
- Простота использования — RESTful API, совместимость с CouchDB, отсутствие необходимости в администрировании серверов.
- Встроенная репликация — поддержка синхронизации между облаком и локальными устройствами.
- Поддержка полнотекстового поиска — без необходимости интеграции с внешними поисковыми движками.
¶Недостатки
- Ограниченная согласованность — eventual consistency может быть проблемой для приложений, требующих строгой актуальности данных (например, финансовые транзакции).
- Сложность запросов — отсутствие SQL и поддержки JOIN-операций. Сложные запросы требуют написания MapReduce-функций.
- Стоимость — облачный сервис может быть дорогим при больших объёмах данных (цены зависят от объёма хранилища и количества запросов).
- Зависимость от IBM — после приобретения Cloudant стала частью экосистемы IBM, что может ограничивать гибкость для пользователей, не использующих другие продукты IBM.
¶Сравнение с аналогами
| Параметр | Cloudant | MongoDB | Amazon DynamoDB | Google Firestore |
|---|---|---|---|---|
| Модель данных | Документы (JSON) | Документы (BSON) | Документы + ключ-значение | Документы |
| Согласованность | Eventual | Eventual (по умолчанию) | Eventual (по умолчанию) | Strong (по умолчанию) |
| Репликация | Многомастерная | Многомастерная (с 3.6) | Многомастерная | Одномастерная (с опцией многомастерной) |
| API | RESTful, CouchDB-совместимый | Драйверы для языков | RESTful + SDK | RESTful + SDK |
| Полнотекстовый поиск | Встроенный (Lucene) | Встроенный (с 3.2) | Отдельный сервис (CloudSearch) | Встроенный |
| Цена | Плата за хранилище + запросы | Плата за инфраструктуру | Плата за чтение/запись/хранилище | Плата за чтение/запись/хранилище |
¶Интересные факты
- Cloudant была одной из первых коммерческих реализаций CouchDB, и её код частично был открыт под лицензией Apache 2.0.
- В 2013 году Cloudant запустила сервис «BigCouch» — распределённую версию CouchDB, которая позже стала основой для Apache CouchDB 2.0.
- Сервис использовался для обработки данных с метеостанций The Weather Company, обрабатывая более 10 миллиардов запросов в день.
- В 2020 году IBM объявила о прекращении поддержки Cloudant в некоторых регионах, что вызвало критику со стороны клиентов, зависящих от этого сервиса.
¶Источники
- Официальная документация IBM Cloudant — IBM Cloud Docs.
- Статья «Cloudant: A NoSQL Database for the Cloud» — журнал «IEEE Internet Computing», 2013.
- Публикация «BigCouch: A Scalable, Fault-Tolerant CouchDB» — Apache Software Foundation, 2012.
- Отчёт о приобретении Cloudant компанией IBM — TechCrunch, 2014.
- Сравнительный анализ NoSQL-баз данных — «NoSQL Distilled» (P. Sadalage, M. Fowler), 2012.