Игорь Олемской — практические заметки по системному администрированию Linux CentOS

Архив рубрики ‘Отобранные’

Gearman и PHP — асинхронные задачи (перепечатка)

Комментариев нет

gearman

Gearman — это сервер организации и распределения задач, или проще говоря сервер очереди сообщений. Gearman включает множество функциональных особенностей — балансировка, асинхронное/синхронное выполнение, приоритеты и т.п. В этой статье, на примере с PHP, реализуем простой механизм отложенной отправки почты.

Суть

Зачем вообще нужны такие решения, как Gearman, читайте в статье “Очередь сообщений — что это и зачем?“. Наша задача реализовать отложенную отправку почты, т.к. это довольно ресурсоемкая операция и может сильно влиять на скорость ответа приложения клиенту.

Установка

Установка происходит в два этапа. Сначала ставим сам сервер (исходники качаем тут):

tar -xvzf  gearmand-version.tar.gz
cd gearmand
./configure
make; make install

Теперь устанавливаем php расширение:

pecl download gearman-0.7.0
tar -xvf gearman-0.7.0.tgz
cd gearman-0.7.0
phpize
./configure
make
make install

Не забываем добавить “extension=gearman.so” в php.ini. Если все хорошо, то phpinfo () покажет нам:
php-info-gearman

Клиент

В нашем клиенте (основное приложение) отправка email сообщений будет осуществляться путем регистрации новых задач на сервере Gearman:


...
$mail = array(
  'to' => 'test@gmail.com',
  'subject' => 'Привет',
  'body' => 'Это тестовое сообщение',
);
...

# Подключаемся к серверу
$client= new GearmanClient();
$client->addServer();
# Регистрируем задачу для фонового выполнения
# "sendmail" - это тип задачи
# $mail - это данные письма
$result = $client->doBackground("sendmail", serialize($mail));

Обратите внимание, что PHP клиент принимает только строку в качестве данных о задаче, поэтому необходимо любой другой тип объектов сериализовать. Мы использовали асинхронное выполнение задач (метод doBackground), поэтому реальное время отправки почты не повлияет на скорость выполнения нашего приложения.

Обработчик задачи

Обработчик — это отдельное приложение (скрипт), который “слушает” сервер на предмет появления новых задач. Как только задача приходит — он выполняет связанную с ней логику (в нашем случае это будет отправка письма с помощью почтового сервера).


# Создаем "воркера" и подключаемся к серверу задач
$worker= new GearmanWorker();
$worker->addServer();

# Регистрируем обработчик события "sendmail"
# "send_mail" - это имя функции, объявленной ниже
$worker->addFunction("sendmail", "send_mail");

while (1)
{
  echo "Ждем работы...\n";

  $ret= $worker->work();
  if ($worker->returnCode() != GEARMAN_SUCCESS) break;
}

# Функция реальной отправки почты
# В аргумент ей передается объект задачи
function send_mail($job)
{
  $workload= $job->workload();
  $data = unserialize($workload);
  mail($data['to'], $data['subject'], $data['body']);
}

Полезные ссылки

Google Bookmarks Digg I.ua Ru-marks Ruspace Zakladok.net Reddit delicious Technorati Yahoo My Web News2.ru БобрДобр.ru Memori.ru rucity.com
Related posts:
  1. Очередь сообщений на основе PHP и MemcacheQ

installing CentOS from USB pen drive (перепечатка)

Комментариев нет

Понадобилось у становить CentOS на машину которая не умеет загружаться по сети и не оказалось под рукой CD-ROM. Создаем загрузочную флешку для установки CentOS

вставляем флешку в usb порт, появляется новое устройство /dev/sdd теперь запустим fdisk

fdisk /dev/sdd

удалим все разделы создадим:
/dev/sdd1 размером 15 MB
/dev/sdd2 всё остальное пространство

/dev/sdd1 нужно сделть Bootable, т.е. загрузочным и переходим к установке:
wget http://mirror.yandex.ru/centos/5.4/os/i386/images/diskboot.img
dd if=diskboot.img of=/dev/sdd1

если размер USB диска позволяет, то форматируем /dev/sdd2 в ext3
mkfs.ext3 /dev/sdd2
и копируем в этот раздел содержимое установочного диска.

теперь можно начать установку с USB диска и выбрать установка с диска указав второй раздел или указать локальный http репозиторий для установки

Вышел CentOS 5.5 (перепечатка)

Комментариев нет

Представлен релиз Linux дистрибутива CentOS 5.5, основанный на пакетной базе Red Hat Enterprise Linux 5.5. В отличие от RHEL в CentOS объединены в единый репозиторий пакетов и в один установочный комплект пакеты как из серверной, так и из десктоп редакции RHEL. CentOS 5.5 поставляется для платформ i386 и x86_64 в сборках: LiveCD (689 Мб), DVD [...]