cassandra: быстрая запись данных в высоконагруженных...
DESCRIPTION
TRANSCRIPT
Cassandra: быстрая запись данных в
высоконагруженных системах
Александр МежовООО Инфиннити
twitter.com/AlexMASmezhov.com
7-я конференция .NET разработчиков22 сентября 2013www.dotnetconf.ru
CASSANDRA: ТЕОРИЯ
3Cassandra: быстрая запись данных, Александр Межов
Apache Cassandra
• Официальный сайт• http://cassandra.apache.org/
• Дистрибьютор и документация• http://www.datastax.com/
• Сообщество и инструментарий• http://planetcassandra.org/
4Cassandra: быстрая запись данных, Александр Межов
Особенности Cassandra
• Большие объемы данных• Устойчивость к нагрузкам и сбоям• Легкая масштабируемость и
репликация• Настраиваемая согласованность
данных• Простота администрирования• Поддержка нескольких дата-
центров• Отсутствие ведущего узла
5Cassandra: быстрая запись данных, Александр Межов
Модель данных Cassandra
Keyspace
ColumnFamily
Row
Key
Column- name- value- timestamp
6Cassandra: быстрая запись данных, Александр Межов
Запись & Чтение
HDD
RAM
CommitLog
Writer ReaderFlush
MemTable
SSTable
Restore
Compaction1
2
2
1
7Cassandra: быстрая запись данных, Александр Межов
Запись vs Чтение
• Запись• Нет чтений• Нет позиционирований (seek)• Быстрая• Атомарная в рамках строки ColumnFamily
• Чтение• Может читать из нескольких SSTable• Медленней записи (но все равно быстрое)• Позиционирования (seek) можно сократить за
счет RAM
8Cassandra: быстрая запись данных, Александр Межов
Распределение данных
• Стратегии распределения• Random partitioner• Byte-ordered partitioner
• Согласованное хэширование• Каждый узел имеет метку (token), которая
разбивает на части множество всех хэшей ключей
• Коэффициент репликации• Количество узлов, участвующих при
выполнении операции записи
9Cassandra: быстрая запись данных, Александр Межов
Координация записиKey1
Key1
Key1Key1
* Коэффициент репликации равен 3
Координатором может быть
любой узел
10Cassandra: быстрая запись данных, Александр Межов
Направленная отправкаKey1
Key1
Key1Key1
* Коэффициент репликации равен 3
hint
11Cassandra: быстрая запись данных, Александр Межов
Согласованность данных
• Вы сами определяете уровень согласованности и доступности при чтении/записи
Any, One, Two, Three,Quorum, LocalQuorum,EachQuorum, All
Quorum = (N / 2) + 1
Availability
Consistency
Parti
tion
tole
ranc
e
CAP-теорема (теорема Брюера)
12Cassandra: быстрая запись данных, Александр Межов
Поддержка согласованности
• Read repair• Anti-entropy node repair
13Cassandra: быстрая запись данных, Александр Межов
Ограничения Cassandra
• Нет JOIN, подзапросов и полноценной поддержки агрегирования
• Нет возможности сортировки данных, данные хранятся в отсортированном виде
• Все данные реплики должны умещаться на один раздел диска
14Cassandra: быстрая запись данных, Александр Межов
Cassandra Query Language (CQL)
• Спецификация языка запросов• http://
cassandra.apache.org/doc/cql3/CQL.html
• Синтаксис очень похож на SQL, но это лишь абстракция и она не имеет ничего общего с форматом хранения данных
CASSANDRA: ПРАКТИКА
16Cassandra: быстрая запись данных, Александр Межов
Можно ускориться
• Запись• Перенести CommitLog на отдельный диск (SSD)• Увеличить количество MemTable до записи на диск
• Чтение• Увеличить "Key cache"• Увеличить "Row cache"• Увеличить "OS file cache"
• И не забывать• Грамотно проектировать агрегаты (с учетом их
использования)• Выбирать подходящий уровень согласованности• Про существование процедуры уплотнения
Трудно реализовать в "облаке"
17Cassandra: быстрая запись данных, Александр Межов
Производительность
• Производительность увеличивается пропорционально количеству узлов
18Cassandra: быстрая запись данных, Александр Межов
А где цифры?
• Все зависит от задачи, способа ее решения, уровня согласованности, размера данных, размера кластера, канала связи и т.п.
• Запись• 0,1 … 0,4 мс
• Чтение• 0,13 … 15 мс
The Universe
Life
Ever
ythi
ng
42
Don't panic!
19Cassandra: быстрая запись данных, Александр Межов
Восстановление данных
• Не нужно делать backup базы• Если узел "упал", он просто
заменяется• Есть поддержка нескольких дата-
центров
20Cassandra: быстрая запись данных, Александр Межов
Developer Tools and Drivers
• Существует множество драйверов и утилит для многих языков и платформ• Java, .NET, C++, Node.JS, PHP, Ruby,
Python, Perl, Haskell, Go, Scala, Clojure
http://www.datastax.com/download/clientdrivers
21Cassandra: быстрая запись данных, Александр Межов
Пример на .NET (C#)
• Datastax C# Driver for Apache Cassandra• https://github.com/datastax/csharp-driver• https://www.nuget.org/packages/CassandraCSharpDrive
r/
PM> Install-Package CassandraCSharpDriver
22Cassandra: быстрая запись данных, Александр Межов
Спасибо за внимание
Александр МежовООО Инфиннити
[email protected]/AlexMAS