Набросок для gearman воркеров

Выкладываем свои наработки
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Набросок для gearman воркеров

Сообщение mitallast »

Для определенного рода задач на бекенде, а порой и в фронтенде используют очереди сообщений - например, для загрузки файлов или отправки почты.
А раз такая вешь полезна - а тем более мне понадобилось с ней разобраться - то я за сегодня сделал набросок кода для работы с очередью сообщений на Gearman http://gearman.org/.
Правда, толком протестить не успел

https://github.com/mitallast/yii-gearman

Это расширение позволяет регистрировать контроллеры и их действия в gearman.
Пример использования:

Добавляем компонент в конфиг приложения:

Код: Выделить всё

'gearmanManager'=>array(
    'class'=>'GearmanManager',
    'servers'=>array(
        '192.168.56.101',
    ),
    'routes' => array(
        'reverse' => array('gearman','reverse'),
    ),
),
 
Делаем контроллер:

Код: Выделить всё

class GearmanController extends AbstractGearmanController
{
    public function actionReverse(GearmanJob $job)
    {
        return strrev($job);
    }
}
 
и добавляем входной скрипт, предназначенный для запуска воркера:

Код: Выделить всё

<?php
// change the following paths if necessary
$yii=dirname(__FILE__).'/../yii/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';

require_once($yii);
// create application
Yii::createWebApplication($config);
// run gearman worker
Yii::app()->gearmanManager->run();
 
Проверить работу можно при помощи следующего скрипта:

Код: Выделить всё

<?php
$client = new GearmanClient();
$client->addServer('192.168.56.101');

//$result = $client->do("reverse", "string");
$client->addTaskBackground("reverse", "string");
$client->runTasks();
 
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение BuCeFaL »

twitt yiiframework_ru
Gearman воркер для скачивания файлов по URl: http://tpoxa.com/2010/12/03/gearman-vor ... ov-po-url/
может поможет кому...
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение mitallast »

BuCeFaL писал(а):twitt yiiframework_ru
Gearman воркер для скачивания файлов по URl: http://tpoxa.com/2010/12/03/gearman-vor ... ov-po-url/
может поможет кому...
Я видел этот подход, лично мне он не понравился. Я стараюсь писать ближе к yii way - у компонентов должы быть следующие качества:
  • Легкая настройка
  • Легкая поддержка
  • Стиль написания кода, использующего компонент, не должен выделяться на фоне классического yii приложения, описанного в официальном руководстве.
  • Правильный уровень абстракции, позволяющий применить полиморфизм. Тут я подразумеваю легкость перехода от gearman на альтернативный транспорт, например AMQP совместимый или вообще своя реализация. Должен сказать, тут у меня тоже некоторая проблема, но хотя бы отстутствует жесткая привязка к gearman.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение samdark »

Полезно. Самому пока не надо, но на будущее иметь такое хорошо. Выкладывай на официалку в расширения.
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение mitallast »

