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

Post on 18-Jul-2015

407 views 1 download

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

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

Gearman + Yii2

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

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

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

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

Gearman.

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

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

Enter Task1 Task2 Task N End

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

Enter Task1Task2

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

● Number of capable workers

Систему очередей 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.phpprocess_name=%(program_name)s_%(process_num)02dnumprocs=10directory=/var/www/workerstdout_logfile=/var/log/worker.logautostart=trueautorestart=trueuser=www-datastopsignal=KILL

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

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