К основному содержимому
#Architecture

[3/3] Cassandra: The Definitive Guide, 3rd edition (Рубрика Architecture)

#Architecture #Software #DistributedSystems #SystemDesign

Этим постом я заканчиваю рассказывать о книге про Cassandra (предыдущие посты: 1 и 2).

7. Designing Applications with Cassandra - авторы разбирают дизайн приложения для букинга отелей и выбирают микросервисный подход из-за обеспечения инкапсуляции логики внутри сервисов, наличия автономности для деплоя сервисов, а также независимого масштабирования при необходимости. Для проектирования авторы предлагают итеративно работать над UX design, data modeling, architecture. С точки зрения проектирования авторы начинают с идентификации bounded context, идентификации сервисов, дизайна persistence для микросервисов. Причем авторы ратуют за polglot persistence, где мы можем выбирать разные базы для разных сценариев (RDBMS, Document-oriented, Wide-column, graph databases, ...). В итоге, у нас получаются bounded contexts и наборы query для получения данных - это можно использовать для моделирования данных с использование Chebotko diagrams. Тут же авторы рассказывают про secondary indexes, свою часть которых должна хранить каждая нода. А также про материализованные представления (materialized views), которые позволяют хранить преконфигурированное view, которое помогает с запросами, которые основаны на одной из колонок, что не входят в primary key.

8. Application Development with Drivers - рассказ про возможности драйверо для работы с Cassandra. Так как книга была написана уже давно, то рекомендую почитать доки к последнему драйверу для Java от DataStax.

9. Writing and Reading Data - авторы рассказывают и показывают как писать и читать в Cassandra с учетом tunable consistency. Они объясняют как выглядит write path и read path с учетом схемы деплоймента кластера, а также работы движка хранения (Commit logs, Memtable, SSTable, LWT). Также авторы рассказывают как работает батчевая запись, read repair, запросы по диапозонам, сортировка, фильтрация, пейджинация и удаление записей.

10. Configuring and Deploying Cassandra - авторы показывают как задеплоить свой Cassandra кластер при помощи ccm (Cassandra cluster management). Если у вас Cassandra предоставляется ни как сервис, то вам стоит внимательно прочитать эту главу (а тем у кого это сервис читать можно менее внимательно:) )

11. Monitoring - эта глава посвящена мониторингу кассандры. Авторы рассказывают про использование jmx, nodetool и virtual tables, которые предоставляют метаданные о нодах и таблицах через стандартный CQL. Также в этой главе упоминается про логгирование Cassandra

12. Maintenance - из этой главы становится ясно, что поддержка Cassandra совсем не тривиальная задача:) 13. Performance Tuning - авторы предлагают использовать USE для анализа performance и дальше они рассказывают про то, как устроить стресс-тестирование кластеру, а потом про ее тюнинг за счет кеширования, настройки memtables, sstables, commit logs, hinted handoff, compaction, concurrency и тредов, сети и выставленных таймаутов. А напоследок авторы разбирают настройки JVM, что влияют на perf Кассандры.

14. Security - глава начинается с того, а как устроена аутентификация и авторизация в Cassandra, например, авторы рассказывают про RBAC. Дальше наступает время обсудить encryption (сертификаты, node-to-node и client-to-node encryption) и опции безопасности, что можно настроить в JMX. А напоследок в главе рассказывается про audit logging и как его можно настроить

15. Migrating and Integrating - эта глава рассказывает как переехать с RDBMS на Cassandra и авторы выдают следующий алгоритм

  • Понять когда пора мигрировать (авторы приводят список триггеров)
  • Адаптировать модель данных (entity, relationships)
  • Адаптировать приложение (поменять способы доступа к данным, способы поддержания консистентности, избавиться от хранимок (авторы рассказывают про UDF в Cassandra))
  • Распланировать схему деплоя и смигрировать данные (предлагается стандартная схема без даунтайма с параллельной работой с новой/старой базой на уровне приложения)

#Software #Architecture #DistributedSystems #SystemDesign