Хранение большинства переменных локально и уменьшение их объема помогает продвигать лучшие практики программирования. Это также снижает риск ошибочного изменения переменной и необходимости отслеживать через функции в поисках непредвиденных или неочевидных последствий. Я считаю, что это также облегчает чтение и обслуживание кода, поскольку большинство переменных, относящихся к определенному разделу кода, определены и инициализированы поблизости. В противном случае я, кажется, постоянно возвращаюсь к разделу кода, определяющему все golbals. Я использую некоторые глобальные переменные, но в основном для передачи информации о конфигурации в субмодули.
У меня были отличные результаты с BeanstalkD и серверной частью, написанной на PHP, для получения заданий и последующей обработки их. Я заключил фактическое выполнение задания в bash-скрипт, чтобы оно продолжало работать, даже если оно завершилось (если я не сделаю ' exit (UNIQNUM);
', когда скрипт его проверит и действительно выйдет). Таким образом, перезапущенный сценарий PHP очищает всю память, которая могла быть использована, и может запускать заново каждые 25/50/100 заданий, которые он выполняет.
Пара преимуществ его использования заключается в том, что вы можете устанавливать приоритеты и задержки в задании BeanstalkD - «запустите это с более низким приоритетом, но не запускайте в течение 10 секунд». Я также иногда ставил в очередь несколько заданий (запустите это сейчас, через 5 секунд и снова через 30 секунд).
С соответствующей конфигурацией сети (и запуском его на доступном IP-адресе для остальной части вашей сети) вы также можете запустить beanstalkd deamon на одном сервере и запросить его с нескольких других машин, поэтому, если генерируется большое количество задач, работа может быть разделена между серверами. Если на конкретном компьютере необходимо выполнить определенный набор задач, я создал «трубку», которая представляет собой имя хоста этой машины, которое должно быть уникальным в нашем кластере, если не глобально (полезно для загрузки файлов). Я обнаружил, что он отлично работает для изменения размера изображений, часто возвращая готовые изображения меньшего размера в файловую систему до того, как сама веб-страница, которая будет ссылаться на нее, будет ссылаться на URL-адрес, на который она будет приходить.
I '
Если вы используете очередь сообщений, например beanstalkd, вы можете запускать столько процессов, сколько хотите (даже на одном сервере). Каждый рабочий процесс берет одно задание из очереди и обрабатывает его. Вы можете добавить больше воркеров и больше серверов, если вам нужна большая мощность.
Хорошая вещь в использовании однопоточного воркера заключается в том, что вам не нужно иметь дело с синхронизацией внутри процесса. Очередь заданий гарантирует, что ни одно задание не будет обработано дважды.
Может, стоит также попробовать Amazon SQS для использования вместе с EC2?