Sam Dark,
Sorry, you are too new to add an extension to the repository. Please try posting it in our forum first.
:(
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение Ekstazi »

Я тоже на это наткнулся, только раньше это сообщение не выдавало.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение samdark »

Десяток постов надо.
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение mitallast »

После некоторых размышлений пришел к следующему интерфейсу взаимодействия

Изображение

ps. Кто-нибуть знает нормальный редактор UML по ubuntu? Я пользовался DIa, gaphor - кривые какие-то они :?
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение Caveman »

mitallast писал(а):ps. Кто-нибуть знает нормальный редактор UML по ubuntu? Я пользовался DIa, gaphor - кривые какие-то они :?
VPSuite
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение mitallast »

Caverman, спасибо, обязательно посмотрю.
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: Набросок для gearman воркеров

Сообщение R3D3 »

Очень интересное расширение, хочу использовать его. Тестировалось ли оно на предмет расхода памяти и утечек?
Yii Jabber Conference: yii@conference.jabber.ru
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение Insolita »

Такой вопрос - а может gearman порождать дочерние задачи...
т.е. что-то типа

Код: Выделить всё

<?  //Main client
$client= new GearmanClient();
$client->addServer();
...
$handle = $client->doBackground("workerfunc", $params);
.....
?>

Код: Выделить всё

<? //worker
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("workerfunc", "mymainworkerfunc");

 function mymainworkerfunc($job)
{
     //do something 
    ......
      $client= new GearmanClient();
      $client->addServer();
      $childtasks=array();
      $childtasks[1]=$client->AddTask("childwork", 'smth');
      $childtasks[2]=$client->AddTask("childwork", 'smth');
      ...........
     return $result;
}
?>
Аватара пользователя
NosFire
Сообщения: 26
Зарегистрирован: 2013.04.20, 21:00
Откуда: Санкт-Петербург

Re: Набросок для gearman воркеров

Сообщение NosFire »

Сам гирман не может, он job-broker. Для манипуляции процессами, нужно писать самому менеджер тасков, ну или искать в интернете подобное.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Набросок для gearman воркеров

Сообщение lancecoder »

NosFire писал(а):Сам гирман не может, он job-broker. Для манипуляции процессами, нужно писать самому менеджер тасков, ну или искать в интернете подобное.
там же все равно не буудет связей, будут приоритеты
Аватара пользователя
NosFire
Сообщения: 26
Зарегистрирован: 2013.04.20, 21:00
Откуда: Санкт-Петербург

Re: Набросок для gearman воркеров

Сообщение NosFire »

lancecoder писал(а):там же все равно не буудет связей, будут приоритеты
На сколько я понял из кода, в воркере есть какая то связная задача, которая должна запустить еще пару воркеров для обработки подзадач. Возможно я не так понял изначально.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Набросок для gearman воркеров

Сообщение lancecoder »

зачем порождать? вместо 1 задачи дробить ее, не вижу смысла, просто когда ставите задачу она возвращает идентификатор, по которому вы можете контролировать задачу и бывает, вроде 3, приоритета задачи
Аватара пользователя
NosFire
Сообщения: 26
Зарегистрирован: 2013.04.20, 21:00
Откуда: Санкт-Петербург

Re: Набросок для gearman воркеров

Сообщение NosFire »

Если считать фоновое выполнение то 6 приоритетов. 3 на незамедлительном выполнение и 3 на фоновом выполнении (приоритет у фоновых ниже, чем у обычного).
Я гирманом топорно работаю, для контроля воркеров юзаю супервизорд, а управлением через отдельный демон. Поэтому я не понимаю нагромождение в коде воркеров вообще.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: Набросок для gearman воркеров

Сообщение Insolita »

lancecoder писал(а):зачем порождать? вместо 1 задачи дробить ее, не вижу смысла, просто когда ставите задачу она возвращает идентификатор, по которому вы можете контролировать задачу и бывает, вроде 3, приоритета задачи
Дробление - потому что первая задача поступает с другого сервера, в виде пакета данных, в фоновом режиме, т.е. ответа она не ждёт. А на рабочем сервере с ними уже происходит всякая обработка... ну значит будем другие методы искать, раз так нельзя
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Набросок для gearman воркеров

Сообщение lancecoder »

а кто запрещает?
plandem
Сообщения: 25
Зарегистрирован: 2009.09.03, 02:34

Re: Набросок для gearman воркеров

Сообщение plandem »

NosFire писал(а):Если считать фоновое выполнение то 6 приоритетов. 3 на незамедлительном выполнение и 3 на фоновом выполнении (приоритет у фоновых ниже, чем у обычного).
Я гирманом топорно работаю, для контроля воркеров юзаю супервизорд, а управлением через отдельный демон. Поэтому я не понимаю нагромождение в коде воркеров вообще.
И как такое решение после продолжительного использования? Было ли сравнение, кстати, с RabbitMQ, Resque? Как у gearman с persistance?
Ответить