SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Кэширование
виджетов Yii
в Redis
Трофименко Андрей
Немного о себе...
Пять лет разработки на PHP
Участие во всех крупных веб-проектах 2GIS
Тимлид команды разработки Flamp
Быстрый
Надежный
Понятный
Паттерн MVC
Виджет — микроконтроллер внутри
контроллера
Возможность параметризации отображения
Легкое добавление / удаление
Возможность реализации бизнес-логики вне
вызывающего контроллера
widget
layout
Решения проблемы высоких
нагрузок
Решения проблемы высоких
нагрузок
Оптимизация кода
Решения проблемы высоких
нагрузок
Оптимизация кода
Оптимизация запросов к БД
Решения проблемы высоких
нагрузок
Оптимизация кода
Оптимизация запросов к БД
Масштабируемость
Решения проблемы высоких
нагрузок
Оптимизация кода
Оптимизация запросов к БД
Масштабируемость
Кеширование
Кеширование
Кеширование
Результаты запросов в БД
Кеширование
Результаты запросов в БД
Объекты
Кеширование
Результаты запросов в БД
Объекты
Сгенерированный HTML-код
«Писатели» 10%
Пользователи Флампа
«Читатели» 90%
Разный кеш для разных пользователей
«Читатели»
Простой файловый кеш Nginx
Разный кеш для разных пользователей
«Писатели»«Читатели»
Простой файловый кеш Nginx ?
Требования к системе кеширования
Эффективность
Возможность удобной инвалидации
Удобство использования
И снова виджеты!
Виджет создает ключ на основе своих
параметров в виде URI
/widget/UserProfile/id/1
На странице размещается SSI
инструкция
<!--# include virtual="/widget/UserProfile/id/1' -->
Сервер при обработке инструкции обращается к
хранилищу и, если данных нет, отправляет
запрос на адрес:
http://flamp.ru/widget/UserProfile/id/1
Результат обработки запроса попадает
в хранилище и отдается пользователю
Требования к хранилищу
Интеграция с nginx
Требования к хранилищу
Интеграция с nginx
Скорость работы
Требования к хранилищу
Интеграция с nginx
Скорость работы
Удобство использования
Требования к хранилищу
Интеграция с nginx
Скорость работы
Удобство использования
Возможность выборки ключей по шаблону
Возможность выборки ключей по
шаблону
спасибо
Возможность выборки ключей по
шаблону
/widget/UserProfile/id/1/view/top'
/widget/UserProfile/id/1/view/review'
/widget/UserProfile/id/1/view/profile'
Возможность выборки ключей по
шаблону
/widget/UserProfile/user_id/1/view/top'
/widget/UserProfile/user_id/1/view/review'
/widget/UserProfile/user_id/1/view/profile'
Выбираем ключи по маске *user_id/1*
Удаляем найденные ключи:
— то, что надо!
Прост в установке
Есть модуль для nginx
Есть расширение для PHP
Данные хранятся в памяти, но при этом сохраняются и на
диск
Возможность выборки ключей по маске
И все бы было хорошо, но....
Проблемы, проблемы...
Время выбора ключа по маске вырастает прямо
пропорционально количеству записей
Из-за возрастающей нагрузки Redis не успевает
обрабатывать коннекты, поэтому запросы скапливаются и
сайт перестает отвечать.
Избавляемся от поиска по маске
Используем помимо линейного хранения данных
именнованые неупорядоченные массивы (сеты),
содержащие ключи связанных виджетов
/widget/UserProfile/user_id/1/view/top
/widget/UserProfile/user_id/2/view/review
/widget/UserProfile/user_id/1/view/review
/widget/UserProfile/user_id/2/view/top
....
Как было:
user_1
/widget/UserProfile/user_id/1/view/top
/widget/UserProfile/user_id/1/view/review
....
user_2
/widget/UserProfile/user_id/2/view/review
/widget/UserProfile/user_id/2/view/top
....
....
Как стало
Запускаем несколько нод Redis,
используем Nutcracker
Nutcracker (Twinproxy) — прокси-балансировщик для
Redis
Репликация не нужна — каждая нода хранит свои данные.
А что дальше?
Виджеты отдельно, приложение
отдельно
Выносим отрисовщик виджетов на отдельную ноду
Profit!
a.trofimenko@flamp.ru
Трофименко Андрей
Готов ответить на вопросы!
Спасибо за внимание!

Mais conteúdo relacionado

Mais procurados

Meet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovMeet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovAmasty
 
Разумная безопасность сайта
Разумная безопасность сайтаРазумная безопасность сайта
Разумная безопасность сайтаrevisium
 
6.dev meetup2 wistia_android_y_bondarev
6.dev meetup2 wistia_android_y_bondarev6.dev meetup2 wistia_android_y_bondarev
6.dev meetup2 wistia_android_y_bondarevNata Isaevich
 
Yuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 LaunchYuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 Launchbeloslab
 
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest
 
WebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностью
WebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностьюWebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностью
WebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностьюWebCamp
 
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевMail.ru Group
 
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QAFest
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentialsPavlo Iuriichuk
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013GetDev.NET
 
Виртуальный хостинг
Виртуальный хостингВиртуальный хостинг
Виртуальный хостинг1С-Битрикс
 
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.jsTrainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.jsDevOWL Meetup
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conceptionVadim Patsev
 
Selenium. Stas Kuzminov
Selenium. Stas KuzminovSelenium. Stas Kuzminov
Selenium. Stas KuzminovADCI Solutions
 
Создание простого сайта
Создание простого сайтаСоздание простого сайта
Создание простого сайтаLena Frum
 
Как и зачем мы тестируем UI
Как и зачем мы тестируем UIКак и зачем мы тестируем UI
Как и зачем мы тестируем UIVyacheslav Lyalkin
 
Быстрая и безболезненная разработка клиентской части веб-приложений
Быстрая и безболезненная разработка клиентской части веб-приложенийБыстрая и безболезненная разработка клиентской части веб-приложений
Быстрая и безболезненная разработка клиентской части веб-приложенийYaroslav Tkachenko
 
Webpack integration
Webpack integrationWebpack integration
Webpack integrationIllia Zub
 

Mais procurados (20)

Meet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovMeet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander Kaigorodov
 
Адаптивный веб-дизайн.
Адаптивный веб-дизайн. Адаптивный веб-дизайн.
Адаптивный веб-дизайн.
 
Разумная безопасность сайта
Разумная безопасность сайтаРазумная безопасность сайта
Разумная безопасность сайта
 
6.dev meetup2 wistia_android_y_bondarev
6.dev meetup2 wistia_android_y_bondarev6.dev meetup2 wistia_android_y_bondarev
6.dev meetup2 wistia_android_y_bondarev
 
Yuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 LaunchYuri Trukhin - IE9 Launch
Yuri Trukhin - IE9 Launch
 
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
 
WebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностью
WebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностьюWebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностью
WebCamp2016:Front-End_Андрей Копёнкин_Оптимизируем мобильный веб полностью
 
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
 
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentials
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013
 
Виртуальный хостинг
Виртуальный хостингВиртуальный хостинг
Виртуальный хостинг
 
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.jsTrainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conception
 
Selenium. Stas Kuzminov
Selenium. Stas KuzminovSelenium. Stas Kuzminov
Selenium. Stas Kuzminov
 
Создание простого сайта
Создание простого сайтаСоздание простого сайта
Создание простого сайта
 
Как и зачем мы тестируем UI
Как и зачем мы тестируем UIКак и зачем мы тестируем UI
Как и зачем мы тестируем UI
 
Bootstrap3 basics
Bootstrap3 basicsBootstrap3 basics
Bootstrap3 basics
 
Быстрая и безболезненная разработка клиентской части веб-приложений
Быстрая и безболезненная разработка клиентской части веб-приложенийБыстрая и безболезненная разработка клиентской части веб-приложений
Быстрая и безболезненная разработка клиентской части веб-приложений
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
 

Semelhante a Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко

Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовАгентство AlterEGO
 
1С-Битрикс - Производительность
1С-Битрикс - Производительность1С-Битрикс - Производительность
1С-Битрикс - ПроизводительностьAlexander Demidov
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиковMedia Gorod
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Yandex
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
Деплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложенийДеплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложенийMagecom Ukraine
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
1С-Битрикс: Управление сайтом Версия .NET
1С-Битрикс: Управление сайтом Версия .NET1С-Битрикс: Управление сайтом Версия .NET
1С-Битрикс: Управление сайтом Версия .NETMedia Gorod
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakAmasty
 
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Ontico
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийВиктор Золотов
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven developmentTestableapple
 

Semelhante a Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко (20)

Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
1С-Битрикс - Производительность
1С-Битрикс - Производительность1С-Битрикс - Производительность
1С-Битрикс - Производительность
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиков
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
Деплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложенийДеплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложений
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
1С-Битрикс: Управление сайтом Версия .NET
1С-Битрикс: Управление сайтом Версия .NET1С-Битрикс: Управление сайтом Версия .NET
1С-Битрикс: Управление сайтом Версия .NET
 
MS TFS 2010 - Обзор и архитектура
MS TFS 2010 - Обзор и архитектураMS TFS 2010 - Обзор и архитектура
MS TFS 2010 - Обзор и архитектура
 
Битрикс-Framework
Битрикс-FrameworkБитрикс-Framework
Битрикс-Framework
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 

Кэш виджетов Yii в Redis. Отдача напрямую через Nginx. Трофименко