SlideShare a Scribd company logo
Cassandra
«Использование баз данных»
Цесько Вадим Александрович
https://incubos.org
@incubos
24 мая 2017 г.
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 1 / 55
Содержание
1 Введение
2 Модель данных
3 Архитектура
4 Детали реализации
5 Заключение
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 2 / 55
Введение History
History
July 2008 — open-sourced by Facebook1
March 2010 — graduated from the Apache Incubator
Influenced by Amazon Dynamo
Committers: Rackspace, Digg, Twitter, Amazon,
Microsoft
1
Facebook. Cassandra — A Decentralized Structured Storage System:
http://www.cs.cornell.edu/projects/ladis2009/papers/
lakshman-ladis2009.pdf
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 3 / 55
Введение Features
Features
Decentralized — no SPoF, every node is identical
Multi data center replication
Elastic Scalability
High Availability and Fault Tolerance
Tunable consistency
CQL
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 4 / 55
Введение Data Model
Data Model
Based on Google Bigtable
Hybrid: Key-value + Column-oriented
Каждая строка содержит множество колонок
Колонка (ячейка): имя + значение
Разные строки могут иметь разный набор колонок
Группировка колонок в семейства и
суперсемейства
Table
A distributed multi dimensional map indexed by a key.
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 5 / 55
Введение ACID
ACID
Никаких JOIN-ов и внешних ключей
Атомарность на уровне строк, нет rollback
Можно получить ошибку при записи, но запись
состоится
Отметки времени от клиента при конфликтах
Настраиваемая консистентность (количество
реплик)
Изоляция на уровне строк
Durability: commit log + replication
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 6 / 55
Введение CAP
CAP
Tunable Consistency
Tunable Availability
Partition Tolerance
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 7 / 55
Введение Пользователи
Пользователи
Самое популярное колоночное хранилище2
:
Cisco
CERN
Digg
Facebook
IBM
Netflix
Reddit
SoundCloud
Twitter
Odnoklassniki
2
http://db-engines.com/en/ranking/wide+column+store
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 8 / 55
Введение Мотивация
Мотивация
If I had asked people what
they wanted, they would
have said faster horses.
Henry Ford
Что не так с RDBMS?
Chapter 1. "What’s Wrong with Relational Databases?"in
"Cassandra: The Definitive Guide"a
a
Eben Hewitt. Cassandra: The Definitive Guide. 2010. ISBN
1449390412.
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 9 / 55
Введение Мотивация
У нас есть сервис на RDBMS
Всё работает?
Не трогай!
С чем могут быть проблемы:
(Distributed) Transactions3
(Distributed) JOINs
(Distributed) Schema evolution
Sharding4
Functional segmentation
Key-based sharding
Lookup table
3
Gregor Hohpe. Starbucks Does Not Use Two-Phase Commit:
http://www.eaipatterns.com/ramblings/18_starbucks.html
4
Michael Stonebraker. The Case for Shared Nothing. 1986
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 10 / 55
Введение Мотивация
Use Case: RDBMS Scaling
LiveJournal
Brad Fitzpatrick. LiveJournal’s Backend: A history of
scalinga
. August 2005.
a
http://www.danga.com/words/2005_oscon/oscon-2005.pdf
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 11 / 55
Модель данных
Модель данных
Cassandra — партиционированное хранилище
рядов
Исходим из запросов, а не из сущностей и связей
Таблица — коллекция упорядоченных колонок
Keyspace — группа таблиц (обычно per application)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 12 / 55
Модель данных Если глубже
Если глубже
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 13 / 55
Модель данных Интерфейсы
Интерфейсы
Thrift API
Исторически первый
Низкоуровневый
Довольно многословный
CQL
SQL-подобный
(Почти насколько же) выразительный
Развивается
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 14 / 55
Модель данных CQL
Пример
1 CREATE TABLE songs (
2 id uuid PRIMARY KEY,
3 title text,
4 album text,
5 artist text,
6 data blob
7 );
1 CREATE TABLE playlists (
2 id uuid,
3 song_order int,
4 song_id uuid,
5 title text,
6 album text,
7 artist text,
8 PRIMARY KEY (id, song_order));
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 15 / 55
Модель данных CQL
Особенности
Compound keys (clustering)
Indices
Collection types5
: set, list, map
INSERT = UPDATE = UPSERT
DELETE для строки или набора ячеек
TTL
Counters
См. спеку6
5
http://www.datastax.com/dev/blog/cql3_collections
6
https://docs.datastax.com/en/dse/5.1/cql/index.html
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 16 / 55
Архитектура Компоненты
Компоненты
Consistent Hashing + VNodes (см. лекцию 1)
Gossip — состав и состояние узлов
Partitioner — данные по узлам
Replica placement strategy — реплики по
узлам
Snitch — топология (ДЦ и стойки)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 17 / 55
Архитектура Компоненты
Virtual Nodes
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 18 / 55
Архитектура Компоненты
Gossip
Узлы периодически обмениваются информацией о
себе и других узлах
Каждую секунду не больше чем с тремя узлами
Все узлы быстро узнают информацио обо всех
узлах
Сообщения имеют версию — устаревшая
информация затирается
Seed nodes для bootstrap
Gossip-информация хранится на каждой ноде
персистентно
Обнаружение сбоев узлов (+ dynamic snitch)7
7
Naohiro Hayashibara, Xavier D´efago, Rami Yared and Takuya Katayama.
The φ Accrual Failure Detector. 2008
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 19 / 55
Архитектура Компоненты
Partitioner
Consistent Hashing8
Murmur3Partitioner (−263
to +263
)
ByteOrderedPartitioner
Лексикографически по байтам ключа
Сложная балансировка нагрузки (расчёт диапазонов
партиций вручную)
Неравномерная балансировка для разных таблиц
Последовательная запись упирается в один узел
8
http://docs.datastax.com/en/dse/5.1/dse-arch/datastax_
enterprise/dbArch/archDataDistributeHashing.html
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 20 / 55
Архитектура Компоненты
Replica Placement Strategy
Replication Factor — количество реплик на кластер
Каждая реплика на отдельном узле
Все реплики равноправны
SimpleStrategy:
1 ДЦ (если планируете расширяться, не используйте)
Первая реплика на узел от Partitioner
Остальные — по часовой стрелке по кольцу
NetworkTopologyStrategy:
Определяет количество реплик в каждом ДЦ
Узлы для реплик — идём по кольцу до следующей
стойки
Часто стойки вырубаются целиком (питание,
охлаждение, сеть, ...)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 21 / 55
Архитектура Компоненты
NetworkTopologyStrategy
Факторы
Желательно чтение внутри ДЦ
Учитываем типичные сбои
По 2 реплики в каждом ДЦ
Сбой одного узла — ConsistencyLevel.ONE
По 3 реплики в каждом ДЦ
Сбой одного узла —
ConsistencyLevel.LOCAL_QUORUM
Сбой двух узлов — ConsistencyLevel.ONE
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 22 / 55
Архитектура Компоненты
Snitch
Одинаковая конфигурация на узлах
Dynamic snitching wrapper9
По умолчанию и только на чтение
Данные с самой быстрой реплики, с остальных —
контрольные суммы
Статистика Read Latency и текущие задачи узлов
SimpleSnitch: никаких ДЦ и стоек
RackInferringSnitch: (110.dc.rack.node)
PropertyFileSnitch: адреса в ДЦ/стойки в
файле
GossipingPropertyFileSnitch: локальный ДЦ и
стойка в файле на каждом узле + Gossip
9
http://www.datastax.com/dev/blog/
dynamic-snitching-in-cassandra-past-present-and-futureЦесько В. А. (Технополис) Cassandra 24 мая 2017 г. 23 / 55
Архитектура Клиентские запросы
Клиентские запросы
Можно обращаться к любому узлу
Узел становится координатором для текущего
запроса
Координатор проксирует с учётом Partitioner и
Replica Placement Strategy
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 24 / 55
Архитектура Клиентские запросы
Write
Запрос всем репликам независимо от
ConsistencyLevel
ConsistencyLevel определяет, сколько реплик
должно ответить для успеха
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 25 / 55
Архитектура Клиентские запросы
Write: Пример
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 26 / 55
Архитектура Клиентские запросы
MultiDC Write
Оптимизация — один координатор в каждом
удалённом ДЦ
ConsistencyLevel.LOCAL_ONE или
ConsistencyLevel.LOCAL_QUORUM — обязаны
ответить только локальные узлы (география не
влияет на задержку)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 27 / 55
Архитектура Клиентские запросы
MultiDC Write: Пример
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 28 / 55
Архитектура Клиентские запросы
Write: ConsistencyLevel
ANY — всегда успех (hinted handoff)
ONE — в commit-log одного узла
TWO
THREE
QUORUM — inter DC + нужен запас прочности
LOCAL_QUORUM — быстрее, чем QUORUM
EACH_QUORUM — выше консистентность
ALL — WAT?
Не забываем
Даже при ONE и LOCAL_QUORUM запись пошлют всем
репликам в т. ч. в других ДЦ
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 29 / 55
Архитектура Клиентские запросы
Read
Read-запросы от координатора репликам:
Прямой запрос на чтение (в соответствии с
ConsistencyLevel)
Самым «быстрым» репликам
Сравниваем ответы
Если не совпадают, то самая свежая (по
timestamp) — клиенту
Фоновый read repair (всем остальным репликам)
Для синхронизации «горячих» данных
read_repair_chance по умолчанию 0.1
Если не совпадают хэши, то перезаписываем
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 30 / 55
Архитектура Клиентские запросы
Read: Пример
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 31 / 55
Архитектура Клиентские запросы
Read ConsistencyLevel
ONE — ближайшая реплика, возможно, устаревшие
данные
TWO
THREE
QUORUM — inter DC + нужен запас прочности
LOCAL_QUORUM — быстрее, чем QUORUM
EACH_QUORUM — выше консистентность
ALL — WAT?
Интерпретация
Возвращаем самое свежее значение из требуемого
множества реплик
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 32 / 55
Архитектура Клиентские запросы
Quorum
Quorum
Quorum = RF
2 + 1
RF = 2 ⇒ Quorum = 2 — нет запаса
RF = 3 ⇒ Quorum = 2 — в запасе 1 узел
RF = 4 ⇒ Quorum = 3 — в запасе 1 узел
RF = 5 ⇒ Quorum = 3 — в запасе 2 узла
Consistency
R + W > RF
R = 2 + W = 2 > RF = 3 — в запасе 1 узел
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 33 / 55
Архитектура Клиентские запросы
Клиентские запросы
Проблема
Узел сбойнул: железо или (чаще) сеть
А мы хотим на него записать
Что делать?
Hinted Handoff
Пусть известно (Gossip), что узел лежит, или узел
не отвечает
Координатор запоминает hint локально
Когда обнаружится, что узел поднялся (Gossip),
ему перешлют накопленные hints
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 34 / 55
Архитектура Клиентские запросы
Hint
Содержимое
Кому предназначается
Значение ключа
Данные
Внимание
Hints хранятся ограниченное время (по
умолчанию 3 часа)
Официально рекомендуется периодический запуск
repair
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 35 / 55
Архитектура Клиентские запросы
Ограничения
Hint засчитывается не на всех уровнях
консистентности10
: 2 узла (1 мёртв) + RF=1 +
ConsistencyLevel.ONE
Но всегда работает, если не выключен
ConsistencyLevel.ANY — extreme write availability
Если умрёт машина с hints, то мы их потеряем
10
http://www.datastax.com/dev/blog/modern-hinted-handoff
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 36 / 55
Архитектура Клиентские запросы
Anti-entropy
Проблема
Узел умер — пропустил удаление данных
Вернулся к жизни — данные возродились
Anti-entropy
Инициируем с помощью nodetool repair
Запускаем readonly major compaction
Строим Merkle Treea
Обмениваемся деревьями и ищем отличия
Обмениваемся отличающимися сегментами
a
http://en.wikipedia.org/wiki/Merkle_tree
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 37 / 55
Детали реализации Хранение данных
Write Path
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 38 / 55
Детали реализации Хранение данных
Пояснения
Memtables and SSTables per table
Memtable — отсортирована
SSTable — неизменяемая отсортированная
ассоциативная таблица
Обычно строка распределена по нескольким
SSTable
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 39 / 55
Детали реализации Хранение данных
Пример
Команды:
1 write (k1, c1:v1)
2 write (k2, c1:v1 c2:v2)
3 write (k1, c1:v4 c3:v3 c2:v2)
Commit-log:
1 k1, c1:v1
2 k2, c1:v1 c2:v2
3 k1, c1:v4 c3:v3 c2:v2
Memtable/SSTable:
1 k1 c1:v4 c2:v2 c3:v3
2 k2 c1:v1 c2:v2
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 40 / 55
Детали реализации Хранение данных
Flush
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 41 / 55
Детали реализации Хранение данных
Update Path
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 42 / 55
Детали реализации Хранение данных
Delete
SSTable неизменяема
Delete — tombstone marker
Реальное удаление по истечении
gc_grace_seconds во время compaction
Удалённые данные могут возродиться (см.
Anti-entropy)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 43 / 55
Детали реализации Хранение данных
Compaction
Объединяет SSTable-файлы
Фрагменты строк
Протухшие tombstones
Перестраивает индексы
SSTable отсортирована ⇒ последовательный
проход
SizeTieredCompactionStrategy11
vs
LeveledCompactionStrategy12
DateTieredCompactionStrategy13
11
http:
//www.datastax.com/dev/blog/when-to-use-leveled-compaction
12
http://www.datastax.com/dev/blog/
leveled-compaction-in-apache-cassandra
13
https:
//www.datastax.com/dev/blog/datetieredcompactionstrategyЦесько В. А. (Технополис) Cassandra 24 мая 2017 г. 44 / 55
Детали реализации Хранение данных
Read
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 45 / 55
Детали реализации Хранение данных
Комментарии
Каждая SSTable имеет Bloom filter14
—
вероятность нахождения ключа в файле
Если вероятность отлична от 0, идём в partition
key cache
Если нашли ключ в кэше, идём по смещению,
находим сжатый блок и достаём данные
Если не нашли ключ в кэше:
В partition summary примерно находим смещение на
диске
Читаем последовательно блок с диска
Из compression offset map вынимаем индекс блока
Читаем сжатые данные и возвращаем клиенту
14
http://en.wikipedia.org/wiki/Bloom_filter
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 46 / 55
Детали реализации Хранение данных
Дополнительные структуры
Bloom filter — 1-2 ГБ / млрд. ключей
Partition summary — по умолчанию шаг 128
Compression offset map — 1-3 ГБ / 1 ТБ сжатых
данных
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 47 / 55
Детали реализации Хранение данных
Read Path
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 48 / 55
Детали реализации Хранение данных
Write-through Row Cache
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 49 / 55
Детали реализации Хранение данных
Key Cache + Row Cache
См. подробности15
.
15
http://docs.datastax.com/en/cassandra/3.0/cassandra/
operations/opsConfiguringCaches.html
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 50 / 55
Детали реализации CQL и колонки
CQL
1 CREATE TABLE comments (
2 article_id uuid,
3 posted_at timestamp,
4 author text,
5 karma int,
6 content text,
7 PRIMARY KEY (article_id, posted_at))
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 51 / 55
Детали реализации CQL и колонки
Колонки
См. подробности16
.
16
http://www.datastax.com/dev/blog/thrift-to-cql3Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 52 / 55
Детали реализации CQL и колонки
Wide vs Skinny Rows
Wide Rows
(+) Колонки отсортированы — возможны трюки17
(+/-) Атомарность
(-) Row cache (скорее всего) не работает
Skinny Rows
(+) Row cache
(+/-) Неатомарно, но меньше contention
(-) Больше записей — больше индексы, хуже
работает Bloom Filter
17
Класс!ная Cassandra: https://www.lektorium.tv/lecture/14531
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 53 / 55
Заключение Осталось за кадром
Осталось за кадром
SEDA18
Эксплуатация и тюнинг (JMX, nodetool)
Масштабные примеры использования19
См. блог DataStax20
18
http:
//en.wikipedia.org/wiki/Staged_event-driven_architecture
19
https://www.datastax.com/customers
20
http://www.datastax.com/dev/blog
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 54 / 55
Вопросы?
Вопросы?
https://polis.mail.ru/blog/view/111/
https://incubos.org/contacts/
Не забудьте про ДЗ
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 55 / 55

