|
PHP: background processes, queue и прочее
|
|||
---|---|---|---|
#18+
С 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, т.ч. задействовать "новые технологии" хочется по минимуму. Кто что может посоветовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2017, 10:01 |
|
PHP: background processes, queue и прочее
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Если неохота ставить лишний софт, то держи: 1. В самом простом варианте очереди делаешь таблицу в БД queue(id, data, status, create_datetime) тип InnoDB(если база mysql-образная), далее создаёшь запись с заданием, а отдельный процесс(по расписанию или сервис), обрабатывает и ставит status. Этот вариант строк 100 кода. Процессов-обработчиков может быть несколько и на разных серверах даже. Чтобы так сделать надо уметь работать с базой и транзакциями. 2. Можно сделать на файлах в /dev/shm, если сервер линуксовый. Это строк 100-150 кода. Процессов-обработчиков может быть несколько в пределах одного сервера. Надо уметь работать с файлами и знать атомарные операции с файлами. Оба варианта не требуют лишнего софта и каких-то запредельных знаний. >> Кто что может посоветовать? Нанять спеца, кто это сделает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2017, 17:54 |
|
|
start [/forum/topic.php?fid=23&msg=39559356&tid=1460444]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
109ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 195ms |
0 / 0 |