Руководство по Cassandra. Архитектура.

В данной статье мы рассмотрим архитектуру Apache Cassandra.

Как уже было сказано во введении – основная задача Cassandra – обработка больших объёмов данных. При этом, мы имеем возможность работать с несколькими нодами. И, в случае выхода из строя одной из них, мы можем продолжить работу, что не повлечёт за собой выхода из строя всей системы. Другими словами:

  • Все ноды в кластере независимы друг от друга, но взаимосвязаны друг с другом
  • Каждая нода в кластере может принимать запросы на чтение и на запись
  • Если одна из нод вышла из строя, другая нода может принимать эти запросы

Репликация данных

В Cassandra каждая, одна или несколько нод в кластере играют роль реплики определённой части данных. Если в какой-то момент, одна из нод в ответ на запрос возвращает устаревшие данные – то будут возвращены более новые. После их возврата, Cassandra в фоновом режиме выполнит процесс, который называется “read repair”. Который обновит значения. Данный процесс происходит при участии ноды, которая играет роль координатора (Сoordinator).

Схематически данный процесс выглядит следующим образом:

replication-and-consistency-in-cassandra

Между собой ноды общаются с помощью протокола 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.