More Related Content

What's hot

Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
Vadim Tsesko
 
Haystack
HaystackHaystack
Haystack
Vadim Tsesko
 
Technopolis.NoSQL 01
Technopolis.NoSQL 01Technopolis.NoSQL 01
Technopolis.NoSQL 01
Vadim Tsesko
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. LuceneVadim Tsesko
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
Vadim Tsesko
 
Technopolis.NoSQL 02
Technopolis.NoSQL 02Technopolis.NoSQL 02
Technopolis.NoSQL 02
Vadim Tsesko
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
CodeFest
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
CodeFest
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
Ontico
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Ontico
 
CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.
Vadim Tsesko
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Ontico
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Alexey Lesovsky
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
Daniel Podolsky
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
Ontico
 

What's hot (20)

Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
 
Haystack
HaystackHaystack
Haystack
 
Technopolis.NoSQL 01
Technopolis.NoSQL 01Technopolis.NoSQL 01
Technopolis.NoSQL 01
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. Lucene
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
 
Technopolis.NoSQL 02
Technopolis.NoSQL 02Technopolis.NoSQL 02
Technopolis.NoSQL 02
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
 

Similar to Cassandra

Cassandra db
Cassandra dbCassandra db
Cassandra db
Andrei Poliakov
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
NoSQL - World IT Planet, Saint Petersburg 2015
NoSQL - World IT Planet, Saint Petersburg 2015NoSQL - World IT Planet, Saint Petersburg 2015
NoSQL - World IT Planet, Saint Petersburg 2015
Shamim bhuiyan
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахAlexander Mezhov
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Yandex
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
mourhoon
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun PankovOntico
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
DC/OS more than PAAS
DC/OS more than PAASDC/OS more than PAAS
DC/OS more than PAAS
Nikita Borzykh
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатленияfudz1k
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Andrey Akulov
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
Alexander Byndyu
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ RubtsovOntico
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОDaria Oreshkina
 

