cassandra: быстрая запись данных в высоконагруженных...

22
Cassandra: быстрая запись данных в высоконагруженных системах Александр Межов ООО Инфиннити twitter.com/AlexMAS mezhov.com 7-я конференция .NET разработчиков 22 сентября 2013 www.dotnetconf.ru

Upload: alexander-mezhov

Post on 14-Dec-2014

1.975 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Cassandra: быстрая запись данных в высоконагруженных системах

Cassandra: быстрая запись данных в

высоконагруженных системах

Александр МежовООО Инфиннити

twitter.com/AlexMASmezhov.com

7-я конференция .NET разработчиков22 сентября 2013www.dotnetconf.ru

Page 2: Cassandra: быстрая запись данных в высоконагруженных системах

CASSANDRA: ТЕОРИЯ

Page 3: Cassandra: быстрая запись данных в высоконагруженных системах

3Cassandra: быстрая запись данных, Александр Межов

Apache Cassandra

• Официальный сайт• http://cassandra.apache.org/

• Дистрибьютор и документация• http://www.datastax.com/

• Сообщество и инструментарий• http://planetcassandra.org/

Page 4: Cassandra: быстрая запись данных в высоконагруженных системах

4Cassandra: быстрая запись данных, Александр Межов

Особенности Cassandra

• Большие объемы данных• Устойчивость к нагрузкам и сбоям• Легкая масштабируемость и

репликация• Настраиваемая согласованность

данных• Простота администрирования• Поддержка нескольких дата-

центров• Отсутствие ведущего узла

Page 5: Cassandra: быстрая запись данных в высоконагруженных системах

5Cassandra: быстрая запись данных, Александр Межов

Модель данных Cassandra

Keyspace

ColumnFamily

Row

Key

Column- name- value- timestamp

Page 6: Cassandra: быстрая запись данных в высоконагруженных системах

6Cassandra: быстрая запись данных, Александр Межов

Запись & Чтение

HDD

RAM

CommitLog

Writer ReaderFlush

MemTable

SSTable

Restore

Compaction1

2

2

1

Page 7: Cassandra: быстрая запись данных в высоконагруженных системах

7Cassandra: быстрая запись данных, Александр Межов

Запись vs Чтение

• Запись• Нет чтений• Нет позиционирований (seek)• Быстрая• Атомарная в рамках строки ColumnFamily

• Чтение• Может читать из нескольких SSTable• Медленней записи (но все равно быстрое)• Позиционирования (seek) можно сократить за

счет RAM

Page 8: Cassandra: быстрая запись данных в высоконагруженных системах

8Cassandra: быстрая запись данных, Александр Межов

Распределение данных

• Стратегии распределения• Random partitioner• Byte-ordered partitioner

• Согласованное хэширование• Каждый узел имеет метку (token), которая

разбивает на части множество всех хэшей ключей

• Коэффициент репликации• Количество узлов, участвующих при

выполнении операции записи

Page 9: Cassandra: быстрая запись данных в высоконагруженных системах

9Cassandra: быстрая запись данных, Александр Межов

Координация записиKey1

Key1

Key1Key1

* Коэффициент репликации равен 3

Координатором может быть

любой узел

Page 10: Cassandra: быстрая запись данных в высоконагруженных системах

10Cassandra: быстрая запись данных, Александр Межов

Направленная отправкаKey1

Key1

Key1Key1

* Коэффициент репликации равен 3

hint

Page 11: Cassandra: быстрая запись данных в высоконагруженных системах

11Cassandra: быстрая запись данных, Александр Межов

Согласованность данных

• Вы сами определяете уровень согласованности и доступности при чтении/записи

Any, One, Two, Three,Quorum, LocalQuorum,EachQuorum, All

Quorum = (N / 2) + 1

Availability

Consistency

Parti

tion

tole

ranc

e

CAP-теорема (теорема Брюера)

Page 12: Cassandra: быстрая запись данных в высоконагруженных системах

12Cassandra: быстрая запись данных, Александр Межов

Поддержка согласованности

• Read repair• Anti-entropy node repair

Page 13: Cassandra: быстрая запись данных в высоконагруженных системах

13Cassandra: быстрая запись данных, Александр Межов

Ограничения Cassandra

• Нет JOIN, подзапросов и полноценной поддержки агрегирования

• Нет возможности сортировки данных, данные хранятся в отсортированном виде

• Все данные реплики должны умещаться на один раздел диска

Page 14: Cassandra: быстрая запись данных в высоконагруженных системах

14Cassandra: быстрая запись данных, Александр Межов

Cassandra Query Language (CQL)

• Спецификация языка запросов• http://

cassandra.apache.org/doc/cql3/CQL.html

• Синтаксис очень похож на SQL, но это лишь абстракция и она не имеет ничего общего с форматом хранения данных

Page 15: Cassandra: быстрая запись данных в высоконагруженных системах

CASSANDRA: ПРАКТИКА

Page 16: Cassandra: быстрая запись данных в высоконагруженных системах

16Cassandra: быстрая запись данных, Александр Межов

Можно ускориться

• Запись• Перенести CommitLog на отдельный диск (SSD)• Увеличить количество MemTable до записи на диск

• Чтение• Увеличить "Key cache"• Увеличить "Row cache"• Увеличить "OS file cache"

• И не забывать• Грамотно проектировать агрегаты (с учетом их

использования)• Выбирать подходящий уровень согласованности• Про существование процедуры уплотнения

Трудно реализовать в "облаке"

Page 17: Cassandra: быстрая запись данных в высоконагруженных системах

17Cassandra: быстрая запись данных, Александр Межов

Производительность

• Производительность увеличивается пропорционально количеству узлов

Page 18: Cassandra: быстрая запись данных в высоконагруженных системах

18Cassandra: быстрая запись данных, Александр Межов

А где цифры?

• Все зависит от задачи, способа ее решения, уровня согласованности, размера данных, размера кластера, канала связи и т.п.

• Запись• 0,1 … 0,4 мс

• Чтение• 0,13 … 15 мс

The Universe

Life

Ever

ythi

ng

42

Don't panic!

Page 19: Cassandra: быстрая запись данных в высоконагруженных системах

19Cassandra: быстрая запись данных, Александр Межов

Восстановление данных

• Не нужно делать backup базы• Если узел "упал", он просто

заменяется• Есть поддержка нескольких дата-

центров

Page 20: Cassandra: быстрая запись данных в высоконагруженных системах

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: быстрая запись данных в высоконагруженных системах

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: быстрая запись данных в высоконагруженных системах

22Cassandra: быстрая запись данных, Александр Межов

Спасибо за внимание

Александр МежовООО Инфиннити

[email protected]/AlexMAS