Кассандра - Архитектура

Целью разработки Cassandra является обработка рабочих нагрузок с большими данными на нескольких узлах без единой точки отказа. У Cassandra есть одноранговая распределенная система по своим узлам, и данные распределяются между всеми узлами в кластере.

  • Все узлы в кластере играют одинаковую роль. Каждый узел независим и в то же время связан с другими узлами.

  • Каждый узел в кластере может принимать запросы на чтение и запись, независимо от того, где на самом деле находятся данные в кластере.

  • Когда узел выходит из строя, запросы чтения / записи могут обслуживаться другими узлами в сети.

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

В Cassandra один или несколько узлов в кластере действуют как реплики для заданного фрагмента данных. Если обнаружено, что некоторые из узлов ответили устаревшим значением, Cassandra вернет клиенту самое последнее значение. После возврата самого последнего значения Cassandra выполняетread repair в фоновом режиме, чтобы обновить устаревшие значения.

На следующем рисунке схематично показано, как Cassandra использует репликацию данных между узлами в кластере, чтобы гарантировать отсутствие единой точки отказа.

Note - Кассандра использует Gossip Protocol в фоновом режиме, чтобы узлы могли связываться друг с другом и обнаруживать неисправные узлы в кластере.

Компоненты Кассандры

Ключевые компоненты Cassandra следующие:

  • Node - Это место, где хранятся данные.

  • Data center - Это набор связанных узлов.

  • Cluster - Кластер - это компонент, содержащий один или несколько центров обработки данных.

  • Commit log- Журнал фиксации - это механизм восстановления после сбоя в Cassandra. Каждая операция записи записывается в журнал фиксации.

  • Mem-table- Mem-таблица - это резидентная структура данных в памяти. После журнала фиксации данные будут записаны в mem-таблицу. Иногда для семейства с одним столбцом может быть несколько таблиц памяти.

  • SSTable - Это дисковый файл, на который данные выгружаются из таблицы памяти, когда ее содержимое достигает порогового значения.

  • Bloom filter- Это не что иное, как быстрые, недетерминированные алгоритмы для проверки того, является ли элемент членом набора. Это особый вид тайника. Доступ к фильтрам Блума осуществляется после каждого запроса.

Язык запросов Cassandra

Пользователи могут получить доступ к Cassandra через его узлы, используя язык запросов Cassandra Query Language (CQL). CQL обрабатывает базу данных(Keyspace)как контейнер таблиц. Программисты используютcqlsh: подсказка для работы с CQL или драйверами отдельных языков приложения.

Клиенты обращаются к любому из узлов для выполнения операций чтения-записи. Этот узел (координатор) играет прокси между клиентом и узлами, содержащими данные.

Операции записи

Каждая операция записи узлов фиксируется commit logsнаписано в узлах. Позже данные будут захвачены и сохранены вmem-table. Когда мем-таблица заполнится, данные будут записаны в SStableфайл данных. Все записи автоматически разделяются и реплицируются по всему кластеру. Cassandra периодически объединяет SSTables, удаляя ненужные данные.

Читать операции

Во время операций чтения Cassandra получает значения из mem-таблицы и проверяет фильтр Блума, чтобы найти соответствующую SSTable, которая содержит требуемые данные.