Your SlideShare is downloading. ×
0
Cassandra
Курс «Базы данных»
Цесько Вадим Александрович
http://incubos.org
@incubos
Computer Science Center
30 сентября 20...
Содержание
1 Введение
2 Модель данных
3 Архитектура
4 Детали реализации
5 Заключение
6 Домашнее задание
Цесько В. А. (Comp...
Введение History
History
July 2008 — open-sourced by Facebook1
March 2010 — graduated from the Apache Incubator
Influenced ...
Введение Features
Features
Decentralized — no SPoF, every node is identical
Multi data center replication
Elastic Scalabil...
Введение Data Model
Data Model
Based on Google Bigtable
Hybrid: Key-value + Column-oriented
Каждая строка содержит множест...
Введение ACID
ACID
Никаких JOIN-ов и внешних ключей
Атомарность на уровне строк, нет rollback
Можно получить ошибку при за...
Введение CAP
CAP
Tunable Consistency
Tunable Availability
Partition Tolerance
Цесько В. А. (CompSciCenter) Cassandra 30 се...
Введение Пользователи
Пользователи
Самое популярное колоночное хранилище2
:
Cisco
CERN
Digg
Facebook
IBM
Netflix
Reddit
Sou...
Введение Мотивация
Мотивация
If I had asked people what
they wanted, they would
have said faster horses.
Henry Ford
Что не...
Введение Мотивация
У нас есть сервис на RDBMS
Всё работает?
Не трогай!
С чем могут быть проблемы:
(Distributed) Transactio...
Введение Мотивация
Use Case: RDBMS Scaling
LiveJournal
Brad Fitzpatrick. LiveJournal’s Backend: A history of
scalinga
. Au...
Введение Мотивация
Web Scale
IDC. The Expanding Digital Universe5
. March 2007:
YouTube: 2007 — 100 M videos/day, 2008 — 1...
Модель данных
Модель данных
Cassandra — партиционированное хранилище
рядов
Исходим из запросов, а не из сущностей и связей...
Модель данных Если глубже
Если глубже
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 14 / 67
Модель данных Интерфейсы
Интерфейсы
Thrift API
Исторически первый
Низкоуровневый
Довольно многословный
CQL (текущая версия...
Модель данных CQL
Пример
1 CREATE TABLE songs (
2 id uuid PRIMARY KEY,
3 title text,
4 album text,
5 artist text,
6 data b...
Модель данных CQL
Особенности
Compound keys (clustering)
Indexes
Collection types7
: set, list, map
INSERT = UPDATE = UPSE...
Архитектура Компоненты
Компоненты
Consistent Hashing + VNodes (см. лекцию 1)
Gossip — состав и состояние узлов
Partitioner...
Архитектура Компоненты
Virtual Nodes
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 19 / 67
Архитектура Компоненты
Gossip
Узлы периодически обмениваются информацией о
себе и других узлах
Каждую секунду не больше че...
Архитектура Компоненты
Partitioner
Consistent Hashing10
Новый Murmur3Partitioner (−263
to +263
) и
старый RandomPartitione...
Архитектура Компоненты
Replica Placement Strategy
Replication Factor — количество реплик на кластер
Каждая реплика на отде...
Архитектура Компоненты
NetworkTopologyStrategy
Факторы
Желательно чтение внутри ДЦ
Учитываем типичные сбои
По 2 реплики в ...
Архитектура Компоненты
Snitch
Одинаковая конфигурация на узлах
Dynamic snitching wrapper11
По умолчанию и только на чтение...
Архитектура Клиентские запросы
Клиентские запросы
Можно обращаться к любому узлу
Узел становится координатором для текущег...
Архитектура Клиентские запросы
Write
Запрос всем репликам независимо от
ConsistencyLevel
ConsistencyLevel определяет, скол...
Архитектура Клиентские запросы
Write: Пример
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 27 / 67
Архитектура Клиентские запросы
MultiDC Write
Оптимизация — один координатор в каждом
удалённом ДЦ
ConsistencyLevel.ONE или...
Архитектура Клиентские запросы
MultiDC Write: Пример
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 29 / 67
Архитектура Клиентские запросы
Write: ConsistencyLevel
ANY — всегда успех (hinted handoff)
ONE — в commit-log одного узла
T...
Архитектура Клиентские запросы
Read
Read-запросы от координатора репликам:
Прямой запрос на чтение (в соответствии с
Consi...
Архитектура Клиентские запросы
Read: Пример
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 32 / 67
Архитектура Клиентские запросы
Read ConsistencyLevel
ONE — ближайшая реплика, возможно, устаревшие
данные
TWO
THREE
QUORUM...
Архитектура Клиентские запросы
Quorum
Quorum
Quorum = RF
2 + 1
RF = 2 ⇒ Quorum = 2 — нет запаса
RF = 3 ⇒ Quorum = 2 — в за...
Архитектура Клиентские запросы
Клиентские запросы
Проблема
Узел сбойнул: железо или (чаще) сеть
А мы хотим на него записат...
Архитектура Клиентские запросы
Hint
Содержимое
Кому предназначается
Значение ключа
Данные
Внимание
Hints хранятся ограниче...
Архитектура Клиентские запросы
Ограничения
Hint засчитывается не на всех уровнях
консистентности12
: 2 узла (1 мёртв) + RF...
Архитектура Клиентские запросы
Anti-entropy
Проблема
Узел умер — пропустил удаление данных
Вернулся к жизни — данные возро...
Детали реализации Хранение данных
Write Path
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 39 / 67
Детали реализации Хранение данных
Пояснения
Memtables and SSTables per table
Memtable — отсортирована
SSTable — неизменяем...
Детали реализации Хранение данных
Пример
Команды:
write (k1 , c1:v1)
write (k2 , c1:v1 c2:v2)
write (k1 , c1:v4 c3:v3 c2:v...
Детали реализации Хранение данных
Flush
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 42 / 67
Детали реализации Хранение данных
Update Path
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 43 / 67
Детали реализации Хранение данных
Delete
SSTable неизменяема
Delete — tombstone marker
Реальное удаление по истечении
gc_g...
Детали реализации Хранение данных
Compaction
Объединяет SSTable-файлы
Фрагменты строк
Протухшие tombstones
Перестраивает и...
Детали реализации Хранение данных
Read
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 46 / 67
Детали реализации Хранение данных
Комментарии
Каждая SSTable имеет Bloom filter15
—
вероятность нахождения ключа в файле
Ес...
Детали реализации Хранение данных
Дополнительные структуры
Bloom filter — 1-2 ГБ / млрд. ключей
Partition summary — по умол...
Детали реализации Хранение данных
Read Path
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 49 / 67
Детали реализации Хранение данных
Write-through Row Cache
Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 50 / ...
Детали реализации Хранение данных
Key Cache + Row Cache
См. подробности16
.
16
http://www.datastax.com/docs/1.1/operations...
Детали реализации CQL и колонки
CQL
1 CREATE TABLE comments (
2 article_id uuid,
3 posted_at timestamp,
4 author text,
5 k...
Детали реализации CQL и колонки
Колонки
См. подробности17
.
17
http://www.datastax.com/dev/blog/thrift-to-cql3
Цесько В. А...
Детали реализации CQL и колонки
Wide vs Skinny Rows
Wide Rows
(+) Колонки отсортированы — возможны трюки18
(+/-) Атомарнос...
Заключение Опыт использования
Опыт использования
Из Hadoop можно «положить» кластер — ждём
CqlOutputFormat
Довольно много ...
Заключение Осталось за кадром
Осталось за кадром
SEDA19
Эксплуатация и тюнинг (JMX, nodetool)
Масштабные примеры использов...
Заключение Следующая лекция
Следующая лекция
MongoDB (приглашённый доклад)
Цесько В. А. (CompSciCenter) Cassandra 30 сентя...
Домашнее задание Требования (ещё раз)
Требования (ещё раз)
Проект на http://bitbucket.org (Hg) /
http://github.com (Git) +...
Домашнее задание На текущий момент
Feature Request 0
«Телефонная книга» (см. лекцию 01-intro22
слайд #26)
Обязательный
Выд...
Домашнее задание На текущий момент
Зачёт хотят
https://github.com/Elizaveta239/Storage_
system_csc
https://github.com/Feod...
Домашнее задание На текущий момент
Feature Request 1
«Big data» per node (см. лекцию 04-commit23
слайд #64)
Выдан 2013-09-...
Домашнее задание На текущий момент
Кто всё-таки хочет участвовать
FR1 заменяет FR0
Становится обязательным
Не засчитываетс...
Домашнее задание Система оценивания
Система оценивания
Будет выдано не меньше 6 Feature Requests (FR)
Для каждого FR — жёс...
Домашнее задание Feature Requests
FR2: Static Sharding
Равноправные узлы
Данные распределены по кластеру
Статическая конфи...
Домашнее задание Feature Requests
FR3: Master-Slave Replication
Commit-log от master к slaves
Статическая конфигурация
Кли...
Домашнее задание Feature Requests
FR4: Scalability
Динамическая конфигурация (добавляем и
удаляем ноды на лету)
В простейш...
Вопросы?
Вопросы?
http://incubos.org/contacts/
Общие вопросы — в Twitter: @incubos
Вопросы по лекциям — в комментариях:
ht...
Upcoming SlideShare
Loading in...5
×

2013 09 30_db_lecture_03

1,503

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,503
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "2013 09 30_db_lecture_03"

  1. 1. Cassandra Курс «Базы данных» Цесько Вадим Александрович http://incubos.org @incubos Computer Science Center 30 сентября 2013 г. Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 1 / 67
  2. 2. Содержание 1 Введение 2 Модель данных 3 Архитектура 4 Детали реализации 5 Заключение 6 Домашнее задание Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 2 / 67
  3. 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 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 3 / 67
  4. 4. Введение Features Features Decentralized — no SPoF, every node is identical Multi data center replication Elastic Scalability High Availability and Fault Tolerance Tunable consistency CQL Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 4 / 67
  5. 5. Введение Data Model Data Model Based on Google Bigtable Hybrid: Key-value + Column-oriented Каждая строка содержит множество колонок Колонка (ячейка): имя + значение Разные строки могут иметь разный набор колонок Группировка колонок в семейства и суперсемейства Table A distributed multi dimensional map indexed by a key Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 5 / 67
  6. 6. Введение ACID ACID Никаких JOIN-ов и внешних ключей Атомарность на уровне строк, нет rollback Можно получить ошибку при записи, но запись состоится Отметки времени от клиента при конфликтах Настраиваемая консистентность (количество реплик) Изоляция на уровне строк Durability: commit log + replication Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 6 / 67
  7. 7. Введение CAP CAP Tunable Consistency Tunable Availability Partition Tolerance Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 7 / 67
  8. 8. Введение Пользователи Пользователи Самое популярное колоночное хранилище2 : Cisco CERN Digg Facebook IBM Netflix Reddit SoundCloud Twitter Odnoklassniki Yandex 2 http://db-engines.com/en/ranking/wide+column+store Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 8 / 67
  9. 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 Definiteve Guide"a a Eben Hewitt. Cassandra: The Definitive Guide. 2010. ISBN 1449390412. Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 9 / 67
  10. 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 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 10 / 67
  11. 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 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 11 / 67
  12. 12. Введение Мотивация Web Scale IDC. The Expanding Digital Universe5 . March 2007: YouTube: 2007 — 100 M videos/day, 2008 — 1 B videos/day Chevron: 2 TB/day Internet: 2006 — 166 EB, 2010 — 1 ZB Wall-Mart: 2000 — 110 TB, 2004 — 0.5 PB Email: 1998 — 253 M accounts, 2010 — 2 B accounts etc.6 5 http://www.emc.com/collateral/analyst-reports/ expanding-digital-idc-white-paper.pdf 6 http://highscalability.com/ Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 12 / 67
  13. 13. Модель данных Модель данных Cassandra — партиционированное хранилище рядов Исходим из запросов, а не из сущностей и связей Таблица — коллекция упорядоченных колонок Keyspace — группа таблиц (обычно per application) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 13 / 67
  14. 14. Модель данных Если глубже Если глубже Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 14 / 67
  15. 15. Модель данных Интерфейсы Интерфейсы Thrift API Исторически первый Низкоуровневый Довольно многословный CQL (текущая версия 3.1) SQL-подобный (Почти насколько же) выразительный Развивается Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 15 / 67
  16. 16. Модель данных 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)); Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 16 / 67
  17. 17. Модель данных CQL Особенности Compound keys (clustering) Indexes Collection types7 : set, list, map INSERT = UPDATE = UPSERT DELETE для строки или набора ячеек TTL Counters См. спеку8 7 http://www.datastax.com/dev/blog/cql3_collections 8 http: //www.datastax.com/documentation/cql/3.1/webhelp/index.html Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 17 / 67
  18. 18. Архитектура Компоненты Компоненты Consistent Hashing + VNodes (см. лекцию 1) Gossip — состав и состояние узлов Partitioner — данные по узлам Replica placement strategy — реплики по узлам Snitch — топология (ДЦ и стойки) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 18 / 67
  19. 19. Архитектура Компоненты Virtual Nodes Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 19 / 67
  20. 20. Архитектура Компоненты Gossip Узлы периодически обмениваются информацией о себе и других узлах Каждую секунду не больше чем с тремя узлами Все узлы быстро узнают информацио обо всех узлах Сообщения имеют версию — устаревшая информация затирается Seed nodes во избежания партиционирования Gossip-информация хранится на каждой ноде персистентно Обнаружение сбоев узлов (+ dynamic snitch)9 9 Naohiro Hayashibara, Xavier D´efago, Rami Yared and Takuya Katayama. The φ Accrual Failure Detector. 2008 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 20 / 67
  21. 21. Архитектура Компоненты Partitioner Consistent Hashing10 Новый Murmur3Partitioner (−263 to +263 ) и старый RandomPartitioner (0 to 2127 − 1) ByteOrderedPartitioner Лексикографически по байтам ключа Сложная балансировка нагрузки (расчёт диапазонов партиций вручную) Неравномерная балансировка для разных таблиц Последовательная запись упирается в один узел 10 http://www.datastax.com/documentation/cassandra/2.0/webhelp/ cassandra/architecture/architectureDataDistributeAbout_c.html Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 21 / 67
  22. 22. Архитектура Компоненты Replica Placement Strategy Replication Factor — количество реплик на кластер Каждая реплика на отдельном узле Все реплики равноправны SimpleStrategy: 1 ДЦ (если планируете расширяться, не используйте) Первая реплика на узел от Partitioner Остальные — по часовой стрелке по кольцу NetworkTopologyStrategy: Определяет количество реплик в каждом ДЦ Узлы для реплик — идём по кольцу до следующей стойки Часто стойки вырубаются целиком (питание, охлаждение, сеть, ...) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 22 / 67
  23. 23. Архитектура Компоненты NetworkTopologyStrategy Факторы Желательно чтение внутри ДЦ Учитываем типичные сбои По 2 реплики в каждом ДЦ Сбой одного узла — ConsistencyLevel.ONE По 3 реплики в каждом ДЦ Сбой одного узла — ConsistencyLevel.LOCAL_QUORUM Сбой двух узлов — ConsistencyLevel.ONE Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 23 / 67
  24. 24. Архитектура Компоненты Snitch Одинаковая конфигурация на узлах Dynamic snitching wrapper11 По умолчанию и только на чтение Данные с самой быстрой реплики, с остальных — контрольные суммы Статистика Read Latency и текущие задачи узлов SimpleSnitch: никаких ДЦ и стоек RackInferringSnitch: (110.dc.rack.node) PropertyFileSnitch: адреса в ДЦ/стойки в файле GossipingPropertyFileSnitch: локальный ДЦ и стойка в файле на каждом узле + Gossip 11 http://www.datastax.com/dev/blog/ dynamic-snitching-in-cassandra-past-present-and-future Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 24 / 67
  25. 25. Архитектура Клиентские запросы Клиентские запросы Можно обращаться к любому узлу Узел становится координатором для текущего запроса Координатор проксирует с учётом Partitioner и Replica Placement Strategy Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 25 / 67
  26. 26. Архитектура Клиентские запросы Write Запрос всем репликам независимо от ConsistencyLevel ConsistencyLevel определяет, сколько реплик должно ответить для успеха Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 26 / 67
  27. 27. Архитектура Клиентские запросы Write: Пример Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 27 / 67
  28. 28. Архитектура Клиентские запросы MultiDC Write Оптимизация — один координатор в каждом удалённом ДЦ ConsistencyLevel.ONE или ConsistencyLevel.LOCAL_QUORUM — обязаны ответить только локальные узлы (география не влияет на задержку) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 28 / 67
  29. 29. Архитектура Клиентские запросы MultiDC Write: Пример Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 29 / 67
  30. 30. Архитектура Клиентские запросы Write: ConsistencyLevel ANY — всегда успех (hinted handoff) ONE — в commit-log одного узла TWO THREE QUORUM — inter DC + нужен запас прочности LOCAL_QUORUM — быстрее, чем QUORUM EACH_QUORUM — выше консистентность ALL — WAT? Не забываем Даже при ONE и LOCAL_QUORUM запись пошлют всем репликам в т. ч. в других ДЦ Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 30 / 67
  31. 31. Архитектура Клиентские запросы Read Read-запросы от координатора репликам: Прямой запрос на чтение (в соответствии с ConsistencyLevel) Самым «быстрым» репликам Сравниваем ответы Если не совпадают, то самая свежая (по timestamp) — клиенту Фоновый read repair (всем остальным репликам) Для синхронизации «горячих» данных read_repair_chance по умолчанию 0.1 Если не совпадают хэши, то перезаписываем Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 31 / 67
  32. 32. Архитектура Клиентские запросы Read: Пример Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 32 / 67
  33. 33. Архитектура Клиентские запросы Read ConsistencyLevel ONE — ближайшая реплика, возможно, устаревшие данные TWO THREE QUORUM — inter DC + нужен запас прочности LOCAL_QUORUM — быстрее, чем QUORUM EACH_QUORUM — выше консистентность ALL — WAT? Интерпретация Возвращаем самое свежее значение из требуемого множества реплик Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 33 / 67
  34. 34. Архитектура Клиентские запросы 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 узел Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 34 / 67
  35. 35. Архитектура Клиентские запросы Клиентские запросы Проблема Узел сбойнул: железо или (чаще) сеть А мы хотим на него записать Что делать? Hinted Handoff Пусть известно (Gossip), что узел лежит, или узел не отвечает Координатор запоминает hint локально Когда обнаружится, что узел поднялся (Gossip), ему перешлют накопленные hints Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 35 / 67
  36. 36. Архитектура Клиентские запросы Hint Содержимое Кому предназначается Значение ключа Данные Внимание Hints хранятся ограниченное время (по умолчанию 3 часа) Официально рекомендуется периодический запуск repair Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 36 / 67
  37. 37. Архитектура Клиентские запросы Ограничения Hint засчитывается не на всех уровнях консистентности12 : 2 узла (1 мёртв) + RF=1 + ConsistencyLevel.ONE Но всегда работает, если не выключен ConsistencyLevel.ANY — extreme write availability Если умрёт машина с hints, то мы их потеряем 12 http://www.datastax.com/dev/blog/modern-hinted-handoff Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 37 / 67
  38. 38. Архитектура Клиентские запросы Anti-entropy Проблема Узел умер — пропустил удаление данных Вернулся к жизни — данные возродились Anti-entropy Инициируем с помощью nodetool repair Запускаем readonly major compaction Строим Merkle Treea Обмениваемся деревьями и ищем отличия Обмениваемся отличающимися сегментами a http://en.wikipedia.org/wiki/Merkle_tree Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 38 / 67
  39. 39. Детали реализации Хранение данных Write Path Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 39 / 67
  40. 40. Детали реализации Хранение данных Пояснения Memtables and SSTables per table Memtable — отсортирована SSTable — неизменяемая отсортированная ассоциативная таблица Обычно строка распределена по нескольким SSTable Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 40 / 67
  41. 41. Детали реализации Хранение данных Пример Команды: write (k1 , c1:v1) write (k2 , c1:v1 c2:v2) write (k1 , c1:v4 c3:v3 c2:v2) Commit-log: k1 , c1:v1 k2 , c1:v1 c2:v2 k1 , c1:v4 c3:v3 c2:v2 Memtable/SSTable: k1 c1:v4 c2:v2 c3:v3 k2 c1:v1 c2:v2 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 41 / 67
  42. 42. Детали реализации Хранение данных Flush Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 42 / 67
  43. 43. Детали реализации Хранение данных Update Path Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 43 / 67
  44. 44. Детали реализации Хранение данных Delete SSTable неизменяема Delete — tombstone marker Реальное удаление по истечении gc_grace_seconds во время compaction Удалённые данные могут возродиться (см. Anti-entropy) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 44 / 67
  45. 45. Детали реализации Хранение данных Compaction Объединяет SSTable-файлы Фрагменты строк Протухшие tombstones Перестраивает индексы SSTable отсортирована ⇒ последовательный проход SizeTieredCompactionStrategy и LeveledCompactionStrategy1314 13 http: //www.datastax.com/dev/blog/when-to-use-leveled-compaction 14 http://www.datastax.com/dev/blog/ leveled-compaction-in-apache-cassandra Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 45 / 67
  46. 46. Детали реализации Хранение данных Read Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 46 / 67
  47. 47. Детали реализации Хранение данных Комментарии Каждая SSTable имеет Bloom filter15 — вероятность нахождения ключа в файле Если вероятность отлична от 0, идём в partition key cache Если нашли ключ в кэше, идём по смещению, находим сжатый блок и достаём данные Если не нашли ключ в кэше: В partition summary примерно находим смещение на диске Читаем последовательно блок с диска Из compression offset map вынимаем индекс блока Читаем сжатые данные и возвращаем клиенту 15 http://en.wikipedia.org/wiki/Bloom_filter Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 47 / 67
  48. 48. Детали реализации Хранение данных Дополнительные структуры Bloom filter — 1-2 ГБ / млрд. ключей Partition summary — по умолчанию шаг 128 Compression offset map — 1-3 ГБ / 1 ТБ сжатых данных Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 48 / 67
  49. 49. Детали реализации Хранение данных Read Path Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 49 / 67
  50. 50. Детали реализации Хранение данных Write-through Row Cache Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 50 / 67
  51. 51. Детали реализации Хранение данных Key Cache + Row Cache См. подробности16 . 16 http://www.datastax.com/docs/1.1/operations/tuning Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 51 / 67
  52. 52. Детали реализации 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)) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 52 / 67
  53. 53. Детали реализации CQL и колонки Колонки См. подробности17 . 17 http://www.datastax.com/dev/blog/thrift-to-cql3 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 53 / 67
  54. 54. Детали реализации CQL и колонки Wide vs Skinny Rows Wide Rows (+) Колонки отсортированы — возможны трюки18 (+/-) Атомарность (-) Row cache (скорее всего) не работает Skinny Rows (+) Row cache (+/-) Неатомарно, но меньше contention (-) Больше записей — больше индексы, хуже работает Bloom Filter 18 Класс!ная Cassandra: http://javapoint.ru/talks/15/ Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 54 / 67
  55. 55. Заключение Опыт использования Опыт использования Из Hadoop можно «положить» кластер — ждём CqlOutputFormat Довольно много «ручек» для подкручивания Внимание к GC Развитые средства мониторинга Периодический nodetool repair Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 55 / 67
  56. 56. Заключение Осталось за кадром Осталось за кадром SEDA19 Эксплуатация и тюнинг (JMX, nodetool) Масштабные примеры использования20 См. блог разработчиков21 19 http: //en.wikipedia.org/wiki/Staged_event-driven_architecture 20 http://www.planetcassandra.org/blog/post/ slideshare-presentations---cassandra-summit-2013 21 http://www.datastax.com/dev/blog Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 56 / 67
  57. 57. Заключение Следующая лекция Следующая лекция MongoDB (приглашённый доклад) Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 57 / 67
  58. 58. Домашнее задание Требования (ещё раз) Требования (ещё раз) Проект на http://bitbucket.org (Hg) / http://github.com (Git) + Issue Tracking Открытый проект — ссылку мне на почту Закрытый проект — мне админские права (incubos) Обязательно: Scala/Java + ScalaTest/JUnit + Maven/SBT Обязательно: README + INSTALL Команда 1-3 человека Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 58 / 67
  59. 59. Домашнее задание На текущий момент Feature Request 0 «Телефонная книга» (см. лекцию 01-intro22 слайд #26) Обязательный Выдан 2013-09-16 Сгорает сегодня 22 http://incubos.org/2013/edu/db/01-intro.pdf Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 59 / 67
  60. 60. Домашнее задание На текущий момент Зачёт хотят https://github.com/Elizaveta239/Storage_ system_csc https://github.com/Feodorov/DB https://github.com/medvector/ cscenter-databases13 https://github.com/Noxoomo/DBCSC WAT ?! Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 60 / 67
  61. 61. Домашнее задание На текущий момент Feature Request 1 «Big data» per node (см. лекцию 04-commit23 слайд #64) Выдан 2013-09-23 Сгорает 2013-10-14 23 http://incubos.org/2013/edu/db/04-commit.pdf Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 61 / 67
  62. 62. Домашнее задание На текущий момент Кто всё-таки хочет участвовать FR1 заменяет FR0 Становится обязательным Не засчитывается как дополнительный (не приносит балла) Всё так же сгорает 2013-10-14 Не забывайте Можно участвовать командой до 3 человек Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 62 / 67
  63. 63. Домашнее задание Система оценивания Система оценивания Будет выдано не меньше 6 Feature Requests (FR) Для каждого FR — жёсткий срок (но не меньше 2 недель) За каждый FR — 0, 1 или 2 балла (за особое мастерство и креативность) Для зачёта нужно FR0/FR1 + 4 балла + отчёт Проверяю каждые выходные (по возможности чаще) Ценю равномерный прогресс Ведите стабильную и нестабильную ветки Обратная связь в виде issues Не все issues закрыты — не зачтено Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 63 / 67
  64. 64. Домашнее задание Feature Requests FR2: Static Sharding Равноправные узлы Данные распределены по кластеру Статическая конфигурация (узлы и диапазоны ключей) Клиент знает конфигурацию и куда ходить Тесты + Testability Сгорает — 2013-10-14 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 64 / 67
  65. 65. Домашнее задание Feature Requests FR3: Master-Slave Replication Commit-log от master к slaves Статическая конфигурация Клиент знает конфигурацию — пишет в master, читает из slaves Тесты + Testability Сгорает — 2013-10-21 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 65 / 67
  66. 66. Домашнее задание Feature Requests FR4: Scalability Динамическая конфигурация (добавляем и удаляем ноды на лету) В простейшем случае 2PC новой конфигурации Graceful Degradation Consistent Hashing Миграция партиций при добавлении/удалении узлов Тесты + Testability Сгорает — 2013-10-28 Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 66 / 67
  67. 67. Вопросы? Вопросы? http://incubos.org/contacts/ Общие вопросы — в Twitter: @incubos Вопросы по лекциям — в комментариях: http://incubos.org/blog/ Частные вопросы — в почту vadim.tsesko@gmail.com Цесько В. А. (CompSciCenter) Cassandra 30 сентября 2013 г. 67 / 67
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×