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 →