SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Ускоряем и разгружаем 
веб-сервер, прозрачно 
кэшируя на SSD 
Слава Николов, 
UCDN.com
O компании UCDN.com 
• UCDN.com входит в состав холдинга XBT 
(Webzilla) 
• 4 года успешной работы 
• 12 точек присутствия в мире 
• сотни Gbps трафика 
• более 7 млрд хитов в день
Немного обо мне 
• технический директор и сооснователь компании 
UCDN 
• сооснователь большого видео проекта (10ки Gbps 
в 2007 году) 
• опыт работы в хостинговых компаниях 
• первый сайт за который мне заплатили сделан в 
1997 году
О чем будем говорить 
• Кэширование - основные принципы 
• Какие алгоритмы применимы для файлового кэширования 
• Как работает Nginx как reverse proxy и наша модификация 
• Результаты тестов и практического использования 
• Возможные другие подходы решения той же задачи 
• Секретные планы на развитие модуля 
• Вопросы ?
Только наш опыт, он не абсолютная истина
Кэширование - что это такое 
“Кэш или кеш (англ. cache, от фр. cacher — «прятать»; произносится 
[kæʃ] — «кэш») 
— промежуточный буфер с быстрым доступом, содержащий 
информацию, которая может быть запрошена с наибольшей 
вероятностью. 
Доступ к данным в кэше осуществляется быстрее, чем выборка 
исходных данных из более медленной памяти или удаленного 
источника, однако её объём существенно ограничен по сравнению с 
хранилищем исходных данных…” 
из Википедии
Кэширование - что это такое 
• Просто буфер + алгоритм записи и выбрасывания из него 
• Оно практически везде: 
• CPU L1, L2, L3 cache 
• HDD buffer 
• RAID controller cache 
• FS inode cache 
• Virtual memory 
• Разные алгоритмы и структуры для разных приложений 
• Основы одни и те же и не менялись уже 50 лет
Как работают кэши 
• Принцип локальности 
– близость по времени (temporal locality) 
• как часто запрашиваются объекты 
• Пример: Тумбы на индексной странице сайта запрашиваются чаще, 
чем картинки внутри 
– близость по месту (spacial locality) 
• как близко разположнены объекты 
• Пример: Блоки на HDD при sequential write и низкой фрагментации 
• Реально для файлов более важны 
– frequency (как часто запрашиваем) 
– recency (как давно был последний запрос)
Основные метрики 
• cache hit ratio (1 - cache miss) 
– как часто удается взять что-то из кэша 
• latency 
– как быстро находим и начинаем отдавать что-то из кэша 
• replacement/eviction strategy 
– каким образом заменяем элементы в кэше 
• cache write policy 
– write back 
– write trough 
• cache volatility 
– какой % кэшей меняется за единицу времени
File requests probability distribution 
• По-моему переводится как “Распределение вероятностей запроса 
файлов” 
• Почему важно ? 
– надо подобрать правильную структуру данных и алгорим 
выбрасывания 
– от этого зависит hit ratio 
• Для популярных файлов обычно 
– Парето (топ 20% файлов генерируют 80% хитов) 
– Ziph (Ципф)
Пример реального распределения 
• Ziph distribution 
• несколько миллионов 
хитов 
• log координатные оси 
• не очень удобно для 
объяснения
Ziph распределение log/linear
Ziph распределение log/linear 
• A - мин. размер 
кэшей 
• B - макс. разумный 
размер кэшей 
• C - размер long tail
Как выглядит хорошо кэшируемый контент 
• A - максимально 
длинное 
• B - макс крутое 
• C - минимальной 
длины
А что практически дает график ? 
• A = min. размер кэша 
– если размер < A = volatility 
• B = оптимальный размер кэша 
– если размер < B немного 
выше volatility 
– если размер > B = ниже 
volatility, но и hit ratio 
будет ниже
Цена хорошего hit ratio 
• Для примера берем Парето распределение 
– топ 20% файлов генерируют 80% хитов 
• Все файлы в сумме занимают 1000 Gb 
• 80% hit ratio = top 20% файлов = 200 Gb 
• 95% hit ratio = ….? файлов = ? Gb 
– в принципе 1000-2000Gb (в зависимости от наклона zipf р.) 
• Т.е. 15% могут увеличить в 10 раз объемы кэшей
Цена хорошего hit ratio 
Source: 
Facebook
Ну и что же кэшируемо ? 
• Кэшируемо 
– достаточно выраженный топ 
– сумма топ файлов умещается в кэше 
• Не очень кэшируемо 
– большой и длинный long tail
Как понять насколько что-то кэшируемо 
• смотрим логи и парсим 
– access логи с агрегацией по кол-ву хитов за длинный 
промежуток времени 
– можно самому написать или попользоватся чем-то готовым 
• смотрим application layer 
– в зависимости от логики приложения могут быть явные топ 
файлы 
– для веб сайтов тип трафика тоже показателен 
• делаем эксперименты и смотрим как меняется hit ratio
Немного об алгоритмах кэширования 
• Для каждой области применения они разные 
• Основные параметры 
– frequency 
– recency 
• Для файлов самые важные алгоритмы это: 
– LRU - Least recently used - best recency 
– MRU - Most recently used - best frequency 
– Динамически балансируемые (ARC,CAR) 
• Один из самых популярных - LRU
LRU - пример работы 
• список с фикс. длиной 
• сортированный по самым “свежим” 
файлам 
• при запросе файла A, он 
перемещается в начало списка 
• новый файл R выталкивает самый 
старый (давно никто не запрашивал) 
из списка
Что мы сделали 
• Сервер с SATA дисками и SSD диском(и) 
• Веб-сервер, работающий в режиме прокси (у нас в основном такие) 
• Nginx proxy cache модуль 
• SSD cache модуль, который прозрачно оптимизует proxy cache 
– самые популярные файлы копируются прозрачно для веб-сервера на SSD 
– стандартный модуль продолжает работать в точности так же как раньше 
– их рейтинг постянно вычисляется и не достаточно популярные 
убираются из SSD 
– поддерживаются все invalidation events 
– SATA диск в основном пишет и читает только при cache miss на SSD 
– т.е. уменьшаем кол-во IOPSов на чтение из SATA
Как работает NGINX proxy cache 
• (упрощенная схема, структуры немного 
сложнее) 
• принимаем request 
• virtual host mapping 
• rewrite functions & filters 
• proxy cache handler 
– ищем в дереве где файл 
– смотрим по указателю где он в списке (LRU) 
– перемещаем его в начало списка 
– fopen() 
• hook к нашему SSD proxy module 
Где 
файл 
? 
LRU 
Популярен 
?
Что делает SSD cache модуль 
• Hook в fopen() получает все контекстные переменные и filepath 
• Так же он знает filepath 
• Обновляет подобные структуры (тоже дерево + LRU) в котором сохраняется 
инфа по файлам 
• Проверяет есть ли файл на SSD диске 
• Есть на диске ? Меняет filepath на тот, который на SSD 
• Нет на диске ? Проверяет должен ли быть ? (по ранжировке LRU + 
модификации) 
• должен: то включает в список на копирование, отдает оригинальный 
filepath 
• нет: собирает инфу по файлу в ранжировке (хит) , отдает оригинальный 
filepath
Что делает SSD cache модуль (2) 
• Выбрасывает ненужные файлы периодично, когда: 
– заканчивается место в структурах памяти (failsafe механизм) 
– популярность файла слишком низкая 
• Копирует популярные файлы с SATA на SSD 
• Возможен throttling копирования, чтобы не перегружать SATA 
• Убирает с SSD диска все файлы, которые proxy cache убрал (cache 
expiration, purge)
Что мы поменяли в Nginx 
В файле ngx_http_file_cache.c: 
• Проверяем есть ли файл на SSD диске и меняем filepath, когда 
необходимо: 
ngx_int_t ngx_http_file_cache_open(ngx_http_request_t *r)! 
• Когда файл удален , мы удаляем и из SSD диска. То же самое и в 
случае удаления по Cache headers 
void ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf) ! 
void ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf) ! 
static time_t ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache)! 
static time_t ngx_http_file_cache_expire(ngx_http_file_cache_t *cache)
Возможности конфигурации SSD cache модуля 
• можно задавать размер LRU списков 
• модуль может прозрачно кэшировать файлы не более Х Мб 
(полезно когда тумбы в перемешку с большими файлами) 
• ограничение макс. кол-ва файлов, которые будут закешированы на 
SSD (полезно, когда нужно держать Х% свободными на SSD) 
• минимальное кол-во хитов для попадания на SSD (min_uses) 
• алгоритм ранжировки (простейший LRU, но есть еще куча других 
интересных, которые можно настроить под свои задачи и 
эффективность возрастет)
Результаты тестов 
• Тестовый сетап (один из множества) 
– 4 Gb SSD limit 
– 40 Gb library size on SATA RAID5 6 x 4500 2Тб 
– 4 Mb objects 
– ziph file distribution 
• Методология: 
– 32000 запросов 
– разное concurrency запросов 
– меряем req/s, mean latency, time to execute
Результаты тестов (2) 
Модуль Кол-во 
запросов 
Time to 
execute[s] 
req/s latency 
mean[ms] 
Concurrency Speedup[%] 
SSD 32000 337 94.96 10.53 64 
Proxy cache 32000 451 70.95 14.09 64 33.82 
SSD 32000 343 93.29 10.72 128 
Proxy cache 32000 505 63.37 15.78 128 47.23 
SSD 32000 339 94.40 10.59 256 
Proxy cache 32000 491 65.17 15.34 256 44.83
Результаты тестов (3) 
305$ 
Concurrency)32) 
SSD$cache$ proxy$cache$ 
104.92$ 
9.53$ 
388$ 
82.47$ 
12.13$ 
Time$to$execute[s]$ req/s$ latency$mean[ms]$
Результаты тестов (4) 
339# 
Concurrency)256) 
SSD#cache# proxy#cache# 
94.40# 
10.59# 
491# 
65.17# 
15.34# 
Time#to#execute[s]# req/s# latency#mean[ms]#
Production grade test-ы 
• паралельно запускаем 2 сервера с/без модуля в роли reverse proxy 
• трафик одинаков 50%/50% 
• сервера работают 3 дня (от cold cache) 
• тип сервера: 
– тип 1(6 SSD + 6 SATA) и тип2(12 SATA) 
– 128 Gb RAM 
– 10 Gb nic 
• тест более практический, т.е. “есть ли смысл ставить такое”, а не 
“сколько теоретически может дать”
Production grade test-ы (2) 
• Видим, что SSD работают с около 70% ниже load average 
• Latency от 20-60% в среднем лучше у SSD прокси 
• Отдают от 60 до 200% больше трафика в пики (когда не 
пошейпены) 
• Т.к. мы не контролируем тип распределения, то и результаты не 
поддаются легкому объяснению (как в случае с синтетикой) 
• “Так SSD всегда будут быстрее работать, зачем мудрили ?” 
(вопрос знакомого, когда показали ему) 
• Так как на SSD все не залезет и надо только популярное автоматом, 
не меняя application layer.
Конечно, это не решает все проблемы 
• Если контент не кешируемый, то модуль не поможет 
• Если топ файлы в разы больше SSD 
• Если файлы размером в 4 Тб каждый, то promotion и demotion будут 
очень медленными
Возможные другие подходы 
• Ставим на 1 сервер веб-сервер + прокси + прокси 
– первое кеширует на SATA 
– второе прокси кеширует на SSD 
• Block level OS cache (dm device)
Возможные пути развития 
• Лучше алгоритм выбрасывания 
• Plug-in архитектура для cache policy 
• Работа только как прокси модуль в самом веб-сервере, без uplink 
логики 
• Native purge 
• Open source ?
Спасибо! Вопросы ? 
slava@ucdn.com

