Антон Довгоброд: highload и очереди задач на примере php +...

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

Upload: oleg-poludnenko

Post on 18-Jul-2015

406 views

Category:

Technology


1 download

TRANSCRIPT

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

Highload и очереди задач на примере PHP +

Gearman + Yii2

Спикер: Антон Довгоброд

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

● Асинхронность в веб-приложениях.

● Систему очередей Gearman.

● Пример Реализации c использование Yii2 +

Gearman.

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

Асинхронность в веб-приложениях

Идет загрузка страницы ...

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

Enter Task1 Task2 Task N End

Асинхронность в веб-приложениях

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

Enter Task1Task2

Task N End

Асинхронность в веб-приложениях

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

0

время

кол-во

задач

Асинхронность в веб-приложениях

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

Асинхронность - что это ?

Асинхронность в веб-приложениях

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

Enter Task1

Task2

Task N End

Асинхронность в веб-приложениях

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

Асинхронность :

- Клиентская

- Серверная

Асинхронность в веб-приложениях

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

Асинхронность в веб-приложениях

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

Клиентская асинхронность

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

http://something.dev

Some Content 1

Some Content 2

Loading...

Some Content N

Клиентская асинхронность

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

Клиентская асинхронность

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

Недостатки:

1. Пользователь все так же ждет ответа

2. Зависим от пользователя и его интернет

соединения

3. Растет количество проверок, растет количество JS

кода, растет количество потенциально уязвимых

мест

4. Растет нагрузка на клиентскую часть

Клиентская асинхронность

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

Серверная асинхронность

Серверная асинхронность

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

Серверная асинхронность

http://something.dev

Some Content 1

Some Content 2

Content will be

loaded later, you

are free :-)

Some Content N

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

Серверная асинхронность

Отложенное выполнение

● Отправка почты

● Обработка изображений и прочих медиа

● Статистика

● Связь с API (синхронизация данных)

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

Серверная асинхронность

PHP и варианты

● fastcgi_finish_request()

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

Серверная асинхронность

PHP и варианты

● fastcgi_finish_request()

● exec("/usr/bin/php /var/www/script.php > /dev/null &");

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

Серверная асинхронность

PHP и варианты

● fastcgi_finish_request()

● exec("/usr/bin/php /var/www/script.php > /dev/null &");

● PCNTL (выполнение кода в отдельном процессе)

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

Серверная асинхронность

PHP и варианты

● fastcgi_finish_request()

● exec("/usr/bin/php /var/www/script.php > /dev/null &");

● PCNTL (выполнение кода в отдельном процессе)

● Использование Очередей

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

Система очередей Gearman.

Очередь ?

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

Система очередей 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.

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

Система очередей Gearman.

Почему Gearman ?

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

Система очередей 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

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

Система очередей Gearman.

PHP Client1

Job Server 1

Worker 1

Connect, submit a job

Send command to

wakу worker Up

Ask For Jobs

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

Система очередей Gearman.

PHP Client1

Job Server 1

Job Server 2

PHP Client2

PHP Client3

PHP Client4

PHP Client5

Worker 1

Worker 2

Worker 3

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

Система очередей Gearman.

Простой пример:

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

Система очередей Gearman.

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

Система очередей Gearman.Система очередей Gearman.

php worker.php

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

Система очередей Gearman.

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

Система очередей Gearman.

php client.php

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

Система очередей Gearman.

Масштабируемость:

$gmclient->addServer("10.324.56.23:4730,10.324.56.27:4321");

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

Система очередей Gearman.

Можно и не асинхронно:

$gmclient->do("reverse", "this is a test");

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

Система очередей Gearman.

Приоритеты:

$client->doHighBackground ("reverse", "this is a test");$client->doLowBackground ("reverse", "this is a test");

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

Система очередей Gearman.

Установка Gearman:

1. Gearman Server

apt-get install gearman-job-server

Но лучше перестраховаться :

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

Система очередей Gearman.

Установка Gearman:

1. Gearman Client

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

Система очередей Gearman.

Установка Gearman, путь Джедая:

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

Система очередей Gearman.

Мониторинг состояния:

1. Проверяем что сервер и php ext работают:

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

Система очередей Gearman.

Мониторинг состояния:

1. Проверяем что сервер и php ext работают

1. Мониторинг состояния

gearadmin --status

● Function Name

● Number in queue

● Number of jobs running

● Number of capable workers

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

Систему очередей Gearman.

Мониторинг состояния в UI:

1. Gearman Monitor

https://github.com/yugene/Gearman-Monitor

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

Систему очередей Gearman.

Мониторинг состояния в UI:

1. Gearman UI

https://github.com/gaspaio/gearmanui

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

Систему очередей Gearman.

Потенциальные узкие места:

1. Неожиданное завершение работы задачи

2. Неожиданное завершение работы Worker процесса

3. Выход из строя Job Server

4. при изменении кода Worker-а сам Worker не будет изменен

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

Систему очередей Gearman.

Потенциальные узкие места:

1. Неожиданное завершение работы задачи

- Проверка всех уровней эксепшнов

- Код Задач должен быть хорошо оттестирован

- Хранение статуса операций, необходимых задачам в отдельном месте

1. Неожиданное завершение работы Worker процесса

- Использование утилиты, управляющей процессами (хороший пример

Supervisor)

[program:worker]command=/usr/bin/php /var/www/worker.phpprocess_name=%(program_name)s_%(process_num)02dnumprocs=10directory=/var/www/workerstdout_logfile=/var/log/worker.logautostart=trueautorestart=trueuser=www-datastopsignal=KILL

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

Систему очередей Gearman.

Supervisor

[program:worker]command=/usr/bin/php /var/www/worker.phpprocess_name=%(program_name)s_%(process_num)02dnumprocs=10directory=/var/www/workerstdout_logfile=/var/log/worker.logautostart=trueautorestart=trueuser=www-datastopsignal=KILL

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

Систему очередей Gearman.

Потенциальные узкие места:

1. Неожиданное завершение работы задачи

- Проверка всех уровней эксепшнов

- Код Задач должен быть хорошо оттестирован

- Хранение статуса операций, необходимых задачам в отдельном месте

1. Неожиданное завершение работы Worker процесса

- Использование утилиты, управляющей процессами (хороший пример

Supervisor)

1. Выход из строя Job Server

Мониторинг Job Server

Выбирать хранилище очередей не по умолчанию (mysql, sqllight, memcached, etc.)

1. при изменении кода воркера сам воркер не будет изменен

Использование скриптов автодеплоя в случае обновления кода воркера

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

Систему очередей Gearman.

Как не должно быть:

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

Пример Реализации c использование

Yii2 + Gearman.

Пример Реализации c

использование Yii2 + Gearman.

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

Пример Реализации c использование

Yii2 + Gearman.

Архитектура Задач, архитектура на первом месте!

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

Пример Реализации c использование

Yii2 + Gearman.

Необходимые шаги:

1. Composer Yii2 extention

2. Add rows in config

3. write your worker

4. That’s it :-)

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

Пример Реализации 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)

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

Пример Реализации c использование

Yii2 + Gearman.

Config:

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

Пример Реализации c использование

Yii2 + Gearman.

Job:

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

Пример Реализации c использование

Yii2 + Gearman.

Client:

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

Ссылки:

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

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

Вопросы ?)

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

Всем Спасибо :-)

Вопросы и предложения можно оставлять:

[email protected]