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

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 — для потоковой передачи изменений (_changes feed).
  • 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.

Сравнение с аналогами

ПараметрCloudantMongoDBAmazon DynamoDBGoogle Firestore
Модель данныхДокументы (JSON)Документы (BSON)Документы + ключ-значениеДокументы
СогласованностьEventualEventual (по умолчанию)Eventual (по умолчанию)Strong (по умолчанию)
РепликацияМногомастернаяМногомастерная (с 3.6)МногомастернаяОдномастерная (с опцией многомастерной)
APIRESTful, CouchDB-совместимыйДрайверы для языковRESTful + SDKRESTful + 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 в некоторых регионах, что вызвало критику со стороны клиентов, зависящих от этого сервиса.

Источники

  1. Официальная документация IBM Cloudant — IBM Cloud Docs.
  2. Статья «Cloudant: A NoSQL Database for the Cloud» — журнал «IEEE Internet Computing», 2013.
  3. Публикация «BigCouch: A Scalable, Fault-Tolerant CouchDB» — Apache Software Foundation, 2012.
  4. Отчёт о приобретении Cloudant компанией IBM — TechCrunch, 2014.
  5. Сравнительный анализ NoSQL-баз данных — «NoSQL Distilled» (P. Sadalage, M. Fowler), 2012.