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

Riak

Riak — это распределённая, отказоустойчивая NoSQL база данных класса ключ-значение, разработанная компанией Basho Technologies. Riak спроектирована для обеспечения высокой доступности, горизонтального масштабирования и устойчивости к сбоям на кластерах из обычных серверов, без единой точки отказа. Система реализует принципы распределённых вычислений, заложенные в проекте Amazon Dynamo, и ориентирована на обработку больших объёмов данных в реальном времени.

История

Разработка Riak началась в 2007 году компанией Basho Technologies, основанной Джастином Шихи, Энди Гроссом и другими инженерами. Первая публичная версия (Riak 0.1) была выпущена в 2009 году. Основной целью было создание базы данных, которая могла бы работать на недорогом оборудовании и сохранять работоспособность при отказе отдельных узлов, что было вдохновлено архитектурой Amazon Dynamo, описанной в техническом докладе 2007 года.

В 2010 году вышла версия Riak 1.0, которая включала поддержку языка запросов MapReduce и протокола Protocol Buffers. В 2011 году Basho представила Riak Search — встроенный полнотекстовый поиск на базе Apache Solr. В 2014 году вышла версия Riak 2.0, в которой была добавлена поддержка типов данных (CRDT — Conflict-Free Replicated Data Types) и улучшена система управления конфликтами.

В 2017 году компания Basho Technologies объявила о банкротстве и прекратила операционную деятельность. Активы компании были приобретены компанией Bet365, которая впоследствии передала права на разработку Riak сообществу. В 2018 году был основан проект Riak Community Edition, а в 2020 году — Riak KV (Key Value) под управлением организации Open Source Recycling. На 2024 год Riak продолжает развиваться как открытый проект, хотя коммерческая поддержка от Basho более не предоставляется.

Архитектура и принципы работы

Riak основана на архитектуре Amazon Dynamo, которая обеспечивает высокую доступность и устойчивость к сбоям. Ключевые принципы включают:

  • Децентрализация: все узлы кластера равноправны, нет единого координатора или главного сервера.
  • Горизонтальное масштабирование: добавление новых узлов увеличивает ёмкость и производительность кластера без перерывов в работе.
  • Отказоустойчивость: данные реплицируются на несколько узлов, что позволяет кластеру продолжать работу при отказе одного или нескольких узлов.
  • Согласованность в конечном счёте: система гарантирует, что при отсутствии новых записей все реплики данных в конечном итоге придут к согласованному состоянию.

Хранение данных

Данные в Riak хранятся в виде пар «ключ-значение». Ключ — это строка, которая хэшируется с помощью алгоритма SHA-1 для определения местоположения данных на кольце виртуальных узлов (виртуальных нод). Каждому физическому узлу кластера назначается определённый диапазон виртуальных узлов, что позволяет равномерно распределять данные и нагрузку.

Репликация и консистентность

Riak использует механизм репликации, при котором каждая запись копируется на N узлов (по умолчанию N=3). Параметры консистентности задаются через значения N (количество реплик), R (количество узлов, которые должны подтвердить чтение) и W (количество узлов, которые должны подтвердить запись). Это позволяет гибко настраивать баланс между скоростью и надёжностью.

Разрешение конфликтов

В распределённой системе возможны конфликты, когда разные узлы одновременно получают разные версии одного и того же ключа. Riak использует несколько стратегий разрешения конфликтов:

  • Последняя запись побеждает (LWW): по умолчанию сохраняется запись с наибольшей временной меткой.
  • Векторные часы: система отслеживает причинно-следственные связи между версиями, и при обнаружении конфликта возвращает все версии, оставляя разрешение на стороне приложения.
  • CRDT (Conflict-Free Replicated Data Types): начиная с версии 2.0, Riak поддерживает типы данных, которые автоматически разрешают конфликты (например, счётчики, наборы, карты).

Классификация и версии

