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