Первая лекция раздела NoSQL курса "Базы данных" в Технополисе: определения и примеры, классификация СУДБ, что значит Web Scale, hashing, caching, key-value хранилища.
Первая лекция раздела 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.
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...Ontico
Чтобы добиться от системы максимальной производительности, необходимо учитывать структуру данных, с которыми вы работаете. Проблемы возникают, если данные очень неоднородные, и один из способов решения этих проблем - использовать возможности современных реляционных БД для хранения данных в документо-ориентированной форме.
Этот подход имеет свои плюсы и минусы, которые будут обсуждаться в докладе на примерах PostgreSQL/MySQL/MariaDB etc.
Основные вопросы:
* конечно, производительность тех или иных решений и подходов - чего необходимо избегать, а чего бояться не стоит (бенчмарки для разных конфигураций и видов нагрузки);
* способы безболезненного переноса данных в такой формат.
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
В дата-центрах нашей компании несколько тысяч серверов, и примерно на половине из них нужно выкладывать PHP-код 2 раза в день. Помимо раскладки на production также не стоит забывать о том, что код нужен на стейджинге, и в стейджинг-кластер у нас входит около 50 машин, код на которых обновляется раз в несколько минут. Также есть «хотфиксы» — небольшие (1-5) наборы файлов, которые выкладываются во внеочередном порядке на все или на выделенную часть серверов, чтобы устранить существующие проблемы на продакшне, не дожидаясь полной выкладки.
В этом докладе я расскажу о том, как мы деплоились в течение 10 лет, о том, какую новую систему для деплоя PHP-кода мы разработали и внедрили в production, а также проведу обзор решений для масштабного деплоя кода на PHP и анализ их производительности.
План доклада:
— Наша старая система деплоя, достоинства и недостатки.
— Существующие решения:
* "svn up" / "git pull".
* rsync.
* phar, hhbc (HHVM-specific), "loop".
* rsync + 2 директории + realpath_root (Rasmus-style).
— Требования для новой системы деплоя.
* быстрый деплой на стейджинг (5-10 секунд на 50 серверов).
* возможность атомарно патчить несколько файлов и быстро их выкладывать (10 секунд на весь кластер).
* совместимость с docker.
* поддержка «долгоиграющих» CLI-скриптов (несколько часов).
* низкое потребление ресурсов на принимающей стороне.
* отсутствие необходимости сбрасывать opcache.
* высокая скорость деплоя на продакшн (1-2 минуты на 1500 серверов).
— MDK — multiversion deployment kit.
— Анализ применимости и производительности способов деплоя.
— Выводы.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 10:00
Тезисы:
http://backendconf.ru/2017/abstracts/2773.html
В этом докладе я рассмотрю несколько перспективных, на мой взгляд, баз данных, которые пока еще не очень популярны, но которые определенно ждет успех в будущем, особенно для highload-проектов. Я расскажу о Tarantool, ClickHouse и CockroachDB, о том, как они устроены, и почему я считаю, что они в будущем станут стандартом де-факто, как раньше был MySQL, а сейчас — MongoDB.
...
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
Многие из вас, наверное, видели результаты тестов сравнения Tarantool с остальными СУБД, которые показывают, что Tarantool быстрее всех, оптимальней по памяти, обрабатывает наибольшее количество транзакций в секунду.
И, несмотря на то, что исходные коды всех тестов полностью открыты и хорошо откомментированы, позволяя всем желающим повторить тесты, все равно остаются вопросы - за счет чего Tarantool такой быстрый и оптимальный?
Я решил суммировать мои ответы на эти вопросы в докладе на Highload++.
Итак, почему Tarantool такой быстрый?
Краткий ответ: потому что он с самого начала разрабатывался и до сих пор разрабатывается во главе угла с производительностью/оптимальностью/минимальным потреблением всех ресурсов системы.
Более полный ответ я раскрою в своем выступлении. Приходите, будет интересно! :)
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
ClickHouse - высокопроизводительная база данных для больших данных и аналитики.
На ClickHouse основана Яндекс.Метрика - крупнейшая система веб-аналитики в России.
Ради чего мы написали свою базу данных? Ради скорости! ClickHouse работает невероятно быстро, быстрее всех известных нам конкурентов, и при этом может обрабатывать запросы по петабайтам данных.
Я расскажу про:
- Краткую историю создания проекта;
- Основные преимущества и особенности ClickHouse;
- Архитектура проекта; подход к хранению данных, отказоустойчивости, исполнению запросов;
- Как работает внутри, почему ClickHouse такой быстрый;
- Текущие кейсы использования в Метрике и других проектах Яндекса;
- Профит, который вы можете получить от ClickHouse.
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
Некоторое время назад, когда в очередной раз встал вопрос о производительности большого парка mysql sharding серверов, мы не захотели покупать новые сервера и производить resharding. Мы обнаружили, что компания facebook выпустила в opensource большое количество своих разработок, в том числе и модуль ядра flashcache.
Flashcache — модуль для кэширования блоков блочного устройства, предоставляющий 4 разных режима кэширования.
В данном докладе я расскажу, как мы тестировали, поэтапно проверяя под нагрузкой, 3 из 4 режимов кэширования, сравнивая и выбирая оптимальный. Итогом данной работы стало внедрение данного модуля в нашу архитектуру (фотосервера, сервера БД).
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 6 июня, 15:00
Тезисы:
http://backendconf.ru/2017/abstracts/2710.html
В данном докладе я дам обзор системных интерфейсов, которые предоставляет Linux для эффективной обработки запросов. В частности, речь пойдет о мультиплексировании ввода-вывода, отправке файлов и многопоточной обработке входящих соединений. Расскажу о нюансах и недостатках в сравнении с аналогичными интерфейсами других unix-подобных операционных систем. Личный опыт показывает, что продуманность и качество реализации интерфейса для прикладных программ — это, к сожалению, довольно слабая сторона ядра Linux.
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
Тезисы:
За последние 2 года экосистема tarantool пополнилась огромным количеством батареек: дисковое хранение, lua-шардинг, работа со схемами данных и версиями, nginx upstream модуль. Используя эти компоненты, можно создавать высокопроизводительные приложения без использования дополнительных технологий.
В докладе будет описан опыт использования Tarantool для разработки performance-critical restful api: расскажу в чем плюсы и минусы текущей реализации lua-шардинга, как создать restful api прямо в базе данных и почему это быстрее многих популярных решений на примере реальных данных. Кроме того, будет рассмотрен подход использования avro схем для валидации, версионирования и хранения json документов в Tarantool. Для наглядности во время доклада будет разработан микросервис и проведено нагрузочное тестирование.
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...Ontico
HighLoad++ 2017
Зал «Дели + Калькутта», 8 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/2844.html
Технический прогресс позволил нам снимать Full HD или даже 4К-видео на телефон, загружать их и делиться с друзьями в Одноклассниках или же вести прямые трансляции на весь мир. Для нас это означает необходимость хранить десятки петабайт данных и обеспечивать к ним доступ со скоростью сотни Гб/с, а это в свою очередь требует инфраструктуры, состоящей из многих тысяч дисков и сотен серверов.
...
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
Раздатчик музыки непосредственно занимается отдачей байтов аудиопотока многочисленным пользователям https://ok.ru/music. В пике суммарный трафик достигает 100 Гб/с через сотни тысяч соединений, а время до первого байта составляет не больше 100 мс. Предыдущая версия раздатчика на основе файлов и Apache Tomcat не устраивала нас требуемым количеством оборудования и неспособностью утилизировать современное железо. При разработке новой версии мы поставили перед собой цель сохранить внешнюю функциональность сервиса неизменной, но обойтись существенно меньшим количеством машин, сохранив при этом масштабируемость и отказоустойчивость сервиса.
В докладе мы рассмотрим, как различные архитектурные решения помогли нам обеспечить масштабируемость и отказоустойчивость сервиса за счёт распределения и репликации музыкальных треков между нодами. Затем подробно поговорим про устройство отдельной ноды, включая отказоустойчивую подсистему хранения, сетевую подсистему, а также использование подхода reactive streams. Уделим особое внимание собранным граблям и трюкам, позволившим увеличить производительность системы, упростить отладку и эксплуатацию системы.
Доклад ориентирован на разработчиков, которые хотят расширить свой арсенал подходов и инструментов для создания распределённых и/или высоконагруженных систем с интенсивным I/O.
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...Ontico
Чтобы добиться от системы максимальной производительности, необходимо учитывать структуру данных, с которыми вы работаете. Проблемы возникают, если данные очень неоднородные, и один из способов решения этих проблем - использовать возможности современных реляционных БД для хранения данных в документо-ориентированной форме.
Этот подход имеет свои плюсы и минусы, которые будут обсуждаться в докладе на примерах PostgreSQL/MySQL/MariaDB etc.
Основные вопросы:
* конечно, производительность тех или иных решений и подходов - чего необходимо избегать, а чего бояться не стоит (бенчмарки для разных конфигураций и видов нагрузки);
* способы безболезненного переноса данных в такой формат.
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
В дата-центрах нашей компании несколько тысяч серверов, и примерно на половине из них нужно выкладывать PHP-код 2 раза в день. Помимо раскладки на production также не стоит забывать о том, что код нужен на стейджинге, и в стейджинг-кластер у нас входит около 50 машин, код на которых обновляется раз в несколько минут. Также есть «хотфиксы» — небольшие (1-5) наборы файлов, которые выкладываются во внеочередном порядке на все или на выделенную часть серверов, чтобы устранить существующие проблемы на продакшне, не дожидаясь полной выкладки.
В этом докладе я расскажу о том, как мы деплоились в течение 10 лет, о том, какую новую систему для деплоя PHP-кода мы разработали и внедрили в production, а также проведу обзор решений для масштабного деплоя кода на PHP и анализ их производительности.
План доклада:
— Наша старая система деплоя, достоинства и недостатки.
— Существующие решения:
* "svn up" / "git pull".
* rsync.
* phar, hhbc (HHVM-specific), "loop".
* rsync + 2 директории + realpath_root (Rasmus-style).
— Требования для новой системы деплоя.
* быстрый деплой на стейджинг (5-10 секунд на 50 серверов).
* возможность атомарно патчить несколько файлов и быстро их выкладывать (10 секунд на весь кластер).
* совместимость с docker.
* поддержка «долгоиграющих» CLI-скриптов (несколько часов).
* низкое потребление ресурсов на принимающей стороне.
* отсутствие необходимости сбрасывать opcache.
* высокая скорость деплоя на продакшн (1-2 минуты на 1500 серверов).
— MDK — multiversion deployment kit.
— Анализ применимости и производительности способов деплоя.
— Выводы.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 10:00
Тезисы:
http://backendconf.ru/2017/abstracts/2773.html
В этом докладе я рассмотрю несколько перспективных, на мой взгляд, баз данных, которые пока еще не очень популярны, но которые определенно ждет успех в будущем, особенно для highload-проектов. Я расскажу о Tarantool, ClickHouse и CockroachDB, о том, как они устроены, и почему я считаю, что они в будущем станут стандартом де-факто, как раньше был MySQL, а сейчас — MongoDB.
...
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
Многие из вас, наверное, видели результаты тестов сравнения Tarantool с остальными СУБД, которые показывают, что Tarantool быстрее всех, оптимальней по памяти, обрабатывает наибольшее количество транзакций в секунду.
И, несмотря на то, что исходные коды всех тестов полностью открыты и хорошо откомментированы, позволяя всем желающим повторить тесты, все равно остаются вопросы - за счет чего Tarantool такой быстрый и оптимальный?
Я решил суммировать мои ответы на эти вопросы в докладе на Highload++.
Итак, почему Tarantool такой быстрый?
Краткий ответ: потому что он с самого начала разрабатывался и до сих пор разрабатывается во главе угла с производительностью/оптимальностью/минимальным потреблением всех ресурсов системы.
Более полный ответ я раскрою в своем выступлении. Приходите, будет интересно! :)
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
ClickHouse - высокопроизводительная база данных для больших данных и аналитики.
На ClickHouse основана Яндекс.Метрика - крупнейшая система веб-аналитики в России.
Ради чего мы написали свою базу данных? Ради скорости! ClickHouse работает невероятно быстро, быстрее всех известных нам конкурентов, и при этом может обрабатывать запросы по петабайтам данных.
Я расскажу про:
- Краткую историю создания проекта;
- Основные преимущества и особенности ClickHouse;
- Архитектура проекта; подход к хранению данных, отказоустойчивости, исполнению запросов;
- Как работает внутри, почему ClickHouse такой быстрый;
- Текущие кейсы использования в Метрике и других проектах Яндекса;
- Профит, который вы можете получить от ClickHouse.
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
Некоторое время назад, когда в очередной раз встал вопрос о производительности большого парка mysql sharding серверов, мы не захотели покупать новые сервера и производить resharding. Мы обнаружили, что компания facebook выпустила в opensource большое количество своих разработок, в том числе и модуль ядра flashcache.
Flashcache — модуль для кэширования блоков блочного устройства, предоставляющий 4 разных режима кэширования.
В данном докладе я расскажу, как мы тестировали, поэтапно проверяя под нагрузкой, 3 из 4 режимов кэширования, сравнивая и выбирая оптимальный. Итогом данной работы стало внедрение данного модуля в нашу архитектуру (фотосервера, сервера БД).
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 6 июня, 15:00
Тезисы:
http://backendconf.ru/2017/abstracts/2710.html
В данном докладе я дам обзор системных интерфейсов, которые предоставляет Linux для эффективной обработки запросов. В частности, речь пойдет о мультиплексировании ввода-вывода, отправке файлов и многопоточной обработке входящих соединений. Расскажу о нюансах и недостатках в сравнении с аналогичными интерфейсами других unix-подобных операционных систем. Личный опыт показывает, что продуманность и качество реализации интерфейса для прикладных программ — это, к сожалению, довольно слабая сторона ядра Linux.
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
Тезисы:
За последние 2 года экосистема tarantool пополнилась огромным количеством батареек: дисковое хранение, lua-шардинг, работа со схемами данных и версиями, nginx upstream модуль. Используя эти компоненты, можно создавать высокопроизводительные приложения без использования дополнительных технологий.
В докладе будет описан опыт использования Tarantool для разработки performance-critical restful api: расскажу в чем плюсы и минусы текущей реализации lua-шардинга, как создать restful api прямо в базе данных и почему это быстрее многих популярных решений на примере реальных данных. Кроме того, будет рассмотрен подход использования avro схем для валидации, версионирования и хранения json документов в Tarantool. Для наглядности во время доклада будет разработан микросервис и проведено нагрузочное тестирование.
Дешевле, надежнее, проще. Хранение петабайтов видео и фото в ОК / Александр Х...Ontico
HighLoad++ 2017
Зал «Дели + Калькутта», 8 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/2844.html
Технический прогресс позволил нам снимать Full HD или даже 4К-видео на телефон, загружать их и делиться с друзьями в Одноклассниках или же вести прямые трансляции на весь мир. Для нас это означает необходимость хранить десятки петабайт данных и обеспечивать к ним доступ со скоростью сотни Гб/с, а это в свою очередь требует инфраструктуры, состоящей из многих тысяч дисков и сотен серверов.
...
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
«Одноклассники» состоят из тысяч серверов, большая часть которых участвует в онлайн-обработке запросов пользователей. Каждый из этих серверов владеет только частью данных или логики. Эти части в социальной сети изолировать друг от друга невозможно, поэтому между серверами происходит много сетевого взаимодействия — разнообразного и большого по объему. Таким образом, Одноклассники — это одна из самых больших, сложных и нагруженных распределенных систем в мире.
В этом докладе Олег расскажет об опыте построения отказоустойчивых распределенных систем на Java, основных ошибках и отказах, приемах их тестирования и диагностики. Также речь пойдет об авариях в распределенных системах и методах их предупреждения.
3. Введение Материалы
Материалы
Doug Beaver, Sanjeev Kumar, Harry C. Li, Jason
Sobel, Peter Vajgel, Facebook Inc. Finding a needle
in Haystack: Facebook’s photo storage. 2010
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 3 / 46
4. Введение Мотивация
Мотивация
Зачем мы это рассматриваем:
Промышленная внедрённая технология
Логика проектирования
Интересные проектные решения
Просто интересно, как делают взрослые дядьки
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 4 / 46
5. Введение Цифры
Цифры
На 2010 год:
65 млрд. оригинальных фоток
4х размера = 260 млрд. фоток = 20 ПБ
+1 млрд. фоток (60 ТБ) каждую неделю
1 Mrps в пике
В проде 2 года
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 5 / 46
6. Введение Характер запросов
Характер запросов
Пишем — один раз
Читаем — часто
Никогда не перезаписываем
Удаляем — редко
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 6 / 46
7. Введение Основные цели
Основные цели
High throughput and low latency
UGC, CDN, User Experience
1 поиск по диску максимум
Микрометаданные в памяти
Fault-tolerant
UGC
Георепликация
Cost-effective
$ / TB, read rps / TB
$ / TB — на 28% меньше, read rps / TB — в 4
раза больше vs NAS
Simple
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 7 / 46
9. Background Типичная архитектура
CDN
Клиент получает URL от Web Server
Идёт с URL’ом в CDN
Если у CDN есть данные, то отдаёт
Если нет, то идёт в Photo Storage и кэширует
URL содержит необходимую CDN информацию
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 9 / 46
10. Background NFS
Главный урок
CDN не подходит для социальных фотосервисов
Эффективно раздаёт «горячие» фотки (профили
и свежие)
Длинный хвост (непопулярные и/или старые)
Длинный хвост невозможно кэшировать
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 10 / 46
12. Background NFS
Хранение фоток
Каждая фотка в отдельном файле на
коммерческом NAS
Photo Store монтирует все разделы через NFS
Photo Store из URL вынимает путь, читает файл
по NFS и отдаёт CDN
Проблемы
Тысячи файлов в каждом каталоге
Больше 10 дисковых операций на одну фотку
Сотни файлов в каждом каталоге
Больше 3 дисковых операций на одну фотку
(метаданные каталога, inode, содержимое файла)
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 12 / 46
13. Background NFS
Оптимизации
Кэш из имени файла в файловый дескриптор
Пропатчили ядро — системный вызов
open_by_filehandle
Не сильно помогло на длинном хосте
Вывод
Кэш не всегда спасает
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 13 / 46
14. Background NFS
Альтернативы
Из используемого в Facebook:
Аналог GFS
MySQL
Hadoop
ФС (inode — сотни байт на файл)
Вывод
Всё не очень подходит для длинного хвоста
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 14 / 46
15. Архитектура Новая версия
Новая версия
CDN для популярных фоток (пока что)
Haystack для длинного хвоста
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 15 / 46
16. Архитектура Задача
Задача
Уменьшить нагрузку на диск
Только необходимые операции
Уменьшить расход памяти на метаданные
Держать все метаданные в памяти
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 16 / 46
18. Архитектура Компоненты
Компоненты
Store
Physical volume (на каждой машине 100 х 100 ГБ =
10 ТБ)
Logical volume = Replica Set
Directory
Logical volume → Physical volume
Фотка → Logical volume
Logical volumes with free space
Cache
Прикрывает Store
Защищает при перезапуске CDN
Уменьшает зависимость от CDN
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 18 / 46
20. Архитектура Компоненты
URL
CDN URL
http://<CDN>/<Cache>/<Store>/<LV, Photo>
Браузер идёт на <CDN>
CDN ищет у себя, используя <LV, Photo>
Если не нашёл, отрезает <CDN> и идёт в <Cache>
Cache ищет у себя, используя <LV, Photo>
Если не нашёл, отрезает <CDN> и идёт в <Store>
Direct URL
http://<Cache>/<Store>/<LV, Photo>
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 20 / 46
22. Архитектура Directory
Функции Directory
Отображение из логических томов в физические
При добавлении фоток
При конструировании URL’ов фоток
Балансирует нагрузку
Запись по логическим томам
Чтение по физическим томам
Определяет, кто будет отдавать: CDN или Cache
Помечает логические тома как read-only
Эксплуатационные причины
Нет свободного места
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 22 / 46
23. Архитектура Directory
Write-enabling
Новые Store доступны на запись
Только на такие машины добавляются фотки
Когда место на машине кончается — помечается
как read-only
Внимание!
Это влечёт определённые последствия.
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 23 / 46
24. Архитектура Directory
Устройство Directory
Хранит данные в реплицированной БД
Простой сервис на PHP
Использует memcached
Если теряем Store, то удаляем соответствующее
отображение и добавляем после замены машины
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 24 / 46
25. Архитектура Cache
Функции Cache
Получает HTTP-запросы от CDN и браузеров
DHT: ключ — id фотки
Если нет в кэше, то идёт на Store
Кэширует фотку только при выполнении двух
условий:
Запрос пришёл от пользователя, а не от CDN
CDN сам закэширует
Фотка загружена с write-enabled Store
Свежие фотки более популярны — прикрываем
write-enabled Store
ФС на Store лучше работает, когда либо чтение, либо
запись, но не смесь
Планируется push свежих фоток в Cache
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 25 / 46
26. Архитектура Store
Функции Store
Простой интерфейс — get, add, delete по <LV,
Photo>
На каждом Store множество PV
Каждый PV содержит миллионы фоток
PV — большой файл (100 ГБ)
/hay/haystack_<LV_id>
Получение имени файла, смещения и размера для
фотки не требует дисковых операций
Открытые файловые дескрипторы для каждого
PV
Отображение в памяти из id фотки в метаданные
(файл, смещение и размер)
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 26 / 46
32. Детали реализации Запросы
Read
Cache передаёт с запросом: LV_id, key,
alternate_key, cookie
cookie генерируется и сохраняется в Directory при
загрузке фотки
cookie защищает от атак с подбором URL’ов
Store извлекает метаданные
Если фотка не удалена, то читает needle с диска
Проверяет cookie и checksum
Возвращает фотку Cache
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 32 / 46
33. Детали реализации Запросы
Write
Web server передаёт с запросом: LV_id, key,
alternate_key, cookie и данные
Каждый Store синхронно дописывает фотку в
PV и обновляет индекс
Модификация фотки:
Либо в тот же LV с теми же key и alternate_key:
для Store больший offset — свежее версия
Либо в другой LV: Directory обновляет метаданные и
больше не читает старую фотку
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 33 / 46
34. Детали реализации Запросы
Delete
Store выставляет флаг в памяти и синхронно на
диске
Запросы на чтение всегда проверяют флаг
Фотка физически не удаляется
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 34 / 46
35. Детали реализации Index
Функции Index
Оптимизация при перезагрузке Store
Индекс для каждого тома
Индекс содержит superblock и индексные записи
Порядок индексных записей соответствует тому
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 35 / 46
37. Детали реализации Index
Обновление
Write:
Синхронное дописывание needle в том
Асинхронное — в индекс
Delete:
Синхронно выставляется флаг в томе
Индекс не обновляется
Работает быстрее
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 37 / 46
38. Детали реализации Index
Проблемы
Needle есть, а индексной записи нет (orphan)
«Лечится» при перезапуске
Последняя запись в индексе — последний
non-orphan needle
Индексные записи не отражают факт удаления
При чтении всегда проверяется флаг deleted
Обновляется индекс в памяти
Cache уведомляется, что фотка удалена
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 38 / 46
39. Детали реализации Оптимизации
Compaction
Выбрасывание удалённых и дублирующихся
needles
Копирование в новый файл с пропуском мусора
В это время удаления идут в оба файла
Дошли до конца — блокируем исходный файл на
изменение и атомарно переключаемся
Интересное наблюдение
Свежие фотки удаляются чаще
25% фоток/год
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 39 / 46
40. Детали реализации Оптимизации
Оперативная память
20% экономии:
Вместо флагов у удалённых фоток offset равен 0
cookie не хранятся в памяти, а проверяются
каждый раз после чтения needle
В итоге
10 байт на фотку (в среднем) vs 536 байт на
xfs_inode_t
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 40 / 46
41. Детали реализации Оптимизации
Batch
Диски любят последовательную запись
Загрузка альбомов — основной случай
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 41 / 46
42. Заключение Нагрузка
Нагрузка
98% чтений — лента новостей и альбомы
Возраст 2 дня — резкий спад числа обращений
CDN и Cache довольно эффективны, но длинный
хвост
80% — Cache hit rate
Haystack отвечает на 10% нагрузки CDN
Загрузка каждой фотки — 12 needles (4 размера х
3 реплики)
См. стресс тесты в оригинальной статье1
1
Doug Beaver, Sanjeev Kumar, Harry C. Li, Jason Sobel, Peter Vajgel,
Facebook Inc. Finding a needle in Haystack: Facebook’s photo storage. 2010
Цесько В. А. (Технополис) Haystack 24 мая 2017 г. 42 / 46