В данной статье мы рассмотрим архитектуру Apache Cassandra.
Как уже было сказано во введении – основная задача Cassandra – обработка больших объёмов данных. При этом, мы имеем возможность работать с несколькими нодами. И, в случае выхода из строя одной из них, мы можем продолжить работу, что не повлечёт за собой выхода из строя всей системы. Другими словами:
- Все ноды в кластере независимы друг от друга, но взаимосвязаны друг с другом
- Каждая нода в кластере может принимать запросы на чтение и на запись
- Если одна из нод вышла из строя, другая нода может принимать эти запросы
Репликация данных
В Cassandra каждая, одна или несколько нод в кластере играют роль реплики определённой части данных. Если в какой-то момент, одна из нод в ответ на запрос возвращает устаревшие данные – то будут возвращены более новые. После их возврата, Cassandra в фоновом режиме выполнит процесс, который называется “read repair”. Который обновит значения. Данный процесс происходит при участии ноды, которая играет роль координатора (Сoordinator).
Схематически данный процесс выглядит следующим образом:
Между собой ноды общаются с помощью протокола Gossip.
Рассмотрим основные компоненты Cassandra:
- Node – место хранения данных.
- Data center – набор нод, которые взаимодействуют друг с другом.
- Cluster – компонент, который включает 1 и более Data Center.
- Mem-table – структура, в которую записываются данные после Сommit Log.
- Commit Log – механизм аварийного восстановления, в которую записывается любая операция в Cassandra.
- SSTable – файл на дисковом пространстве, в которую данные записываются после того, как количество данных достигла указанного “порога”.
- Bloom Filter – крайне быстрые алгоритмы, которые помогают быстро определить, относится ли определённый элемент к указанному множеству. К нему мы обращаемся после каждого запроса.
Для доступа к данным в нодах Cassandra мы используем Cassandra Query Language (CQL). Для CQL база данных (далее – БД) – это контейнер, который содержит таблицы (Keyspace).
Чтение данных
Во время операции чтения, Cassandra получает данные и mem-table и проверяет Bloom Filter для поиска SSTable, которая содержит необходимые данные.
Запись данных
Каждая операция записи перехватывается Commit Log, которые записываются в ноды. Позже, данных перехватываются и сохраняются в mem-table. Когда mem-table заполнена, данные записываются в SSTable файл. Все записи автоматически разбиваются на части и реплицируются в кластере. С определённой периодичностью, Cassandra консолидирует SS таблицы, убирая лишние данные.
На этом мы заканчиваем обзор архитектуры данной БД. В следующей статье мы рассмотрим процесс установки Cassandra.