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

5,299 views

Published on

Published in: Technology
  • Be the first to comment

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

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

×