система Queque, которая управляет нагрузкой - PullRequest
1 голос
/ 23 июня 2010

Мне нужна система очереди, которая работает максимально быстро, но не замедляет работу сервера.

У меня есть веб-приложение (php), которое конвертирует различные фрагменты мультимедиа (фотографии, видео и т. Д.). Когда кто-то хочет преобразовать файл, команда для преобразования помещается в базу данных. Мне нужна программа, которая может выполнять команды таким образом, чтобы мой сервер не зависал.

Мне нужно следующее:

-Что-то, что всегда работает на сервере. -Поиск базы данных postgres для нового контента -Программа переходит к следующей команде в базе данных после завершения предыдущей команды -Когда команда завершает, она обновляет таблицу postgres либо с успехом / неудачей и с отметкой времени -Программа должна использовать столько процессоров, сколько необходимо, но не быть приоритетом ... Я хочу, чтобы процесс был быстрым, но я не хочу, чтобы мой сервер остановился. -Программа должна иметь возможность ограничивать различные программы (поэтому, если приложение 1 запущено, и кто-то отправляет заявку на приложение 2 ... приложение 2 не запускается, если сервер не может его обработать).

Кто-нибудь знает существующие сценарии или идеи? Я играл с cpulimit, но это только ограничивает его, не позволяя серверу использовать весь свой потенциал, когда нет нагрузки на сервер. Я пробовал -nice -n, но это не похоже на работу.

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Я написал очень симпатичную маленькую систему, которая отправляла бы сотни тысяч электронных писем (пользователям сайта), которые сначала проверяли Средняя загрузка процессора . Если он был <2.0, продолжайте, иначе он поспал несколько секунд, а затем попытался снова. Обертывание этого PHP-скрипта было bash-скриптом, который просто запускал PHP-скрипт постоянно, после небольшой паузы. </p>

#!/bin/sh
nice /usr/bin/php -f ..../phpjobs/resizeContentFromDb.php
sleep 5
# and .... restart.
exec $0
0 голосов
/ 23 июня 2010

Демон преуспеет. Рассмотрим модель клиент-сервер - сервер отправляет задачи преобразования дочернему процессу или вызывает pthread_create, чтобы создать поток клиента для обработки задачи. Во время fork () / exec или pthread_create вы можете определить количество активных клиентов и, следовательно, нагрузку на систему. Затем вы можете настроить приоритет соответственно. Это дает вам динамический контроль над потреблением ресурсов.

Я не понимаю, почему приятно не может работать для вас. Что именно означает «не работает» в вашем контексте?

...