Contenu connexe

Tendances

Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, BadooOntico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахOntico
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...Ontico
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Ontico
 

Tendances (20)

Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Юрий Насретдинов, Badoo
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 

Similaire à Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов (UCDN.com)

ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchИлья Середа
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераDaniel Podolsky
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, PerconaOntico
 
Isilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSDIsilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSDAndrew Pantyukhin
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...it-people
 
Frontera обход испанского интернета
Frontera обход испанского интернетаFrontera обход испанского интернета
Frontera обход испанского интернетаAlexander Sibiryakov
 
02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFS02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFSRoman Brovko
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Mad Devs
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Колёса Крыша Маркет
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратораNikolay Sivko
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Andrew Minkin
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Mad Devs
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 

Similaire à Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов (UCDN.com) (20)

ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearch
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 
Isilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSDIsilapp — Extreme Cloud Storage on FreeBSD
Isilapp — Extreme Cloud Storage on FreeBSD
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
 
Frontera обход испанского интернета
Frontera обход испанского интернетаFrontera обход испанского интернета
Frontera обход испанского интернета
 
02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFS02 - Hadoop. Архитектура HDFS
02 - Hadoop. Архитектура HDFS
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратора
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 

Plus de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Plus de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов (UCDN.com)

  • 1. Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD Слава Николов, UCDN.com
  • 2. O компании UCDN.com • UCDN.com входит в состав холдинга XBT (Webzilla) • 4 года успешной работы • 12 точек присутствия в мире • сотни Gbps трафика • более 7 млрд хитов в день
  • 3. Немного обо мне • технический директор и сооснователь компании UCDN • сооснователь большого видео проекта (10ки Gbps в 2007 году) • опыт работы в хостинговых компаниях • первый сайт за который мне заплатили сделан в 1997 году
  • 4. О чем будем говорить • Кэширование - основные принципы • Какие алгоритмы применимы для файлового кэширования • Как работает Nginx как reverse proxy и наша модификация • Результаты тестов и практического использования • Возможные другие подходы решения той же задачи • Секретные планы на развитие модуля • Вопросы ?
  • 5. Только наш опыт, он не абсолютная истина
  • 6. Кэширование - что это такое “Кэш или кеш (англ. cache, от фр. cacher — «прятать»; произносится [kæʃ] — «кэш») — промежуточный буфер с быстрым доступом, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше осуществляется быстрее, чем выборка исходных данных из более медленной памяти или удаленного источника, однако её объём существенно ограничен по сравнению с хранилищем исходных данных…” из Википедии
  • 7. Кэширование - что это такое • Просто буфер + алгоритм записи и выбрасывания из него • Оно практически везде: • CPU L1, L2, L3 cache • HDD buffer • RAID controller cache • FS inode cache • Virtual memory • Разные алгоритмы и структуры для разных приложений • Основы одни и те же и не менялись уже 50 лет
  • 8. Как работают кэши • Принцип локальности – близость по времени (temporal locality) • как часто запрашиваются объекты • Пример: Тумбы на индексной странице сайта запрашиваются чаще, чем картинки внутри – близость по месту (spacial locality) • как близко разположнены объекты • Пример: Блоки на HDD при sequential write и низкой фрагментации • Реально для файлов более важны – frequency (как часто запрашиваем) – recency (как давно был последний запрос)
  • 9. Основные метрики • cache hit ratio (1 - cache miss) – как часто удается взять что-то из кэша • latency – как быстро находим и начинаем отдавать что-то из кэша • replacement/eviction strategy – каким образом заменяем элементы в кэше • cache write policy – write back – write trough • cache volatility – какой % кэшей меняется за единицу времени
  • 10. File requests probability distribution • По-моему переводится как “Распределение вероятностей запроса файлов” • Почему важно ? – надо подобрать правильную структуру данных и алгорим выбрасывания – от этого зависит hit ratio • Для популярных файлов обычно – Парето (топ 20% файлов генерируют 80% хитов) – Ziph (Ципф)
  • 11. Пример реального распределения • Ziph distribution • несколько миллионов хитов • log координатные оси • не очень удобно для объяснения
  • 13. Ziph распределение log/linear • A - мин. размер кэшей • B - макс. разумный размер кэшей • C - размер long tail
  • 14. Как выглядит хорошо кэшируемый контент • A - максимально длинное • B - макс крутое • C - минимальной длины
  • 15. А что практически дает график ? • A = min. размер кэша – если размер < A = volatility • B = оптимальный размер кэша – если размер < B немного выше volatility – если размер > B = ниже volatility, но и hit ratio будет ниже
  • 16. Цена хорошего hit ratio • Для примера берем Парето распределение – топ 20% файлов генерируют 80% хитов • Все файлы в сумме занимают 1000 Gb • 80% hit ratio = top 20% файлов = 200 Gb • 95% hit ratio = ….? файлов = ? Gb – в принципе 1000-2000Gb (в зависимости от наклона zipf р.) • Т.е. 15% могут увеличить в 10 раз объемы кэшей
  • 17. Цена хорошего hit ratio Source: Facebook
  • 18. Ну и что же кэшируемо ? • Кэшируемо – достаточно выраженный топ – сумма топ файлов умещается в кэше • Не очень кэшируемо – большой и длинный long tail
  • 19. Как понять насколько что-то кэшируемо • смотрим логи и парсим – access логи с агрегацией по кол-ву хитов за длинный промежуток времени – можно самому написать или попользоватся чем-то готовым • смотрим application layer – в зависимости от логики приложения могут быть явные топ файлы – для веб сайтов тип трафика тоже показателен • делаем эксперименты и смотрим как меняется hit ratio
  • 20. Немного об алгоритмах кэширования • Для каждой области применения они разные • Основные параметры – frequency – recency • Для файлов самые важные алгоритмы это: – LRU - Least recently used - best recency – MRU - Most recently used - best frequency – Динамически балансируемые (ARC,CAR) • Один из самых популярных - LRU
  • 21. LRU - пример работы • список с фикс. длиной • сортированный по самым “свежим” файлам • при запросе файла A, он перемещается в начало списка • новый файл R выталкивает самый старый (давно никто не запрашивал) из списка
  • 22. Что мы сделали • Сервер с SATA дисками и SSD диском(и) • Веб-сервер, работающий в режиме прокси (у нас в основном такие) • Nginx proxy cache модуль • SSD cache модуль, который прозрачно оптимизует proxy cache – самые популярные файлы копируются прозрачно для веб-сервера на SSD – стандартный модуль продолжает работать в точности так же как раньше – их рейтинг постянно вычисляется и не достаточно популярные убираются из SSD – поддерживаются все invalidation events – SATA диск в основном пишет и читает только при cache miss на SSD – т.е. уменьшаем кол-во IOPSов на чтение из SATA
  • 23. Как работает NGINX proxy cache • (упрощенная схема, структуры немного сложнее) • принимаем request • virtual host mapping • rewrite functions & filters • proxy cache handler – ищем в дереве где файл – смотрим по указателю где он в списке (LRU) – перемещаем его в начало списка – fopen() • hook к нашему SSD proxy module Где файл ? LRU Популярен ?
  • 24. Что делает SSD cache модуль • Hook в fopen() получает все контекстные переменные и filepath • Так же он знает filepath • Обновляет подобные структуры (тоже дерево + LRU) в котором сохраняется инфа по файлам • Проверяет есть ли файл на SSD диске • Есть на диске ? Меняет filepath на тот, который на SSD • Нет на диске ? Проверяет должен ли быть ? (по ранжировке LRU + модификации) • должен: то включает в список на копирование, отдает оригинальный filepath • нет: собирает инфу по файлу в ранжировке (хит) , отдает оригинальный filepath
  • 25. Что делает SSD cache модуль (2) • Выбрасывает ненужные файлы периодично, когда: – заканчивается место в структурах памяти (failsafe механизм) – популярность файла слишком низкая • Копирует популярные файлы с SATA на SSD • Возможен throttling копирования, чтобы не перегружать SATA • Убирает с SSD диска все файлы, которые proxy cache убрал (cache expiration, purge)
  • 26. Что мы поменяли в Nginx В файле ngx_http_file_cache.c: • Проверяем есть ли файл на SSD диске и меняем filepath, когда необходимо: ngx_int_t ngx_http_file_cache_open(ngx_http_request_t *r)! • Когда файл удален , мы удаляем и из SSD диска. То же самое и в случае удаления по Cache headers void ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf) ! void ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf) ! static time_t ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache)! static time_t ngx_http_file_cache_expire(ngx_http_file_cache_t *cache)
  • 27. Возможности конфигурации SSD cache модуля • можно задавать размер LRU списков • модуль может прозрачно кэшировать файлы не более Х Мб (полезно когда тумбы в перемешку с большими файлами) • ограничение макс. кол-ва файлов, которые будут закешированы на SSD (полезно, когда нужно держать Х% свободными на SSD) • минимальное кол-во хитов для попадания на SSD (min_uses) • алгоритм ранжировки (простейший LRU, но есть еще куча других интересных, которые можно настроить под свои задачи и эффективность возрастет)
  • 28. Результаты тестов • Тестовый сетап (один из множества) – 4 Gb SSD limit – 40 Gb library size on SATA RAID5 6 x 4500 2Тб – 4 Mb objects – ziph file distribution • Методология: – 32000 запросов – разное concurrency запросов – меряем req/s, mean latency, time to execute
  • 29. Результаты тестов (2) Модуль Кол-во запросов Time to execute[s] req/s latency mean[ms] Concurrency Speedup[%] SSD 32000 337 94.96 10.53 64 Proxy cache 32000 451 70.95 14.09 64 33.82 SSD 32000 343 93.29 10.72 128 Proxy cache 32000 505 63.37 15.78 128 47.23 SSD 32000 339 94.40 10.59 256 Proxy cache 32000 491 65.17 15.34 256 44.83
  • 30. Результаты тестов (3) 305$ Concurrency)32) SSD$cache$ proxy$cache$ 104.92$ 9.53$ 388$ 82.47$ 12.13$ Time$to$execute[s]$ req/s$ latency$mean[ms]$
  • 31. Результаты тестов (4) 339# Concurrency)256) SSD#cache# proxy#cache# 94.40# 10.59# 491# 65.17# 15.34# Time#to#execute[s]# req/s# latency#mean[ms]#
  • 32. Production grade test-ы • паралельно запускаем 2 сервера с/без модуля в роли reverse proxy • трафик одинаков 50%/50% • сервера работают 3 дня (от cold cache) • тип сервера: – тип 1(6 SSD + 6 SATA) и тип2(12 SATA) – 128 Gb RAM – 10 Gb nic • тест более практический, т.е. “есть ли смысл ставить такое”, а не “сколько теоретически может дать”
  • 33. Production grade test-ы (2) • Видим, что SSD работают с около 70% ниже load average • Latency от 20-60% в среднем лучше у SSD прокси • Отдают от 60 до 200% больше трафика в пики (когда не пошейпены) • Т.к. мы не контролируем тип распределения, то и результаты не поддаются легкому объяснению (как в случае с синтетикой) • “Так SSD всегда будут быстрее работать, зачем мудрили ?” (вопрос знакомого, когда показали ему) • Так как на SSD все не залезет и надо только популярное автоматом, не меняя application layer.
  • 34. Конечно, это не решает все проблемы • Если контент не кешируемый, то модуль не поможет • Если топ файлы в разы больше SSD • Если файлы размером в 4 Тб каждый, то promotion и demotion будут очень медленными
  • 35. Возможные другие подходы • Ставим на 1 сервер веб-сервер + прокси + прокси – первое кеширует на SATA – второе прокси кеширует на SSD • Block level OS cache (dm device)
  • 36. Возможные пути развития • Лучше алгоритм выбрасывания • Plug-in архитектура для cache policy • Работа только как прокси модуль в самом веб-сервере, без uplink логики • Native purge • Open source ?