После двух лет разработки представлена новая значительная ветка СУБД Couchbase Server 3.0. Couchbase Server относится к классу NoSQL-систем и предоставляет похожие на Apache CouchDB средства для создания документ-ориентированных баз данных в сочетании с напоминающими Membase хранилищами в формате ключ-значение. При этом, благодаря поддержке стандартного протокола memcached, система остаётся совместимой с большим числом уже имеющихся приложений и может выступать в роли прозрачной замены других NoSQL-систем. Код системы распространяется под лицензией Apache.
Проект создан объединённой командой разработчиков CouchDB и Membase, основанной после слияния компании CouchOne и Membase.
Отбросив детали, Couchbase Server можно рассматривать как бэкенд хранилища на основе технологий Membase, поверх которого добавлены движки для индексации и формирования запросов CouchDB. Таким образом удалось добиться совместимости с Apache CouchDB на уровне оформления запросов и индексов, и совместимости с Membase на уровне протокола доступа к данным и управляющего API. Критичные к производительности части CouchDB были переписаны на языке C++, но многие подсистемы по-прежнему остаются на языке Erlang. Для разработки приложений на языках Java, Ruby, .NET, C/C++, PHP, Node.js и Python подготовлены специальные SDK.
Couchbase Server отличается высокой масштабируемостью и позволяет организовать хранение данных как на одном сервере, так и в форме распределённой системы, размещающей данные поверх группы серверов. В том числе имеются встроенные средства для обеспечения высокой доступности, самовосстановления в случае сбоя обслуживающих хранилище узлов (данные могут дублироваться на разных узлах) и построения сегментированных хранилищ, копии которых разнесены по разным датацентрам и приближены к конечным пользователям. Поддерживаются как однонаправленные ("master-slave"), так и двунаправленные ("master-master") режимы репликации. Поддерживается создание первичных и вторичных индексов, а также индексов по нескольким ключам. Для дополнительной оптимизации производительности применяются встроенные механизмы кэширования в оперативной памяти и средства автоматической генерации индексов.
Помимо возможности хранения данных в формате ключ/значения, Couchbase Server позволяет использовать концепцию документ-ориентированного хранилища, в котором в качестве единицы хранения данных выступает документ, имеющий уникальный идентификатор, версию и содержащий произвольный набор именованных полей в формате ключ/значение. Используемая в Couchbase Server модель данных позволяет определять документы в формате JSON, снимая с разработчика необходимость определения схемы хранения. Запросы и индексация данных могут выполняться в соответствии с парадигмой MapReduce. Для организации псевдо-структурированного набора данных из произвольных документов предлагается концепция формирования представлений (view). Для формирования логики выборки используется язык JavaScript.
Основные новшества:
- Увеличение производительности и масштабируемости: до 50 раз возросла скорость индексации, до двух раз увеличилась скорость ребалансировки, до 8 раз сокращено время восстановления узла после сбоя.
- Новый протокол DCP (Database Change Protocol) для обмена данными между узлами в процессе ребалансировки, репликации и восстановления, а также для организации работы охватывающих несколько узлов представлений. Ключевой особенностью нового протокола является использование оперативной памяти для обработки данных об изменениях, вместо их чтения с диска, что привело к заметному увеличению производительности практически во всех областях работы с БД, от репликации и индексирования до работы с представлениями;
- Функция Dynamically Tunable Memory, позволяющая на лету выбирать оптимальные методы распределения памяти, оптимизации метаданных и стратегию кэширования (можно явно указать как много данных можно держать в памяти и на диске), что упрощает создание различных типов конфигурации - от размещаемых исключительно в памяти БД, до больших дисковых хранилищ;
- Средства для автоматической настройки параметров и ресурсов с учётом возможностей текущего оборудования для сокращения задержек и увеличения пропускной способности ввода/вывода;
- Концепция общего пула потоков (Shared thread pool) для каждого узла, позволяющая увеличить пропускную способность ввода/вывода и сократить задержки при выполнения чтения, записи и прочих операций;
- Благодаря использованию нового протокола DCP, в новом выпуске реализована возможность репликаци между дата-центрами в режиме из памяти в память. Использование нового режима позволяет до 4 раз снизить задержки в процессе репликации. Кроме того, повышена эффективность обработки внештатных ситуаций, таких как прерывание сетевого соединения в процессе репликации - после восстановления соединения репликация автоматически будет продолжена с прерванной позиции.
- Добавлена опция для выполнения инкрементального резервного копирования, которая дополнила собой ранее предлагаемый режим создания полного бэкапа. При инкрементальном режиме в резервную копию включаются только изменения относительно прошлого бэкапа, что позволяет заметно сэкономить дисковое пространство и сократить время выполнения операции, как следствие появляется возможность совершать бэкапы более часто;
- Добавлен новый режим быстрого восстановления узла после сбоя, позволяющий до 8 раз сократить время на реактивацию узла;
- Усиление безопасности: возможность шифрования канала связи между клиентом и сервером; поддержка доступа к REST API и консоли управления через HTTPS;
- Упрощение средств для управления кластером и распределения ресурсов. Возможность приостановки и возобновления репликации между разными кластерами на время проведения технических работ. Поддержка режима "graceful failover" для мягкого выведения узлов из кластера по запросу администратора для проведения обслуживания. Поддержка инкрементальной актуализации данных при восстановлении ранее выведенного из работы узла. Средства диагностики на уровне всего кластера;
- В инструментарий для разработчиков добавлена встроенная поддржка объектов JSON с автоматической сериализацией данных через Couchbase API, не требующая использования внешних JSON-библиотек. В Java и .NET SDK добавлена поддержка асинхронных интерфейсов. Обеспечена интеграция с фреймворками, такими как Spring, gEvent, Twisted и Ottoman.
|