Riak существует в нескольких редакциях:

  • Riak KV — основная версия базы данных ключ-значение.
  • Riak TS — версия, оптимизированная для временных рядов (Time Series), выпущенная в 2015 году. Включает поддержку схем данных и SQL-подобных запросов. Разработка Riak TS была прекращена после банкротства Basho.
  • Riak CSоблачное хранилище (Cloud Storage), реализующее API, совместимый с Amazon S3. Позволяет использовать Riak в качестве объектного хранилища.
  • Riak Enterprise — коммерческая версия с дополнительными функциями, такими как многоцентровая репликация (Multi-Datacenter Replication), мониторинг и поддержка. После банкротства Basho коммерческая версия не развивается.

Языки запросов и интерфейсы

Riak предоставляет несколько способов взаимодействия:

  • HTTP API — RESTful интерфейс, работающий через протокол HTTP. Поддерживает операции GET, PUT, DELETE, POST для работы с ключами и значениями.
  • Protocol Buffers — бинарный протокол, обеспечивающий более высокую производительность по сравнению с HTTP.
  • Riak Search — встроенный полнотекстовый поиск на базе Apache Solr. Позволяет выполнять сложные запросы по содержимому значений.
  • MapReduce — поддержка распределённых вычислений с использованием функций на языке Erlang или JavaScript.
  • SQL-подобный интерфейс — в Riak TS поддерживается язык запросов, напоминающий SQL, с конструкциями SELECT, INSERT, DELETE и WHERE.

Применение

Riak используется в сценариях, где требуется высокая доступность и устойчивость к сбоям, а также возможность обработки больших объёмов данных без единой точки отказа. Основные области применения:

  • Системы управления пользовательскими сессиями — хранение данных сессий веб-приложений, где критична скорость доступа и отказоустойчивость.
  • Хранилища конфигураций — централизованное хранение настроек и параметров для распределённых систем.
  • Системы реального времени — обработка потоковых данных, например, логов событий или метрик мониторинга.
  • Объектные хранилища — с помощью Riak CS можно организовать облачное хранилище, совместимое с S3 API.
  • Игровая индустрия — хранение игровых профилей, достижений и состояний в многопользовательских играх.

Примеры известных пользователей Riak включают компании AOL, GitHub, Mozilla, и Voxer. В России Riak использовался в некоторых проектах для хранения больших объёмов данных, хотя широкого распространения не получил из-за сложности администрирования и отсутствия активной коммерческой поддержки.

Критика и ограничения

Riak, несмотря на свои преимущества, имеет ряд недостатков:

  • Сложность администрирования — настройка и обслуживание кластера требуют высокой квалификации, особенно в части управления репликацией и разрешения конфликтов.
  • Ограниченная поддержка запросов — база данных ключ-значение не поддерживает сложные реляционные запросы, JOIN-операции и транзакции ACID в традиционном понимании.
  • Производительность при больших объёмах — при работе с очень большими наборами данных (сотни терабайт) производительность может снижаться из-за необходимости синхронизации реплик.
  • Прекращение коммерческой поддержки — после банкротства Basho компания перестала выпускать обновления и предоставлять техническую поддержку, что снижает привлекательность для корпоративных клиентов.
  • Отсутствие активного сообщества — по сравнению с такими проектами, как Cassandra или Redis, сообщество Riak значительно меньше, что ограничивает количество доступных библиотек и инструментов.

Интересные факты

  • Название «Riak» происходит от скандинавского слова, означающего «разрыв» или «трещина», что символизирует способность системы работать при разрывах связей между узлами.
  • Riak была одной из первых баз данных, реализовавших концепцию CRDT в промышленном продукте.
  • Исходный код Riak написан на языке Erlang, что обеспечивает высокую отказоустойчивость и лёгкость создания распределённых систем.

Источники

  • Basho Technologies. «Riak: A Distributed Key-Value Database». Техническая документация, 2010–2017.
  • DeCandia, G., et al. «Dynamo: Amazon’s Highly Available Key-value Store». ACM SIGOPS Operating Systems Review, 2007.
  • Open Source Recycling. «Riak KV Documentation». Официальный сайт проекта, 2020–2024.
  • Stonebraker, M. «The End of an Architectural Era (It’s Time for a Complete Rewrite)». VLDB, 2007.
  • Сообщество Riak. «Riak Community Edition». GitHub-репозиторий, 2018–2024.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →