Pavel Ruban
Hardware, software engineer at I20
High loaded php operations over web interface.
Вопросы о которых далее пойдет доклад:
● О чем речь?
● Зачем это нужно?
● Какие есть проблемы реализации такого решения ?
● Почему php?
● Как это работает?
● Есть ли реальные примеры реализации этого?
Данная тема раскрывает способы решения задач связанных с
необходимостью предоставления интерфейса пользователю из вэба для
управления долгими здачами, которые выполняет сервер. Как правило
время таких задач может достигать минуты и более.
О чем речь?
● предоставить обратную связь пользователю, сигнализирующую о
завершении операции без необходимости перезагружать страницу.
● иметь возможность создать удобный, отзывчивый интерфейс
пользователя без оглядки на время которое нужно для завершения
операции сервером.
● уметь делать это внутри Drupal системы без потери трудочасов на
заботу о данных окружения и их инициализации, которые необходимы
для корректной работы подсистемы Drupal’а
Зачем это нужно?
● timeout сервера и timeout времени работы скрипта.
● протокол http не позволяет серверу отвечать клиенту без запроса.
● операция не должна блокировать работу пользователя.
● нужно сохранять контекст Drupal’а при использовании его
функционала.
Какие есть проблемы при реализации?
Почему PHP?
● Поддержка существующих крупных проектов, где весь функционал
обычно разрабатывается в контексте языка программирования php.
● На хостинге нет возможности установить необходимый софт для
решения другими способами этой проблемы (например сервер
поддерживающий протокол websocket и т.д.)
● Вопрос цены - дополнительные услуги как правило стоят денег и если
проблему можно решить проще с тем же качеством, то в
долговременной перспективе повышение ежемесячной платы
неоправданно.
Как это работает?
1. Запрос на сервер, php клонирует процесс (fork() Linux API).
2. Parent процесс моментально отвечает клиенту
3. Child процесс после завершения parent процесса становится
самостоятельным процессом, а также имеет CLI контекст.
4. Клиент переодически опрашивает сервер о готовности работы.
5. При завершении child помечает работу выполненной и записывает
свой результат в доступное для другого php процесса место.
6. Клиент (js скрипт) получает сигнал о готовности и отдает результат в
удобном виде конечному пользователю.
Fork
● Созданный процесс имеет те
же самые переменные и
окружение что и
родительский процесс.
● Новый процес создается
программно, поэтому
находится в CLI окружение
где другие настройки
сервера по timeout’у.
Решенные проблемы:
а) timeout б) Drupal контекст
в) блокировка пользователя
Js polling ● Клиент переодически
опрашивает сервер, как
только работа будет готова,
сервер вернет результат
● JS (браузер) сможет вернуть
ответ в удобном виде
конечному пользователю.
Решенные проблемы:
а) Обратная связь
б) http протокол (деньги)
Система годовых отчетов, с множеством фильтров и динамическим
расчетом данных из браузера. CSV файлы размером более 20 мегабайт.
Примеры реализации данной техники
Contact
Pavel Ruban I20
pavelruban@mail.com
Пример с кодом на сайте:
www.pavelruban.org

Pavel Ruban. High loaded PHP operations over web interface

  • 1.
  • 2.
    High loaded phpoperations over web interface. Вопросы о которых далее пойдет доклад: ● О чем речь? ● Зачем это нужно? ● Какие есть проблемы реализации такого решения ? ● Почему php? ● Как это работает? ● Есть ли реальные примеры реализации этого?
  • 3.
    Данная тема раскрываетспособы решения задач связанных с необходимостью предоставления интерфейса пользователю из вэба для управления долгими здачами, которые выполняет сервер. Как правило время таких задач может достигать минуты и более. О чем речь?
  • 4.
    ● предоставить обратнуюсвязь пользователю, сигнализирующую о завершении операции без необходимости перезагружать страницу. ● иметь возможность создать удобный, отзывчивый интерфейс пользователя без оглядки на время которое нужно для завершения операции сервером. ● уметь делать это внутри Drupal системы без потери трудочасов на заботу о данных окружения и их инициализации, которые необходимы для корректной работы подсистемы Drupal’а Зачем это нужно?
  • 5.
    ● timeout сервераи timeout времени работы скрипта. ● протокол http не позволяет серверу отвечать клиенту без запроса. ● операция не должна блокировать работу пользователя. ● нужно сохранять контекст Drupal’а при использовании его функционала. Какие есть проблемы при реализации?
  • 6.
    Почему PHP? ● Поддержкасуществующих крупных проектов, где весь функционал обычно разрабатывается в контексте языка программирования php. ● На хостинге нет возможности установить необходимый софт для решения другими способами этой проблемы (например сервер поддерживающий протокол websocket и т.д.) ● Вопрос цены - дополнительные услуги как правило стоят денег и если проблему можно решить проще с тем же качеством, то в долговременной перспективе повышение ежемесячной платы неоправданно.
  • 7.
    Как это работает? 1.Запрос на сервер, php клонирует процесс (fork() Linux API). 2. Parent процесс моментально отвечает клиенту 3. Child процесс после завершения parent процесса становится самостоятельным процессом, а также имеет CLI контекст. 4. Клиент переодически опрашивает сервер о готовности работы. 5. При завершении child помечает работу выполненной и записывает свой результат в доступное для другого php процесса место. 6. Клиент (js скрипт) получает сигнал о готовности и отдает результат в удобном виде конечному пользователю.
  • 8.
    Fork ● Созданный процессимеет те же самые переменные и окружение что и родительский процесс. ● Новый процес создается программно, поэтому находится в CLI окружение где другие настройки сервера по timeout’у. Решенные проблемы: а) timeout б) Drupal контекст в) блокировка пользователя
  • 9.
    Js polling ●Клиент переодически опрашивает сервер, как только работа будет готова, сервер вернет результат ● JS (браузер) сможет вернуть ответ в удобном виде конечному пользователю. Решенные проблемы: а) Обратная связь б) http протокол (деньги)
  • 10.
    Система годовых отчетов,с множеством фильтров и динамическим расчетом данных из браузера. CSV файлы размером более 20 мегабайт. Примеры реализации данной техники
  • 13.
    Contact Pavel Ruban I20 pavelruban@mail.com Примерс кодом на сайте: www.pavelruban.org