Similar to Cassandra (20)

Cassandra db
Cassandra dbCassandra db
Cassandra db
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
NoSQL - World IT Planet, Saint Petersburg 2015
NoSQL - World IT Planet, Saint Petersburg 2015NoSQL - World IT Planet, Saint Petersburg 2015
NoSQL - World IT Planet, Saint Petersburg 2015
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системах
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun Pankov
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
DC/OS more than PAAS
DC/OS more than PAASDC/OS more than PAAS
DC/OS more than PAAS
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Переход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределеннойПереход от монолитной архитектуры к распределенной
Переход от монолитной архитектуры к распределенной
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
 

Cassandra

  • 1. Cassandra «Использование баз данных» Цесько Вадим Александрович https://incubos.org @incubos 24 мая 2017 г. Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 1 / 55
  • 2. Содержание 1 Введение 2 Модель данных 3 Архитектура 4 Детали реализации 5 Заключение Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 2 / 55
  • 3. Введение History History July 2008 — open-sourced by Facebook1 March 2010 — graduated from the Apache Incubator Influenced by Amazon Dynamo Committers: Rackspace, Digg, Twitter, Amazon, Microsoft 1 Facebook. Cassandra — A Decentralized Structured Storage System: http://www.cs.cornell.edu/projects/ladis2009/papers/ lakshman-ladis2009.pdf Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 3 / 55
  • 4. Введение Features Features Decentralized — no SPoF, every node is identical Multi data center replication Elastic Scalability High Availability and Fault Tolerance Tunable consistency CQL Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 4 / 55
  • 5. Введение Data Model Data Model Based on Google Bigtable Hybrid: Key-value + Column-oriented Каждая строка содержит множество колонок Колонка (ячейка): имя + значение Разные строки могут иметь разный набор колонок Группировка колонок в семейства и суперсемейства Table A distributed multi dimensional map indexed by a key. Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 5 / 55
  • 6. Введение ACID ACID Никаких JOIN-ов и внешних ключей Атомарность на уровне строк, нет rollback Можно получить ошибку при записи, но запись состоится Отметки времени от клиента при конфликтах Настраиваемая консистентность (количество реплик) Изоляция на уровне строк Durability: commit log + replication Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 6 / 55
  • 7. Введение CAP CAP Tunable Consistency Tunable Availability Partition Tolerance Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 7 / 55
  • 8. Введение Пользователи Пользователи Самое популярное колоночное хранилище2 : Cisco CERN Digg Facebook IBM Netflix Reddit SoundCloud Twitter Odnoklassniki 2 http://db-engines.com/en/ranking/wide+column+store Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 8 / 55
  • 9. Введение Мотивация Мотивация If I had asked people what they wanted, they would have said faster horses. Henry Ford Что не так с RDBMS? Chapter 1. "What’s Wrong with Relational Databases?"in "Cassandra: The Definitive Guide"a a Eben Hewitt. Cassandra: The Definitive Guide. 2010. ISBN 1449390412. Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 9 / 55
  • 10. Введение Мотивация У нас есть сервис на RDBMS Всё работает? Не трогай! С чем могут быть проблемы: (Distributed) Transactions3 (Distributed) JOINs (Distributed) Schema evolution Sharding4 Functional segmentation Key-based sharding Lookup table 3 Gregor Hohpe. Starbucks Does Not Use Two-Phase Commit: http://www.eaipatterns.com/ramblings/18_starbucks.html 4 Michael Stonebraker. The Case for Shared Nothing. 1986 Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 10 / 55
  • 11. Введение Мотивация Use Case: RDBMS Scaling LiveJournal Brad Fitzpatrick. LiveJournal’s Backend: A history of scalinga . August 2005. a http://www.danga.com/words/2005_oscon/oscon-2005.pdf Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 11 / 55
  • 12. Модель данных Модель данных Cassandra — партиционированное хранилище рядов Исходим из запросов, а не из сущностей и связей Таблица — коллекция упорядоченных колонок Keyspace — группа таблиц (обычно per application) Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 12 / 55
  • 13. Модель данных Если глубже Если глубже Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 13 / 55
  • 14. Модель данных Интерфейсы Интерфейсы Thrift API Исторически первый Низкоуровневый Довольно многословный CQL SQL-подобный (Почти насколько же) выразительный Развивается Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 14 / 55
  • 15. Модель данных CQL Пример 1 CREATE TABLE songs ( 2 id uuid PRIMARY KEY, 3 title text, 4 album text, 5 artist text, 6 data blob 7 ); 1 CREATE TABLE playlists ( 2 id uuid, 3 song_order int, 4 song_id uuid, 5 title text, 6 album text, 7 artist text, 8 PRIMARY KEY (id, song_order)); Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 15 / 55
  • 16. Модель данных CQL Особенности Compound keys (clustering) Indices Collection types5 : set, list, map INSERT = UPDATE = UPSERT DELETE для строки или набора ячеек TTL Counters См. спеку6 5 http://www.datastax.com/dev/blog/cql3_collections 6 https://docs.datastax.com/en/dse/5.1/cql/index.html Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 16 / 55
  • 17. Архитектура Компоненты Компоненты Consistent Hashing + VNodes (см. лекцию 1) Gossip — состав и состояние узлов Partitioner — данные по узлам Replica placement strategy — реплики по узлам Snitch — топология (ДЦ и стойки) Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 17 / 55
  • 18. Архитектура Компоненты Virtual Nodes Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 18 / 55
  • 19. Архитектура Компоненты Gossip Узлы периодически обмениваются информацией о себе и других узлах Каждую секунду не больше чем с тремя узлами Все узлы быстро узнают информацио обо всех узлах Сообщения имеют версию — устаревшая информация затирается Seed nodes для bootstrap Gossip-информация хранится на каждой ноде персистентно Обнаружение сбоев узлов (+ dynamic snitch)7 7 Naohiro Hayashibara, Xavier D´efago, Rami Yared and Takuya Katayama. The φ Accrual Failure Detector. 2008 Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 19 / 55
  • 20. Архитектура Компоненты Partitioner Consistent Hashing8 Murmur3Partitioner (−263 to +263 ) ByteOrderedPartitioner Лексикографически по байтам ключа Сложная балансировка нагрузки (расчёт диапазонов партиций вручную) Неравномерная балансировка для разных таблиц Последовательная запись упирается в один узел 8 http://docs.datastax.com/en/dse/5.1/dse-arch/datastax_ enterprise/dbArch/archDataDistributeHashing.html Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 20 / 55
  • 21. Архитектура Компоненты Replica Placement Strategy Replication Factor — количество реплик на кластер Каждая реплика на отдельном узле Все реплики равноправны SimpleStrategy: 1 ДЦ (если планируете расширяться, не используйте) Первая реплика на узел от Partitioner Остальные — по часовой стрелке по кольцу NetworkTopologyStrategy: Определяет количество реплик в каждом ДЦ Узлы для реплик — идём по кольцу до следующей стойки Часто стойки вырубаются целиком (питание, охлаждение, сеть, ...) Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 21 / 55
  • 22. Архитектура Компоненты NetworkTopologyStrategy Факторы Желательно чтение внутри ДЦ Учитываем типичные сбои По 2 реплики в каждом ДЦ Сбой одного узла — ConsistencyLevel.ONE По 3 реплики в каждом ДЦ Сбой одного узла — ConsistencyLevel.LOCAL_QUORUM Сбой двух узлов — ConsistencyLevel.ONE Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 22 / 55
  • 23. Архитектура Компоненты Snitch Одинаковая конфигурация на узлах Dynamic snitching wrapper9 По умолчанию и только на чтение Данные с самой быстрой реплики, с остальных — контрольные суммы Статистика Read Latency и текущие задачи узлов SimpleSnitch: никаких ДЦ и стоек RackInferringSnitch: (110.dc.rack.node) PropertyFileSnitch: адреса в ДЦ/стойки в файле GossipingPropertyFileSnitch: локальный ДЦ и стойка в файле на каждом узле + Gossip 9 http://www.datastax.com/dev/blog/ dynamic-snitching-in-cassandra-past-present-and-futureЦесько В. А. (Технополис) Cassandra 24 мая 2017 г. 23 / 55
  • 24. Архитектура Клиентские запросы Клиентские запросы Можно обращаться к любому узлу Узел становится координатором для текущего запроса Координатор проксирует с учётом Partitioner и Replica Placement Strategy Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 24 / 55
  • 25. Архитектура Клиентские запросы Write Запрос всем репликам независимо от ConsistencyLevel ConsistencyLevel определяет, сколько реплик должно ответить для успеха Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 25 / 55
  • 26. Архитектура Клиентские запросы Write: Пример Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 26 / 55
  • 27. Архитектура Клиентские запросы MultiDC Write Оптимизация — один координатор в каждом удалённом ДЦ ConsistencyLevel.LOCAL_ONE или ConsistencyLevel.LOCAL_QUORUM — обязаны ответить только локальные узлы (география не влияет на задержку) Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 27 / 55
  • 28. Архитектура Клиентские запросы MultiDC Write: Пример Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 28 / 55
  • 29. Архитектура Клиентские запросы Write: ConsistencyLevel ANY — всегда успех (hinted handoff) ONE — в commit-log одного узла TWO THREE QUORUM — inter DC + нужен запас прочности LOCAL_QUORUM — быстрее, чем QUORUM EACH_QUORUM — выше консистентность ALL — WAT? Не забываем Даже при ONE и LOCAL_QUORUM запись пошлют всем репликам в т. ч. в других ДЦ Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 29 / 55
  • 30. Архитектура Клиентские запросы Read Read-запросы от координатора репликам: Прямой запрос на чтение (в соответствии с ConsistencyLevel) Самым «быстрым» репликам Сравниваем ответы Если не совпадают, то самая свежая (по timestamp) — клиенту Фоновый read repair (всем остальным репликам) Для синхронизации «горячих» данных read_repair_chance по умолчанию 0.1 Если не совпадают хэши, то перезаписываем Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 30 / 55
  • 31. Архитектура Клиентские запросы Read: Пример Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 31 / 55
  • 32. Архитектура Клиентские запросы Read ConsistencyLevel ONE — ближайшая реплика, возможно, устаревшие данные TWO THREE QUORUM — inter DC + нужен запас прочности LOCAL_QUORUM — быстрее, чем QUORUM EACH_QUORUM — выше консистентность ALL — WAT? Интерпретация Возвращаем самое свежее значение из требуемого множества реплик Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 32 / 55
  • 33. Архитектура Клиентские запросы Quorum Quorum Quorum = RF 2 + 1 RF = 2 ⇒ Quorum = 2 — нет запаса RF = 3 ⇒ Quorum = 2 — в запасе 1 узел RF = 4 ⇒ Quorum = 3 — в запасе 1 узел RF = 5 ⇒ Quorum = 3 — в запасе 2 узла Consistency R + W > RF R = 2 + W = 2 > RF = 3 — в запасе 1 узел Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 33 / 55
  • 34. Архитектура Клиентские запросы Клиентские запросы Проблема Узел сбойнул: железо или (чаще) сеть А мы хотим на него записать Что делать? Hinted Handoff Пусть известно (Gossip), что узел лежит, или узел не отвечает Координатор запоминает hint локально Когда обнаружится, что узел поднялся (Gossip), ему перешлют накопленные hints Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 34 / 55
  • 35. Архитектура Клиентские запросы Hint Содержимое Кому предназначается Значение ключа Данные Внимание Hints хранятся ограниченное время (по умолчанию 3 часа) Официально рекомендуется периодический запуск repair Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 35 / 55
  • 36. Архитектура Клиентские запросы Ограничения Hint засчитывается не на всех уровнях консистентности10 : 2 узла (1 мёртв) + RF=1 + ConsistencyLevel.ONE Но всегда работает, если не выключен ConsistencyLevel.ANY — extreme write availability Если умрёт машина с hints, то мы их потеряем 10 http://www.datastax.com/dev/blog/modern-hinted-handoff Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 36 / 55
  • 37. Архитектура Клиентские запросы Anti-entropy Проблема Узел умер — пропустил удаление данных Вернулся к жизни — данные возродились Anti-entropy Инициируем с помощью nodetool repair Запускаем readonly major compaction Строим Merkle Treea Обмениваемся деревьями и ищем отличия Обмениваемся отличающимися сегментами a http://en.wikipedia.org/wiki/Merkle_tree Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 37 / 55
  • 38. Детали реализации Хранение данных Write Path Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 38 / 55
  • 39. Детали реализации Хранение данных Пояснения Memtables and SSTables per table Memtable — отсортирована SSTable — неизменяемая отсортированная ассоциативная таблица Обычно строка распределена по нескольким SSTable Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 39 / 55
  • 40. Детали реализации Хранение данных Пример Команды: 1 write (k1, c1:v1) 2 write (k2, c1:v1 c2:v2) 3 write (k1, c1:v4 c3:v3 c2:v2) Commit-log: 1 k1, c1:v1 2 k2, c1:v1 c2:v2 3 k1, c1:v4 c3:v3 c2:v2 Memtable/SSTable: 1 k1 c1:v4 c2:v2 c3:v3 2 k2 c1:v1 c2:v2 Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 40 / 55
  • 41. Детали реализации Хранение данных Flush Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 41 / 55
  • 42. Детали реализации Хранение данных Update Path Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 42 / 55
  • 43. Детали реализации Хранение данных Delete SSTable неизменяема Delete — tombstone marker Реальное удаление по истечении gc_grace_seconds во время compaction Удалённые данные могут возродиться (см. Anti-entropy) Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 43 / 55
  • 44. Детали реализации Хранение данных Compaction Объединяет SSTable-файлы Фрагменты строк Протухшие tombstones Перестраивает индексы SSTable отсортирована ⇒ последовательный проход SizeTieredCompactionStrategy11 vs LeveledCompactionStrategy12 DateTieredCompactionStrategy13 11 http: //www.datastax.com/dev/blog/when-to-use-leveled-compaction 12 http://www.datastax.com/dev/blog/ leveled-compaction-in-apache-cassandra 13 https: //www.datastax.com/dev/blog/datetieredcompactionstrategyЦесько В. А. (Технополис) Cassandra 24 мая 2017 г. 44 / 55
  • 45. Детали реализации Хранение данных Read Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 45 / 55
  • 46. Детали реализации Хранение данных Комментарии Каждая SSTable имеет Bloom filter14 — вероятность нахождения ключа в файле Если вероятность отлична от 0, идём в partition key cache Если нашли ключ в кэше, идём по смещению, находим сжатый блок и достаём данные Если не нашли ключ в кэше: В partition summary примерно находим смещение на диске Читаем последовательно блок с диска Из compression offset map вынимаем индекс блока Читаем сжатые данные и возвращаем клиенту 14 http://en.wikipedia.org/wiki/Bloom_filter Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 46 / 55
  • 47. Детали реализации Хранение данных Дополнительные структуры Bloom filter — 1-2 ГБ / млрд. ключей Partition summary — по умолчанию шаг 128 Compression offset map — 1-3 ГБ / 1 ТБ сжатых данных Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 47 / 55
  • 48. Детали реализации Хранение данных Read Path Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 48 / 55
  • 49. Детали реализации Хранение данных Write-through Row Cache Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 49 / 55
  • 50. Детали реализации Хранение данных Key Cache + Row Cache См. подробности15 . 15 http://docs.datastax.com/en/cassandra/3.0/cassandra/ operations/opsConfiguringCaches.html Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 50 / 55
  • 51. Детали реализации CQL и колонки CQL 1 CREATE TABLE comments ( 2 article_id uuid, 3 posted_at timestamp, 4 author text, 5 karma int, 6 content text, 7 PRIMARY KEY (article_id, posted_at)) Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 51 / 55
  • 52. Детали реализации CQL и колонки Колонки См. подробности16 . 16 http://www.datastax.com/dev/blog/thrift-to-cql3Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 52 / 55
  • 53. Детали реализации CQL и колонки Wide vs Skinny Rows Wide Rows (+) Колонки отсортированы — возможны трюки17 (+/-) Атомарность (-) Row cache (скорее всего) не работает Skinny Rows (+) Row cache (+/-) Неатомарно, но меньше contention (-) Больше записей — больше индексы, хуже работает Bloom Filter 17 Класс!ная Cassandra: https://www.lektorium.tv/lecture/14531 Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 53 / 55
  • 54. Заключение Осталось за кадром Осталось за кадром SEDA18 Эксплуатация и тюнинг (JMX, nodetool) Масштабные примеры использования19 См. блог DataStax20 18 http: //en.wikipedia.org/wiki/Staged_event-driven_architecture 19 https://www.datastax.com/customers 20 http://www.datastax.com/dev/blog Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 54 / 55
  • 55. Вопросы? Вопросы? https://polis.mail.ru/blog/view/111/ https://incubos.org/contacts/ Не забудьте про ДЗ Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 55 / 55