powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: background processes, queue и прочее
2 сообщений из 2, страница 1 из 1
PHP: background processes, queue и прочее
    #39559356
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С PHP полностью не знаком, интересует можно ли это сделать на PHP и какие f.... manuals для этого нужно почитать.

ПРОБЛЕМА:
Есть сайт, открыт через I-net, доступ для зарегистрированных пользователей (сейчас тысячи, в пределе может быть десятки тысяч). На сайте есть печать документов, отчеты из пром. базы. Отчет формируется достаточно долго (5-15 секунд), при наплыве пользователей в конце месяца, когда все начинают печатать отчеты - сайт временами встает колом.

РЕШЕНИЕ, КАК Я ЕГО ВИЖУ:
1. Страничка с запуском отчета, ставит отчет в очередь (queue, job/tasks) и возвращает ID в очереди (job'а/task'а)
2. Пользователю выдается страничка примерно со следующем содержанием:
ваш отчет формируется, до Вас в очереди еще N человек
3. Галимым и тупым JS (или http header - не принципиально) страничка раз в 10 секунд перезапрашивается
4. Когда отчет сформирован, файл отсылается клиенту

Что хочется от очереди:
1. Запрет постановки задания несколько раз подряд. Вполне пойдет ограничение, что не более одного задания от пользователя (в качестве ID я бы использовал или User Login или ID Web сессии)
2. Возможность мониторинга позиции задания в очереди. К сожалению, средства php типа msg_send, msg_receive такого вроде не обеспечивают. Как и пункт 1 (((

Что хочется от PHP (возможностей языка не знаю ((( )
1. Нормальные классы коллекции типа HashMap, Queue singleton глобальные для всего сервера (думаю это есть и не проблема)
2. Возможность создать background thread / singleton глобальный для всего сервера. Вот тут я не понял, а такое вообще возможно? Будет ли это стабильно работать в php

Что не нравится с мега-гну-фреймворках которые мне попались на просторах И-нет (может плохо искал, может плохо читал доки):
они требуют отдельной конфигурации + почти все требуют как минимум установки Redis. Для элементарного алгоритма который на Java занял бы 100-200 строк кода max, это как-то тяжеловесно. Уже сейчас проблемы саппортить сайт при отсутствие автора/спецов по PHP, т.ч. задействовать "новые технологии" хочется по минимуму.

Кто что может посоветовать?
...
Рейтинг: 0 / 0
PHP: background processes, queue и прочее
    #39559660
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Если неохота ставить лишний софт, то держи:

1. В самом простом варианте очереди делаешь таблицу в БД queue(id, data, status, create_datetime) тип InnoDB(если база mysql-образная), далее создаёшь запись с заданием, а отдельный процесс(по расписанию или сервис), обрабатывает и ставит status.
Этот вариант строк 100 кода.

Процессов-обработчиков может быть несколько и на разных серверах даже.

Чтобы так сделать надо уметь работать с базой и транзакциями.

2. Можно сделать на файлах в /dev/shm, если сервер линуксовый.
Это строк 100-150 кода.
Процессов-обработчиков может быть несколько в пределах одного сервера.

Надо уметь работать с файлами и знать атомарные операции с файлами.

Оба варианта не требуют лишнего софта и каких-то запредельных знаний.

>> Кто что может посоветовать?

Нанять спеца, кто это сделает.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: background processes, queue и прочее
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]