Первая лекция раздела NoSQL курса "Базы данных" в Технополисе.
Содержание: определения и примеры, классификация СУДБ, что значит Web Scale, hashing, caching, key-value хранилища.
Первая лекция раздела NoSQL курса "Базы данных" в Технополисе.
Содержание: определения и примеры, классификация СУДБ, что значит Web Scale, hashing, caching, key-value хранилища.
Первая лекция раздела NoSQL курса "Базы данных" в Технополисе: определения и примеры, классификация СУДБ, что значит Web Scale, hashing, caching, key-value хранилища.
Раздатчик музыки непосредственно занимается отдачей байтов аудиопотока многочисленным пользователям https://ok.ru/music. В пике суммарный трафик достигает 100 Гб/с через сотни тысяч соединений, а время до первого байта составляет не больше 100 мс. Предыдущая версия раздатчика на основе файлов и Apache Tomcat не устраивала нас требуемым количеством оборудования и неспособностью утилизировать современное железо. При разработке новой версии мы поставили перед собой цель сохранить внешнюю функциональность сервиса неизменной, но обойтись существенно меньшим количеством машин, сохранив при этом масштабируемость и отказоустойчивость сервиса.
В докладе мы рассмотрим, как различные архитектурные решения помогли нам обеспечить масштабируемость и отказоустойчивость сервиса за счёт распределения и репликации музыкальных треков между нодами. Затем подробно поговорим про устройство отдельной ноды, включая отказоустойчивую подсистему хранения, сетевую подсистему, а также использование подхода reactive streams. Уделим особое внимание собранным граблям и трюкам, позволившим увеличить производительность системы, упростить отладку и эксплуатацию системы.
Доклад ориентирован на разработчиков, которые хотят расширить свой арсенал подходов и инструментов для создания распределённых и/или высоконагруженных систем с интенсивным I/O.
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
Мы проговорим про связь приложения и ОС, какие компоненты есть в современной ОС на примере Linux, как настройки этих компонент могут повлиять на приложение.
Я расскажу про планировщик процессов, дисковый и сетевой ввод-вывод и соответствующие планировщики, управление памятью - как это все в общих чертах работает и как его потюнить.
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
Слушатели этого доклада получат представление о том, как построить отказоустойчивое, быстрое, простое и легко масштабируемое решение на базе Nginx и Tarantool.
Коротко о главном:
+ Обзор внутреннего устройства шардинга в Tarantool.
+ Обзор Tarantool upstream модуля для Nginx.
+ Результаты нагрузочного тестирования Tarantool шардинга в связке с Nginx модулем.
+ Live-demo: распределенное отображение графа категорий Wikipedia в СУБД Tarantool с единой точкой входа и возможностью реалтайм поиска по категориям.
Вторая лекция раздела NoSQL курса "Базы данных" в Технополисе.
Содержание: CAP теорема, распределённые транзакции, отношение happens-before, протокол Raft.
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
Некоторое время назад, когда в очередной раз встал вопрос о производительности большого парка mysql sharding серверов, мы не захотели покупать новые сервера и производить resharding. Мы обнаружили, что компания facebook выпустила в opensource большое количество своих разработок, в том числе и модуль ядра flashcache.
Flashcache — модуль для кэширования блоков блочного устройства, предоставляющий 4 разных режима кэширования.
В данном докладе я расскажу, как мы тестировали, поэтапно проверяя под нагрузкой, 3 из 4 режимов кэширования, сравнивая и выбирая оптимальный. Итогом данной работы стало внедрение данного модуля в нашу архитектуру (фотосервера, сервера БД).
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
В многоядерных высоконагруженных системах с высокой конкурентностью часто бывает сложно определить, чем занят отдельный процесс PostgreSQL. Он может находиться в ожидании локов высокого уровня, таких как локи таблиц, внутренних локов, используемых для синхронизации процессов, ввода-вывода и многих других.
В настоящий момент среди всех событий ожидания мониторить можно только локи высокого уровня с помощью представлений PostgreSQL. Другие типы ожиданий требуют использования низкоуровневых утилит типа perf, systemtap и других. Эти утилиты требуют специальных знаний и могут быть платформозависимыми. В то же время другие enterprise базы данных уже включают в себя инструменты для мониторинга ожиданий.
Мы разработали патч, который реализует мониторинг ожиданий в PostgreSQL. С минимальной настройкой (несколько конфигурационных параметров) этот патч показывает полную информацию о текущих ожиданиях в режиме реального времени и с небольшим оверхедом на всю систему. Этот патч уже работает на продакшен серверах Яндекса и показал свою полезность.
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...Ontico
HighLoad++ 2017
Зал «Кейптаун», 7 ноября, 14:00
Тезисы:
http://www.highload.ru/2017/abstracts/3082.html
Любое обновление чего-либо в продакшне - это проблема для администраторов, да и для всей компании в общем. И это особенная проблема, когда необходимо обновлять версию базы данных, и самый пик проблематичности, когда эта база - основное место хранения всех критически важных данных для проекта.
...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
Оперативная память становится всё более дешёвой и производительной, что позволяет использовать её для хранения рабочего набора данных всё большего числа приложений. Хранение всех данных в оперативной памяти позволяет сделать их высоко доступными, а алгоритмы для работы с данными либо существенно упростить, либо ускорить, а иногда — и то, и другое.
Тезисы - http://www.highload.ru/2015/abstracts/1964.html
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
HighLoad++ 2017
Зал «Рио-де-Жанейро», 7 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/3030.html
Оптимизация производительности – дело тонкое. Улучшая производительность системы при одной нагрузке, можно запросто ухудшить её при другой нагрузке. Основным мерилом производительности PostgreSQL в среде его разработчиков является pgbench. Как следствие, PostgreSQL стал "pgbench-optimized DBMS" (СУБД, оптимизированная для pgbench).
...
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
Потоковая репликация, которая появилась в 2010 году, стала одной из прорывных фич постгреса и в настоящее время практически ни одна инсталляция не обходится без использования потоковой репликации. Она надежна, легка в настройке, нетребовательна к ресурсам. Однако при всех своих положительных качествах, при её эксплуатации могут возникать различные проблемы и неприятные ситуации. Для диагностики и решения проблем, связанных с потоковой репликацией, есть множество инструментов, как встроенных в PostgreSQL, так и сторонних.
В этом докладе я сделаю обзор доступных инструментов и расскажу, как с помощью этих средств диагностировать различные типы проблем и как устранять их. Рассматривая методы решения, мы также рассмотрим проблемы, которые возникают при эксплуатации потоковой репликации.
Доклад будет полезен DBA и системным администраторам.
сравнение производительности СУБД MySQL и PostgreSQL для "типичной задачи стартапа".
Презентация сопровождала тестовую online-сессию и потому не содержит результатов тестирования.
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
+ Защита данных — это не "одна кнопка", нет годного любому единого решения. Задача всегда диктует выбор средств и решений.
+ RTO — Recovery Time Objective — максимальное время, за которое все ваши бизнес-задачи должны полностью быть восстановлены в работоспособное состояние после полной катастрофы ДЦ.
+ RPO — Recovery Point Objective — максимально приемлемый для ваших задач промежуток времени, за который вы готовы потерять данные.
+ Защита на уровне приложений. Приложение лучше всех знает, как защищать и реплицировать свои данные.
+ Асинхронная репликация — наилучший выход с точки зрения производительности, единственно возможный вариант в случае значительного географического разнесения дата-центров (сотни и более километров). Работает на уровне виртуальных машин.
+ Метро / "растянутые" кластеры и синхронная репликация — нулевой RPO, минимальный RTO, большие потери производительности и множество ограничений. Но иногда — единственный выход, если уровень приложения не умеет реплицировать данные.
+ Лучший подход — комбинация из репликации на уровне приложений, асинхронной и синхронной репликации средствами хранилища.
+ Что есть у Nutanix для решения подобных задач: DR (Async replication), Metro availability cluster, Timestream Backup.
+ Реализация решения с использованием Nutanix на примере FBI: крупнейший VDI в США. Защищенная, mission-critical инфраструктура на 70 тысяч виртуальных десктопов. Асинхронная репликация дата-центров на 1500 миль, защита данных от катастроф.
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)Ontico
DNS — это одна из основополагающих служб и протоколов современного интернета, сервис, который должен всегда работать. Каждый раз, когда конечный пользователь обращается к какому-либо ресурсу глобальной паутины, он использует DNS, и чтобы этот самый первый шаг к проектам у наших клиентов не занимал много времени, мы построили свой DNS-хостинг с использованием Anycast-балансировки. Чуть позже мы применили этот метод для балансировки и повышения доступности рекурсивных серверов внутри наших дата-центров.
В своём докладе я расскажу о способах обеспечения непрерывного обслуживания DNS-запросов, подводных камнях использования anycast’а, постараюсь раскрыть актуальные проблемы обслуживания DNS-серверов и поведаю о современных тенденциях в мире DNS.
Первая лекция раздела NoSQL курса "Базы данных" в Технополисе: определения и примеры, классификация СУДБ, что значит Web Scale, hashing, caching, key-value хранилища.
Раздатчик музыки непосредственно занимается отдачей байтов аудиопотока многочисленным пользователям https://ok.ru/music. В пике суммарный трафик достигает 100 Гб/с через сотни тысяч соединений, а время до первого байта составляет не больше 100 мс. Предыдущая версия раздатчика на основе файлов и Apache Tomcat не устраивала нас требуемым количеством оборудования и неспособностью утилизировать современное железо. При разработке новой версии мы поставили перед собой цель сохранить внешнюю функциональность сервиса неизменной, но обойтись существенно меньшим количеством машин, сохранив при этом масштабируемость и отказоустойчивость сервиса.
В докладе мы рассмотрим, как различные архитектурные решения помогли нам обеспечить масштабируемость и отказоустойчивость сервиса за счёт распределения и репликации музыкальных треков между нодами. Затем подробно поговорим про устройство отдельной ноды, включая отказоустойчивую подсистему хранения, сетевую подсистему, а также использование подхода reactive streams. Уделим особое внимание собранным граблям и трюкам, позволившим увеличить производительность системы, упростить отладку и эксплуатацию системы.
Доклад ориентирован на разработчиков, которые хотят расширить свой арсенал подходов и инструментов для создания распределённых и/или высоконагруженных систем с интенсивным I/O.
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
Мы проговорим про связь приложения и ОС, какие компоненты есть в современной ОС на примере Linux, как настройки этих компонент могут повлиять на приложение.
Я расскажу про планировщик процессов, дисковый и сетевой ввод-вывод и соответствующие планировщики, управление памятью - как это все в общих чертах работает и как его потюнить.
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
Слушатели этого доклада получат представление о том, как построить отказоустойчивое, быстрое, простое и легко масштабируемое решение на базе Nginx и Tarantool.
Коротко о главном:
+ Обзор внутреннего устройства шардинга в Tarantool.
+ Обзор Tarantool upstream модуля для Nginx.
+ Результаты нагрузочного тестирования Tarantool шардинга в связке с Nginx модулем.
+ Live-demo: распределенное отображение графа категорий Wikipedia в СУБД Tarantool с единой точкой входа и возможностью реалтайм поиска по категориям.
Вторая лекция раздела NoSQL курса "Базы данных" в Технополисе.
Содержание: CAP теорема, распределённые транзакции, отношение happens-before, протокол Raft.
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
Некоторое время назад, когда в очередной раз встал вопрос о производительности большого парка mysql sharding серверов, мы не захотели покупать новые сервера и производить resharding. Мы обнаружили, что компания facebook выпустила в opensource большое количество своих разработок, в том числе и модуль ядра flashcache.
Flashcache — модуль для кэширования блоков блочного устройства, предоставляющий 4 разных режима кэширования.
В данном докладе я расскажу, как мы тестировали, поэтапно проверяя под нагрузкой, 3 из 4 режимов кэширования, сравнивая и выбирая оптимальный. Итогом данной работы стало внедрение данного модуля в нашу архитектуру (фотосервера, сервера БД).
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
В многоядерных высоконагруженных системах с высокой конкурентностью часто бывает сложно определить, чем занят отдельный процесс PostgreSQL. Он может находиться в ожидании локов высокого уровня, таких как локи таблиц, внутренних локов, используемых для синхронизации процессов, ввода-вывода и многих других.
В настоящий момент среди всех событий ожидания мониторить можно только локи высокого уровня с помощью представлений PostgreSQL. Другие типы ожиданий требуют использования низкоуровневых утилит типа perf, systemtap и других. Эти утилиты требуют специальных знаний и могут быть платформозависимыми. В то же время другие enterprise базы данных уже включают в себя инструменты для мониторинга ожиданий.
Мы разработали патч, который реализует мониторинг ожиданий в PostgreSQL. С минимальной настройкой (несколько конфигурационных параметров) этот патч показывает полную информацию о текущих ожиданиях в режиме реального времени и с небольшим оверхедом на всю систему. Этот патч уже работает на продакшен серверах Яндекса и показал свою полезность.
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...Ontico
HighLoad++ 2017
Зал «Кейптаун», 7 ноября, 14:00
Тезисы:
http://www.highload.ru/2017/abstracts/3082.html
Любое обновление чего-либо в продакшне - это проблема для администраторов, да и для всей компании в общем. И это особенная проблема, когда необходимо обновлять версию базы данных, и самый пик проблематичности, когда эта база - основное место хранения всех критически важных данных для проекта.
...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
Оперативная память становится всё более дешёвой и производительной, что позволяет использовать её для хранения рабочего набора данных всё большего числа приложений. Хранение всех данных в оперативной памяти позволяет сделать их высоко доступными, а алгоритмы для работы с данными либо существенно упростить, либо ускорить, а иногда — и то, и другое.
Тезисы - http://www.highload.ru/2015/abstracts/1964.html
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
HighLoad++ 2017
Зал «Рио-де-Жанейро», 7 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/3030.html
Оптимизация производительности – дело тонкое. Улучшая производительность системы при одной нагрузке, можно запросто ухудшить её при другой нагрузке. Основным мерилом производительности PostgreSQL в среде его разработчиков является pgbench. Как следствие, PostgreSQL стал "pgbench-optimized DBMS" (СУБД, оптимизированная для pgbench).
...
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
Потоковая репликация, которая появилась в 2010 году, стала одной из прорывных фич постгреса и в настоящее время практически ни одна инсталляция не обходится без использования потоковой репликации. Она надежна, легка в настройке, нетребовательна к ресурсам. Однако при всех своих положительных качествах, при её эксплуатации могут возникать различные проблемы и неприятные ситуации. Для диагностики и решения проблем, связанных с потоковой репликацией, есть множество инструментов, как встроенных в PostgreSQL, так и сторонних.
В этом докладе я сделаю обзор доступных инструментов и расскажу, как с помощью этих средств диагностировать различные типы проблем и как устранять их. Рассматривая методы решения, мы также рассмотрим проблемы, которые возникают при эксплуатации потоковой репликации.
Доклад будет полезен DBA и системным администраторам.
сравнение производительности СУБД MySQL и PostgreSQL для "типичной задачи стартапа".
Презентация сопровождала тестовую online-сессию и потому не содержит результатов тестирования.
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
+ Защита данных — это не "одна кнопка", нет годного любому единого решения. Задача всегда диктует выбор средств и решений.
+ RTO — Recovery Time Objective — максимальное время, за которое все ваши бизнес-задачи должны полностью быть восстановлены в работоспособное состояние после полной катастрофы ДЦ.
+ RPO — Recovery Point Objective — максимально приемлемый для ваших задач промежуток времени, за который вы готовы потерять данные.
+ Защита на уровне приложений. Приложение лучше всех знает, как защищать и реплицировать свои данные.
+ Асинхронная репликация — наилучший выход с точки зрения производительности, единственно возможный вариант в случае значительного географического разнесения дата-центров (сотни и более километров). Работает на уровне виртуальных машин.
+ Метро / "растянутые" кластеры и синхронная репликация — нулевой RPO, минимальный RTO, большие потери производительности и множество ограничений. Но иногда — единственный выход, если уровень приложения не умеет реплицировать данные.
+ Лучший подход — комбинация из репликации на уровне приложений, асинхронной и синхронной репликации средствами хранилища.
+ Что есть у Nutanix для решения подобных задач: DR (Async replication), Metro availability cluster, Timestream Backup.
+ Реализация решения с использованием Nutanix на примере FBI: крупнейший VDI в США. Защищенная, mission-critical инфраструктура на 70 тысяч виртуальных десктопов. Асинхронная репликация дата-центров на 1500 миль, защита данных от катастроф.
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)Ontico
DNS — это одна из основополагающих служб и протоколов современного интернета, сервис, который должен всегда работать. Каждый раз, когда конечный пользователь обращается к какому-либо ресурсу глобальной паутины, он использует DNS, и чтобы этот самый первый шаг к проектам у наших клиентов не занимал много времени, мы построили свой DNS-хостинг с использованием Anycast-балансировки. Чуть позже мы применили этот метод для балансировки и повышения доступности рекурсивных серверов внутри наших дата-центров.
В своём докладе я расскажу о способах обеспечения непрерывного обслуживания DNS-запросов, подводных камнях использования anycast’а, постараюсь раскрыть актуальные проблемы обслуживания DNS-серверов и поведаю о современных тенденциях в мире DNS.
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Вводная часть посвящена определению и истории развития концепции NoSQL. Даются характеристики, рассказывается о способах использования. Рассматриваются виды NoSQL БД, теоретические основы NoSQL, а в конце лекции обсуждаются недостатки NoSQL-решений, а также проводится сравнение разных NoSQL-решений.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleYandex
Препроцессором сейчас уже никого не удивишь. С их помощью упрощается синтаксис css, добавляются переменные, условия и циклы. Все это хорошо и замечательно, но часто — не достаточно. Препроцессоры не дадут изменить уже существующий css, который вы получаете из внешних источников, не перепишут ссылки на картинки и шрифты при перемещении файлов в новую папку, не отсортируют css-свойства в нужном вам порядке и не удалят из файлов лишние правила. Во всех этих случаях, а также во многих других вам помогут постпроцессоры.
В своем докладе я расскажу, что такое постпроцессоры, какие они бывают и чем отличаются друг от друга. Объясню почему использовать их лучше, чем править css вручную и с помощью регулярных выражений, а также приведу примеры их использования в ежедневной работе.
DC/OS – больше чем PAAS, Никита Борзых (Express 42)Ontico
Доклад про ближайшее будущее в эксплуатации распределённых систем.
Компания Mesosphere весной 2016 сделала свою платформу DC/OS (data center operation system) бесплатной и открытой. Платформа DC/OS унифицирует и упрощает процесс поставки и эксплуатации систем.
Основными особенностями платформы являются:
– переход от host centric к resource centric подходу для всех компонентов вашего проекта за счёт представления серверов как ресурсов для приложения (с помощью mesos и marathon);
– наличие инструментов автоматического восстановления вашего проекта после аварии;
– marketplace для приложений. Например, можно развернуть MySQL, Elasticsearch, Kafka или mongodb кластер, используя готовые скрипты развертывания. Процесс развертывания кастомизируется, в случае необходимости можно описать кастомные приложения и поправить скрипты существующих;
– наличие API для интеграции в ваши системы CI/CD, мониторинга, и т.д.
Основные компоненты DC/OS:
– Apache Mesos — абстракция над датацентром, которая представляет сервера (физические и виртуальные) как ресурсы и распределяет эти ресурсы на основании данных о потребностях приложения;
– Marathon — система распределённого запуска приложений (в т.ч. docker контейнеров), основной фишкой является возможность декларативного описания вашей системы. Вы можете описать, сколько ресурсов нужно вашему приложению, зависимости между приложениями, и в каком порядке производить деплой.
Доклад разбит на три части:
– Интро про DC/OS, сравнение с kubernetes и coreos стеком;
– Рассказ про компоненты mesos и marathon, как их можно использовать с докером (и без!) уже сейчас;
– Опыт Express 42. Мы построили CI/CD платформу для приложений, с использованием Mesos, Marathon, Docker и Jenkins 2.0.
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 10:00
Тезисы:
http://backendconf.ru/2017/abstracts/2773.html
В этом докладе я рассмотрю несколько перспективных, на мой взгляд, баз данных, которые пока еще не очень популярны, но которые определенно ждет успех в будущем, особенно для highload-проектов. Я расскажу о Tarantool, ClickHouse и CockroachDB, о том, как они устроены, и почему я считаю, что они в будущем станут стандартом де-факто, как раньше был MySQL, а сейчас — MongoDB.
...
2. Содержание
1 Введение
2 Модель данных
3 Архитектура
4 Детали реализации
5 Заключение
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 2 / 55
3. Введение History
History
July 2008 — open-sourced by Facebook1
March 2010 — graduated from the Apache Incubator
Influenced by Amazon Dynamo
Committers: Rackspace, Digg, Twitter, Amazon,
Microsoft
1
Facebook. Cassandra — A Decentralized Structured Storage System:
http://www.cs.cornell.edu/projects/ladis2009/papers/
lakshman-ladis2009.pdf
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 3 / 55
4. Введение Features
Features
Decentralized — no SPoF, every node is identical
Multi data center replication
Elastic Scalability
High Availability and Fault Tolerance
Tunable consistency
CQL
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 4 / 55
5. Введение Data Model
Data Model
Based on Google Bigtable
Hybrid: Key-value + Column-oriented
Каждая строка содержит множество колонок
Колонка (ячейка): имя + значение
Разные строки могут иметь разный набор колонок
Группировка колонок в семейства и
суперсемейства
Table
A distributed multi dimensional map indexed by a key.
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 5 / 55
6. Введение ACID
ACID
Никаких JOIN-ов и внешних ключей
Атомарность на уровне строк, нет rollback
Можно получить ошибку при записи, но запись
состоится
Отметки времени от клиента при конфликтах
Настраиваемая консистентность (количество
реплик)
Изоляция на уровне строк
Durability: commit log + replication
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 6 / 55
8. Введение Пользователи
Пользователи
Самое популярное колоночное хранилище2
:
Cisco
CERN
Digg
Facebook
IBM
Netflix
Reddit
SoundCloud
Twitter
Odnoklassniki
2
http://db-engines.com/en/ranking/wide+column+store
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 8 / 55
9. Введение Мотивация
Мотивация
If I had asked people what
they wanted, they would
have said faster horses.
Henry Ford
Что не так с RDBMS?
Chapter 1. "What’s Wrong with Relational Databases?"in
"Cassandra: The Definitive Guide"a
a
Eben Hewitt. Cassandra: The Definitive Guide. 2010. ISBN
1449390412.
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 9 / 55
10. Введение Мотивация
У нас есть сервис на RDBMS
Всё работает?
Не трогай!
С чем могут быть проблемы:
(Distributed) Transactions3
(Distributed) JOINs
(Distributed) Schema evolution
Sharding4
Functional segmentation
Key-based sharding
Lookup table
3
Gregor Hohpe. Starbucks Does Not Use Two-Phase Commit:
http://www.eaipatterns.com/ramblings/18_starbucks.html
4
Michael Stonebraker. The Case for Shared Nothing. 1986
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 10 / 55
11. Введение Мотивация
Use Case: RDBMS Scaling
LiveJournal
Brad Fitzpatrick. LiveJournal’s Backend: A history of
scalinga
. August 2005.
a
http://www.danga.com/words/2005_oscon/oscon-2005.pdf
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 11 / 55
12. Модель данных
Модель данных
Cassandra — партиционированное хранилище
рядов
Исходим из запросов, а не из сущностей и связей
Таблица — коллекция упорядоченных колонок
Keyspace — группа таблиц (обычно per application)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 12 / 55
13. Модель данных Если глубже
Если глубже
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 13 / 55
14. Модель данных Интерфейсы
Интерфейсы
Thrift API
Исторически первый
Низкоуровневый
Довольно многословный
CQL
SQL-подобный
(Почти насколько же) выразительный
Развивается
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 14 / 55
15. Модель данных CQL
Пример
1 CREATE TABLE songs (
2 id uuid PRIMARY KEY,
3 title text,
4 album text,
5 artist text,
6 data blob
7 );
1 CREATE TABLE playlists (
2 id uuid,
3 song_order int,
4 song_id uuid,
5 title text,
6 album text,
7 artist text,
8 PRIMARY KEY (id, song_order));
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 15 / 55
16. Модель данных CQL
Особенности
Compound keys (clustering)
Indices
Collection types5
: set, list, map
INSERT = UPDATE = UPSERT
DELETE для строки или набора ячеек
TTL
Counters
См. спеку6
5
http://www.datastax.com/dev/blog/cql3_collections
6
https://docs.datastax.com/en/dse/5.1/cql/index.html
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 16 / 55
17. Архитектура Компоненты
Компоненты
Consistent Hashing + VNodes (см. лекцию 1)
Gossip — состав и состояние узлов
Partitioner — данные по узлам
Replica placement strategy — реплики по
узлам
Snitch — топология (ДЦ и стойки)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 17 / 55
19. Архитектура Компоненты
Gossip
Узлы периодически обмениваются информацией о
себе и других узлах
Каждую секунду не больше чем с тремя узлами
Все узлы быстро узнают информацио обо всех
узлах
Сообщения имеют версию — устаревшая
информация затирается
Seed nodes для bootstrap
Gossip-информация хранится на каждой ноде
персистентно
Обнаружение сбоев узлов (+ dynamic snitch)7
7
Naohiro Hayashibara, Xavier D´efago, Rami Yared and Takuya Katayama.
The φ Accrual Failure Detector. 2008
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 19 / 55
20. Архитектура Компоненты
Partitioner
Consistent Hashing8
Murmur3Partitioner (−263
to +263
)
ByteOrderedPartitioner
Лексикографически по байтам ключа
Сложная балансировка нагрузки (расчёт диапазонов
партиций вручную)
Неравномерная балансировка для разных таблиц
Последовательная запись упирается в один узел
8
http://docs.datastax.com/en/dse/5.1/dse-arch/datastax_
enterprise/dbArch/archDataDistributeHashing.html
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 20 / 55
21. Архитектура Компоненты
Replica Placement Strategy
Replication Factor — количество реплик на кластер
Каждая реплика на отдельном узле
Все реплики равноправны
SimpleStrategy:
1 ДЦ (если планируете расширяться, не используйте)
Первая реплика на узел от Partitioner
Остальные — по часовой стрелке по кольцу
NetworkTopologyStrategy:
Определяет количество реплик в каждом ДЦ
Узлы для реплик — идём по кольцу до следующей
стойки
Часто стойки вырубаются целиком (питание,
охлаждение, сеть, ...)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 21 / 55
22. Архитектура Компоненты
NetworkTopologyStrategy
Факторы
Желательно чтение внутри ДЦ
Учитываем типичные сбои
По 2 реплики в каждом ДЦ
Сбой одного узла — ConsistencyLevel.ONE
По 3 реплики в каждом ДЦ
Сбой одного узла —
ConsistencyLevel.LOCAL_QUORUM
Сбой двух узлов — ConsistencyLevel.ONE
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 22 / 55
23. Архитектура Компоненты
Snitch
Одинаковая конфигурация на узлах
Dynamic snitching wrapper9
По умолчанию и только на чтение
Данные с самой быстрой реплики, с остальных —
контрольные суммы
Статистика Read Latency и текущие задачи узлов
SimpleSnitch: никаких ДЦ и стоек
RackInferringSnitch: (110.dc.rack.node)
PropertyFileSnitch: адреса в ДЦ/стойки в
файле
GossipingPropertyFileSnitch: локальный ДЦ и
стойка в файле на каждом узле + Gossip
9
http://www.datastax.com/dev/blog/
dynamic-snitching-in-cassandra-past-present-and-futureЦесько В. А. (Технополис) Cassandra 24 мая 2017 г. 23 / 55
24. Архитектура Клиентские запросы
Клиентские запросы
Можно обращаться к любому узлу
Узел становится координатором для текущего
запроса
Координатор проксирует с учётом Partitioner и
Replica Placement Strategy
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 24 / 55
25. Архитектура Клиентские запросы
Write
Запрос всем репликам независимо от
ConsistencyLevel
ConsistencyLevel определяет, сколько реплик
должно ответить для успеха
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 25 / 55
27. Архитектура Клиентские запросы
MultiDC Write
Оптимизация — один координатор в каждом
удалённом ДЦ
ConsistencyLevel.LOCAL_ONE или
ConsistencyLevel.LOCAL_QUORUM — обязаны
ответить только локальные узлы (география не
влияет на задержку)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 27 / 55
29. Архитектура Клиентские запросы
Write: ConsistencyLevel
ANY — всегда успех (hinted handoff)
ONE — в commit-log одного узла
TWO
THREE
QUORUM — inter DC + нужен запас прочности
LOCAL_QUORUM — быстрее, чем QUORUM
EACH_QUORUM — выше консистентность
ALL — WAT?
Не забываем
Даже при ONE и LOCAL_QUORUM запись пошлют всем
репликам в т. ч. в других ДЦ
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 29 / 55
30. Архитектура Клиентские запросы
Read
Read-запросы от координатора репликам:
Прямой запрос на чтение (в соответствии с
ConsistencyLevel)
Самым «быстрым» репликам
Сравниваем ответы
Если не совпадают, то самая свежая (по
timestamp) — клиенту
Фоновый read repair (всем остальным репликам)
Для синхронизации «горячих» данных
read_repair_chance по умолчанию 0.1
Если не совпадают хэши, то перезаписываем
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 30 / 55
32. Архитектура Клиентские запросы
Read ConsistencyLevel
ONE — ближайшая реплика, возможно, устаревшие
данные
TWO
THREE
QUORUM — inter DC + нужен запас прочности
LOCAL_QUORUM — быстрее, чем QUORUM
EACH_QUORUM — выше консистентность
ALL — WAT?
Интерпретация
Возвращаем самое свежее значение из требуемого
множества реплик
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 32 / 55
33. Архитектура Клиентские запросы
Quorum
Quorum
Quorum = RF
2 + 1
RF = 2 ⇒ Quorum = 2 — нет запаса
RF = 3 ⇒ Quorum = 2 — в запасе 1 узел
RF = 4 ⇒ Quorum = 3 — в запасе 1 узел
RF = 5 ⇒ Quorum = 3 — в запасе 2 узла
Consistency
R + W > RF
R = 2 + W = 2 > RF = 3 — в запасе 1 узел
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 33 / 55
34. Архитектура Клиентские запросы
Клиентские запросы
Проблема
Узел сбойнул: железо или (чаще) сеть
А мы хотим на него записать
Что делать?
Hinted Handoff
Пусть известно (Gossip), что узел лежит, или узел
не отвечает
Координатор запоминает hint локально
Когда обнаружится, что узел поднялся (Gossip),
ему перешлют накопленные hints
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 34 / 55
35. Архитектура Клиентские запросы
Hint
Содержимое
Кому предназначается
Значение ключа
Данные
Внимание
Hints хранятся ограниченное время (по
умолчанию 3 часа)
Официально рекомендуется периодический запуск
repair
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 35 / 55
36. Архитектура Клиентские запросы
Ограничения
Hint засчитывается не на всех уровнях
консистентности10
: 2 узла (1 мёртв) + RF=1 +
ConsistencyLevel.ONE
Но всегда работает, если не выключен
ConsistencyLevel.ANY — extreme write availability
Если умрёт машина с hints, то мы их потеряем
10
http://www.datastax.com/dev/blog/modern-hinted-handoff
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 36 / 55
37. Архитектура Клиентские запросы
Anti-entropy
Проблема
Узел умер — пропустил удаление данных
Вернулся к жизни — данные возродились
Anti-entropy
Инициируем с помощью nodetool repair
Запускаем readonly major compaction
Строим Merkle Treea
Обмениваемся деревьями и ищем отличия
Обмениваемся отличающимися сегментами
a
http://en.wikipedia.org/wiki/Merkle_tree
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 37 / 55
39. Детали реализации Хранение данных
Пояснения
Memtables and SSTables per table
Memtable — отсортирована
SSTable — неизменяемая отсортированная
ассоциативная таблица
Обычно строка распределена по нескольким
SSTable
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 39 / 55
40. Детали реализации Хранение данных
Пример
Команды:
1 write (k1, c1:v1)
2 write (k2, c1:v1 c2:v2)
3 write (k1, c1:v4 c3:v3 c2:v2)
Commit-log:
1 k1, c1:v1
2 k2, c1:v1 c2:v2
3 k1, c1:v4 c3:v3 c2:v2
Memtable/SSTable:
1 k1 c1:v4 c2:v2 c3:v3
2 k2 c1:v1 c2:v2
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 40 / 55
42. Детали реализации Хранение данных
Update Path
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 42 / 55
43. Детали реализации Хранение данных
Delete
SSTable неизменяема
Delete — tombstone marker
Реальное удаление по истечении
gc_grace_seconds во время compaction
Удалённые данные могут возродиться (см.
Anti-entropy)
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 43 / 55
44. Детали реализации Хранение данных
Compaction
Объединяет SSTable-файлы
Фрагменты строк
Протухшие tombstones
Перестраивает индексы
SSTable отсортирована ⇒ последовательный
проход
SizeTieredCompactionStrategy11
vs
LeveledCompactionStrategy12
DateTieredCompactionStrategy13
11
http:
//www.datastax.com/dev/blog/when-to-use-leveled-compaction
12
http://www.datastax.com/dev/blog/
leveled-compaction-in-apache-cassandra
13
https:
//www.datastax.com/dev/blog/datetieredcompactionstrategyЦесько В. А. (Технополис) Cassandra 24 мая 2017 г. 44 / 55
46. Детали реализации Хранение данных
Комментарии
Каждая SSTable имеет Bloom filter14
—
вероятность нахождения ключа в файле
Если вероятность отлична от 0, идём в partition
key cache
Если нашли ключ в кэше, идём по смещению,
находим сжатый блок и достаём данные
Если не нашли ключ в кэше:
В partition summary примерно находим смещение на
диске
Читаем последовательно блок с диска
Из compression offset map вынимаем индекс блока
Читаем сжатые данные и возвращаем клиенту
14
http://en.wikipedia.org/wiki/Bloom_filter
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 46 / 55
47. Детали реализации Хранение данных
Дополнительные структуры
Bloom filter — 1-2 ГБ / млрд. ключей
Partition summary — по умолчанию шаг 128
Compression offset map — 1-3 ГБ / 1 ТБ сжатых
данных
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 47 / 55
49. Детали реализации Хранение данных
Write-through Row Cache
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 49 / 55
50. Детали реализации Хранение данных
Key Cache + Row Cache
См. подробности15
.
15
http://docs.datastax.com/en/cassandra/3.0/cassandra/
operations/opsConfiguringCaches.html
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 50 / 55
51. Детали реализации CQL и колонки
CQL
1 CREATE TABLE comments (
2 article_id uuid,
3 posted_at timestamp,
4 author text,
5 karma int,
6 content text,
7 PRIMARY KEY (article_id, posted_at))
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 51 / 55
52. Детали реализации CQL и колонки
Колонки
См. подробности16
.
16
http://www.datastax.com/dev/blog/thrift-to-cql3Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 52 / 55
53. Детали реализации CQL и колонки
Wide vs Skinny Rows
Wide Rows
(+) Колонки отсортированы — возможны трюки17
(+/-) Атомарность
(-) Row cache (скорее всего) не работает
Skinny Rows
(+) Row cache
(+/-) Неатомарно, но меньше contention
(-) Больше записей — больше индексы, хуже
работает Bloom Filter
17
Класс!ная Cassandra: https://www.lektorium.tv/lecture/14531
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 53 / 55
54. Заключение Осталось за кадром
Осталось за кадром
SEDA18
Эксплуатация и тюнинг (JMX, nodetool)
Масштабные примеры использования19
См. блог DataStax20
18
http:
//en.wikipedia.org/wiki/Staged_event-driven_architecture
19
https://www.datastax.com/customers
20
http://www.datastax.com/dev/blog
Цесько В. А. (Технополис) Cassandra 24 мая 2017 г. 54 / 55