SlideShare a Scribd company logo
Highload и очереди задач на примере PHP +
Gearman + Yii2
Спикер: Антон Довгоброд
● Асинхронность в веб-приложениях.
● Систему очередей Gearman.
● Пример Реализации c использование Yii2 +
Gearman.
Асинхронность в веб-приложениях
Идет загрузка страницы ...
Enter Task1 Task2 Task N End
Асинхронность в веб-приложениях
Enter Task1
Task2
Task N End
Асинхронность в веб-приложениях
0
время
кол-во
задач
Асинхронность в веб-приложениях
Асинхронность - что это ?
Асинхронность в веб-приложениях
Enter Task1
Task2
Task N End
Асинхронность в веб-приложениях
Асинхронность :
- Клиентская
- Серверная
Асинхронность в веб-приложениях
Асинхронность в веб-приложениях
Клиентская асинхронность
http://something.dev
Some Content 1
Some Content 2
Loading...
Some Content N
Клиентская асинхронность
Клиентская асинхронность
Недостатки:
1. Пользователь все так же ждет ответа
2. Зависим от пользователя и его интернет
соединения
3. Растет количество проверок, растет количество JS
кода, растет количество потенциально уязвимых
мест
4. Растет нагрузка на клиентскую часть
Клиентская асинхронность
Серверная асинхронность
Серверная асинхронность
Серверная асинхронность
http://something.dev
Some Content 1
Some Content 2
Content will be
loaded later, you
are free :-)
Some Content N
Серверная асинхронность
Отложенное выполнение
● Отправка почты
● Обработка изображений и прочих медиа
● Статистика
● Связь с API (синхронизация данных)
Серверная асинхронность
PHP и варианты
● fastcgi_finish_request()
Серверная асинхронность
PHP и варианты
● fastcgi_finish_request()
● exec("/usr/bin/php /var/www/script.php > /dev/null &");
Серверная асинхронность
PHP и варианты
● fastcgi_finish_request()
● exec("/usr/bin/php /var/www/script.php > /dev/null &");
● PCNTL (выполнение кода в отдельном процессе)
Серверная асинхронность
PHP и варианты
● fastcgi_finish_request()
● exec("/usr/bin/php /var/www/script.php > /dev/null &");
● PCNTL (выполнение кода в отдельном процессе)
● Использование Очередей
Система очередей Gearman.
Очередь ?
Система очередей Gearman.
Системы очередей:
Celery (http://www.celeryproject.org/)
RabbitMQ (http://www.rabbitmq.com/)
Zend Server Job Queue (http://www.zend.com/)
ZeroMQ (http://www.zeromq.org/)
BeanstalkdPeafowl,
StarlingApache
ActiveMQand.
Система очередей Gearman.
Почему Gearman ?
Система очередей Gearman.
возможности gearman:
● Open Source
● Simple & Fast (rewritten in C)
● Support a variety of languages : build Worker in Python, Client in PHP
● Flexible
● Load Balance
● Failover
Система очередей Gearman.
PHP Client1
Job Server 1
Worker 1
Connect, submit a job
Send command to
wakу worker Up
Ask For Jobs
Система очередей Gearman.
PHP Client1
Job Server 1
Job Server 2
PHP Client2
PHP Client3
PHP Client4
PHP Client5
Worker 1
Worker 2
Worker 3
Система очередей Gearman.
Простой пример:
Система очередей Gearman.
Система очередей Gearman.Система очередей Gearman.
php worker.php
Система очередей Gearman.
Система очередей Gearman.
php client.php
Система очередей Gearman.
Масштабируемость:
$gmclient-
>addServer("10.324.56.23:4730,10.324.56
.27:4321");
Система очередей Gearman.
Можно и не асинхронно:
$gmclient->do("reverse", "this is a test");
Система очередей Gearman.
Приоритеты:
$client->doHighBackground ("reverse", "this is
a test");
$client->doLowBackground ("reverse", "this is a
test");
Система очередей Gearman.
Установка Gearman:
1. Gearman Server
apt-get install gearman-job-server
Но лучше перестраховаться :
Система очередей Gearman.
Установка Gearman:
1. Gearman Client
Система очередей Gearman.
Установка Gearman, путь Джедая:
Система очередей Gearman.
Мониторинг состояния:
1. Проверяем что сервер и php ext работают:
Система очередей Gearman.
Мониторинг состояния:
1. Проверяем что сервер и php ext работают
1. Мониторинг состояния
gearadmin --status
● Function Name
● Number in queue
● Number of jobs running
Систему очередей Gearman.
Мониторинг состояния в UI:
1. Gearman Monitor
https://github.com/yugene/Gearman-Monitor
Систему очередей Gearman.
Мониторинг состояния в UI:
1. Gearman UI
https://github.com/gaspaio/gearmanui
Систему очередей Gearman.
Потенциальные узкие места:
1. Неожиданное завершение работы задачи
2. Неожиданное завершение работы Worker процесса
3. Выход из строя Job Server
4. при изменении кода Worker-а сам Worker не будет изменен
Систему очередей Gearman.
Потенциальные узкие места:
1. Неожиданное завершение работы задачи
- Проверка всех уровней эксепшнов
- Код Задач должен быть хорошо оттестирован
- Хранение статуса операций, необходимых задачам в отдельном месте
1. Неожиданное завершение работы Worker процесса
- Использование утилиты, управляющей процессами (хороший пример
Supervisor)
[program:worker]
command=/usr/bin/php /var/www/worker.php
process_name=%(program_name)s_%(process_num)02d
numprocs=10
directory=/var/www/worker
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
stopsignal=KILL
Систему очередей Gearman.
Supervisor
[program:worker]
command=/usr/bin/php
/var/www/worker.php
process_name=%(program_name)s_%(proce
ss_num)02d
numprocs=10
directory=/var/www/worker
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
stopsignal=KILL
Систему очередей Gearman.
Потенциальные узкие места:
1. Неожиданное завершение работы задачи
- Проверка всех уровней эксепшнов
- Код Задач должен быть хорошо оттестирован
- Хранение статуса операций, необходимых задачам в отдельном месте
1. Неожиданное завершение работы Worker процесса
- Использование утилиты, управляющей процессами (хороший пример
Supervisor)
1. Выход из строя Job Server
Мониторинг Job Server
Выбирать хранилище очередей не по умолчанию (mysql, sqllight, memcached, etc.)
1. при изменении кода воркера сам воркер не будет изменен
Использование скриптов автодеплоя в случае обновления кода воркера
Систему очередей Gearman.
Как не должно быть:
Пример Реализации c использование
Yii2 + Gearman.
Пример Реализации c
использование Yii2 + Gearman.
Пример Реализации c использование
Yii2 + Gearman.
Архитектура Задач, архитектура на первом месте!
Пример Реализации c использование
Yii2 + Gearman.
Необходимые шаги:
1. Composer Yii2 extention
2. Add rows in config
3. write your worker
4. That’s it :-)
Пример Реализации c использование
Yii2 + Gearman.
Устанавливаем дополнения:
1. Filsh
https://github.com/Filsh/yii2-gearman
Single worker , used :
https://github.com/sinergi/gearman
2. OR, Shakura
https://github.com/shakura/yii2-gearman
(Multiple workers)
Пример Реализации c использование
Yii2 + Gearman.
Config:
Пример Реализации c использование
Yii2 + Gearman.
Job:
Пример Реализации c использование
Yii2 + Gearman.
Client:
Ссылки:
1. http://ruhighload.com/
2. http://supervisord.org/
3. http://gearman.org/
4. http://php.net/manual/en/book.gearman.php
5. https://gist.github.com/resscode/f118ca2f0233aebce3e5
6. https://github.com/gaspaio/gearmanui
7. https://github.com/Filsh/yii2-gearman
8. https://github.com/shakura/yii2-gearman
9. https://github.com/sinergi/gearman
Вопросы ?)
Всем Спасибо :-)
Вопросы и предложения можно оставлять:
anton.dovgobrod@dataart.com

More Related Content

What's hot (20)

PDF
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
PDF
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
 
PPT
Bdd in python - Кирилл Борисов, PyCon RU 2014
it-people
 
PDF
Применение языка Go в инфраструктурных проектах
Alex Chistyakov
 
PDF
Rust - GDG DevFest 2016 Nizhny Novgorod
Nikita Baksalyar
 
PDF
Rust - GDG DevFest Siberia 2016
Nikita Baksalyar
 
PPTX
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
 
PDF
Александр Чистяков - Большой веб-проект: развитие, рост, проблемы, решения с ...
HappyDev
 
PDF
Big web project @happydev Omsk
Alex Chistyakov
 
PPTX
Управление highload-проектами 24 на 7
ADV/web-engineering
 
PDF
специализированные http-демона (Сергей Боченков, Александр Панков)
Ontico
 
PDF
Как мы делаем раскладку Календаря@Mail.Ru
Vladimir Rudnyh
 
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
PPTX
Контроль качества и сопровождение программ в реальном времени
SQALab
 
PDF
Jbreak 2016: Твой личный Spring Boot Starter
Aleksandr Tarasov
 
ODP
Обзор Continuous integration инструментов
Vitalii Morvaniuk
 
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
 
PDF
Введение в maven
Dmitry Zinushin
 
PPTX
Php and frameworks
Alexandr Drobyshevsky
 
PDF
My talk on HBase ops engineering at TBD Jun 2016
Alex Chistyakov
 
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
 
Bdd in python - Кирилл Борисов, PyCon RU 2014
it-people
 
Применение языка Go в инфраструктурных проектах
Alex Chistyakov
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Nikita Baksalyar
 
Rust - GDG DevFest Siberia 2016
Nikita Baksalyar
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
 
Александр Чистяков - Большой веб-проект: развитие, рост, проблемы, решения с ...
HappyDev
 
Big web project @happydev Omsk
Alex Chistyakov
 
Управление highload-проектами 24 на 7
ADV/web-engineering
 
специализированные http-демона (Сергей Боченков, Александр Панков)
Ontico
 
Как мы делаем раскладку Календаря@Mail.Ru
Vladimir Rudnyh
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
Контроль качества и сопровождение программ в реальном времени
SQALab
 
Jbreak 2016: Твой личный Spring Boot Starter
Aleksandr Tarasov
 
Обзор Continuous integration инструментов
Vitalii Morvaniuk
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
 
Введение в maven
Dmitry Zinushin
 
Php and frameworks
Alexandr Drobyshevsky
 
My talk on HBase ops engineering at TBD Jun 2016
Alex Chistyakov
 

Viewers also liked (15)

PPTX
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Ontico
 
PDF
Обработка дедлоков в MySql
spariev
 
PDF
Anemic Domain Model - антипаттерн или SOLID?
GoSharp
 
PPTX
ByndyuSoft 1 год глазами программиста
Ruslan Safin
 
PDF
Компания мечты своими руками, Уфа,
Alexander Byndyu
 
PDF
PHP, RabbitMQ, and You
Jason Lotito
 
PDF
Карьера в IT, 27-02-2013
Alexander Byndyu
 
PPTX
DDD - модель вместо требований
SQALab
 
PDF
Introducing Practical RabbitMQ (php[tek] 2016 - Tutorial)
James Titcumb
 
PPTX
Palestra yii2
João Bosco de Barros Filho
 
ODP
Применение DDD подхода в Symfony 2 приложении
Антон Шабовта
 
PDF
DDD Workshop
Andrey Bibichev
 
PDF
Integrating RabbitMQ with PHP
Alvaro Videla
 
PDF
Gearman for MySQL
Giuseppe Maxia
 
PDF
Distributed Queue System using Gearman
Eric Cho
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Ontico
 
Обработка дедлоков в MySql
spariev
 
Anemic Domain Model - антипаттерн или SOLID?
GoSharp
 
ByndyuSoft 1 год глазами программиста
Ruslan Safin
 
Компания мечты своими руками, Уфа,
Alexander Byndyu
 
PHP, RabbitMQ, and You
Jason Lotito
 
Карьера в IT, 27-02-2013
Alexander Byndyu
 
DDD - модель вместо требований
SQALab
 
Introducing Practical RabbitMQ (php[tek] 2016 - Tutorial)
James Titcumb
 
Применение DDD подхода в Symfony 2 приложении
Антон Шабовта
 
DDD Workshop
Andrey Bibichev
 
Integrating RabbitMQ with PHP
Alvaro Videla
 
Gearman for MySQL
Giuseppe Maxia
 
Distributed Queue System using Gearman
Eric Cho
 
Ad

Similar to Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2 (20)

PDF
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
JSib
 
PDF
Zherdev icinga 20120423
kuchinskaya
 
PDF
Организация процесса регулярной обработки больших объемов данных
CodeFest
 
PPTX
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
KEY
Batch processing in rails
Sergey
 
PPTX
20090720 hpc exercise1
Michael Karpov
 
PPTX
Use Grunt Luke
Gleb Pospelov
 
PDF
Grail: шаги для ваших Python-тестов
CodeFest
 
PDF
Grail - CodeFest'2015
Igor Khrol
 
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
PDF
Григорий Демченко — Асинхронное программирование и сопрограммы
Yandex
 
PPT
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
SQALab
 
PDF
Техники пентеста для активной защиты - Николай Овчарук
HackIT Ukraine
 
PDF
Опыт разработки и тестирования RESTful JSON сервиса
Ilya Chesnokov
 
PPTX
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Ontico
 
PDF
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Ontico
 
PDF
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Badoo Development
 
PDF
Павел Довгалюк, Обратная отладка
Sergey Platonov
 
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
PDF
Apache.JMeter для .NET-проектов
SQALab
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
JSib
 
Zherdev icinga 20120423
kuchinskaya
 
Организация процесса регулярной обработки больших объемов данных
CodeFest
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
Batch processing in rails
Sergey
 
20090720 hpc exercise1
Michael Karpov
 
Use Grunt Luke
Gleb Pospelov
 
Grail: шаги для ваших Python-тестов
CodeFest
 
Grail - CodeFest'2015
Igor Khrol
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Yandex
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
SQALab
 
Техники пентеста для активной защиты - Николай Овчарук
HackIT Ukraine
 
Опыт разработки и тестирования RESTful JSON сервиса
Ilya Chesnokov
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Ontico
 
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Ontico
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Badoo Development
 
Павел Довгалюк, Обратная отладка
Sergey Platonov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Apache.JMeter для .NET-проектов
SQALab
 
Ad

More from Oleg Poludnenko (12)

PPTX
Дмитрий Красун: Сегодня вы уйдете с новым представлением о REST
Oleg Poludnenko
 
PDF
Александр Трищенко: PHP 7 Evolution
Oleg Poludnenko
 
PPTX
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Oleg Poludnenko
 
PPTX
Александр Трищенко: Phalcon framework
Oleg Poludnenko
 
PDF
Алексей Иванкин: Highload + PHP
Oleg Poludnenko
 
PPTX
Алексей Рыстенко: Highload и микросервисы
Oleg Poludnenko
 
PPTX
Алексей Плеханов: Новинки Laravel 5
Oleg Poludnenko
 
PDF
Макс Волошин: Php + shell = ♥
Oleg Poludnenko
 
PPTX
Дмитрий Тарасов: Google App Engine & PHP SDK
Oleg Poludnenko
 
PPTX
Алексей Рыстенко: Continuous Integration
Oleg Poludnenko
 
PPTX
Илья Андриенко: Вёрстка в проекте глазами “неверстальщика”
Oleg Poludnenko
 
PDF
Алексей Плеханов: 25 причин попробовать Laravel
Oleg Poludnenko
 
Дмитрий Красун: Сегодня вы уйдете с новым представлением о REST
Oleg Poludnenko
 
Александр Трищенко: PHP 7 Evolution
Oleg Poludnenko
 
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Oleg Poludnenko
 
Александр Трищенко: Phalcon framework
Oleg Poludnenko
 
Алексей Иванкин: Highload + PHP
Oleg Poludnenko
 
Алексей Рыстенко: Highload и микросервисы
Oleg Poludnenko
 
Алексей Плеханов: Новинки Laravel 5
Oleg Poludnenko
 
Макс Волошин: Php + shell = ♥
Oleg Poludnenko
 
Дмитрий Тарасов: Google App Engine & PHP SDK
Oleg Poludnenko
 
Алексей Рыстенко: Continuous Integration
Oleg Poludnenko
 
Илья Андриенко: Вёрстка в проекте глазами “неверстальщика”
Oleg Poludnenko
 
Алексей Плеханов: 25 причин попробовать Laravel
Oleg Poludnenko
 

Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2