ФорумПрограммированиеPHP для идиотов → Получение большого количества хуйни в фоновом режиме

Получение большого количества хуйни в фоновом режиме

  • Коля Дубр

    Сообщения: 45 Репутация: N Группа: Адекваты

    Spritz Май 4, 2012, 1:13 д.п.

    Привет, профи!

    Есть вот такой сервис: http://www.recipdonor.com/help/api

    Суть: мы хотим узнать всякую SEO-хуйню про сайт (тиц-пиар и т.д.). Отправляем ему запрос, он возвращает ID сессии, далее мы по этому ID долбимся, проверяя, закончил ли он собирать данные - на стороне сервиса на это уходит несколько секунд.

    В моем приложении нужно получать разные наборы данных про разные сайты в разных ситуациях, и по-разному их использовать.

    Придумайте за меня архитектуру с таким поведением:

    1. появилась задача для проверки (юзер нажал на какую-то кнопку)
    2. приложение ее куда-то записало - в формате "что проверять - для каких сайтов - что потом с этим делать (колбэк)"


    if ($some_shit) {
    $task_id = rds_add_task($sites, $params, 'my_fucking_callback');
    }


    3. подсистема, взаимодействующая с сервисом, об этом узнала, отправила нужные запросы сервису, дождалась, пока он вернет данные, и вызвала нужный колбэк

    4. нужный колбэк кладет полученные данные в БД приложения

    function my_fucking_callback($task_result, $task_id) {
    // делаем что-то с $task_result
    rds_kill_task($task_id);
    }


    5. пока это все происходит, юзер может видеть прогресс - "задача в очереди - задача выполняется - готово"

    $.ajax({url:'/rds_task_state?task='+task_id, success: function() {…}})


    Собственно нифига не понятно с пунктом 3. Клиент, который работает с сервисом, я накодил - дурацкое дело не хитрое. Теперь думаю, как организовать подсистему обработки задач. А именно:
    - как ловчее хранить задачи, в файлах, в бд, еще где-то?
    - как обрабатывать - по идее должен крутиться демон, который, обнаружив задачу, запускает воркера - но хз как это реализовать
    - как отслеживать и обрабатывать ситуации, когда дохнут воркеры или сам демон
    - как рассчитать, какое кол-во задач в единицу времени оно сможет обрабатывать
    - нуитд

    Дайте пинка в каком-нибудь направлении, может почитать чо можно про это. Спасибо. Извините за сумбур, час ночи чо делать.
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Май 4, 2012, 1:38 д.п., спустя 25 минут 29 секунд

    сумбур
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Май 4, 2012, 2:04 д.п., спустя 25 минут 24 секунды

    gearman?
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz Май 4, 2012, 2:08 д.п., спустя 4 минуты 3 секунды

    ретвитнул три раза по случаю
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 4, 2012, 8:57 д.п., спустя 6 часов 49 минут 41 секунду

    1. писать о наличии таски в базу
    2. запускать воркера посредствам вызова /path/to/php/script $task_id &
    3. он берет из базы нужное и работает в режиме time_limit($max_time(
    4. у задачи есть сохраненные в базу время запуска и вермя "пиздец задача проебана", например +2 минуты. это для уничтожения hold'ов.
    5. по мере появления данных от апи или откуда то еще - пишем в базу "новости", которые и выводит скрипт через ajax.
    6. вместо базы можно юзать любое другое хранилище - по вкусу, я бы использовал чо нить самоуничтожающее строчки, если логи не нужны :)

    аля memcache, redis, apc (олол).

    профит!)

    если юзать редис, то можно там списки заюзать, можно написать php демона, который контроллирует колво запущеных процессов дочерних и запускает новые сли чо, можно заюзать supervisord тоже, по вкусу %)
    Сапожник без сапог
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Май 4, 2012, 10:33 д.п., спустя 1 час 35 минут 34 секунды

    большое количество хуйни в виде трех постов
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Коля Дубр

    Сообщения: 45 Репутация: N Группа: Адекваты

    Spritz Май 4, 2012, 6:47 п.п., спустя 8 часов 14 минут 16 секунд

    по поводу трех постов - у меня и пруфпик во вкладке сохранился: http://blogovo.ru/files/05.12/pyha.gif - скажите спасибо, что я вышел из цикла на третьем шаге :)

    Абырвалг, о, весьма похоже, буду курить ман.

    дуд, хай! спасибо, идея ясна и тоже есть чо покурить =)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 4, 2012, 6:50 п.п., спустя 2 минуты 52 секунды

    Коля Дубр, хай :)
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz Май 4, 2012, 6:52 п.п., спустя 2 минуты 5 секунд

    Это же легендарный Коля Дубр!!
  • Albi

    Сообщения: 23 Репутация: N Группа: Кто попало

    Spritz Май 5, 2012, 3:47 п.п., спустя 20 часов 55 минут 19 секунд

    нахуя скринщот в гифе сохранять бля
  • Коля Дубр

    Сообщения: 45 Репутация: N Группа: Адекваты

    Spritz Май 8, 2012, 2:27 д.п., спустя 2 дня 10 часов 39 минут

    vasa_c, это действительно он. всем бояться.
    Albi, пытался в ворде сохранить но у меня бесплатная версия закончилась не подскажешь где скачать крякнутую я тогда перезалью нормально!

    Короче, я в итоге усиленно курю gearman, если кому интересно. После нескольких часов ебли с консолью он у меня заработал, прикрутил монитор вот такой: https://github.com/yugene/Gearman-Monitor - теперь пытаюсь настроить демона вот такого: http://skahin.blogspot.com/2012/04/gearman.html - еще чуть чуть и можно будет закрыть консоль и начать писать код уже :)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 8, 2012, 2:48 д.п., спустя 21 минуту 15 секунд

    Коля Дубр, стареешь :-))
    Спустя 20 сек.
    даже в тред вернулся ответить :D
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz Май 8, 2012, 10:25 д.п., спустя 7 часов 36 минут 28 секунд

    что-то в той статье кода шибко дохуя. Глянь-ка тут презентацию по нему
    http://ua.magento.com/phpize/dnepro-22-03-12/presentations
  • Коля Дубр

    Сообщения: 45 Репутация: N Группа: Адекваты

    Spritz Май 8, 2012, 2:10 п.п., спустя 3 часа 44 минуты 37 секунд

    Абырвалг, презентацию глянул - спасибо, но там не совсем то. Там подробно расписано, чо делать со сдохшими задачами. А я пытаюсь приготовить приблуду, которая запускает-останавливает воркеров под разные типы задач на основе конфига. То есть там скрипт, который стартуешь из консоли - он демонизируется, читает директорию jobs и под каждый джоб создает еще дочерний процесс, где собственно крутится воркер. Хотя может это все баловство :)
  • LIFF

    Сообщения: 188 Репутация: N Группа: Адекваты

    Spritz Май 11, 2012, 4:51 д.п., спустя 2 дня 14 часов 41 минуту

    Коля Дубр, на PHP точно не рассчитывай с такими задачами -:(
    Спустя 25 сек.
    P.S и в связке сним))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!