Руководство по 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.