|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
|
Alix36 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Предположим есть такая задача.
В неком хранилище (Таблица в базе, стэк в кэше) храниться список отложенных задач. Нужно написать к ним обработчик. Вопрос как лучше это сделать. Варианты 1) Хранилище: БД? память? файл? Поскольку задачи могут быть запланированы даже на соседние секунды, то запрос к бд придется делать ежесекундно, что может пагубно сказаться на БД, даже если каждый запрос будет возвращать по 2 строки. С файлом еще хуже, мало того что может сильно обидеться контроллер диска на ежесекундное чтение/добавление, так еще и интерфейс обращение не такой удобный. Выбор однозначно память? или все таки вариант с БД имеет право на жизнь? 2) "Выполнятор": Cron, демон Насколько плох ежесекундный вызов cron'ом какого-либо скрипта? Хотя плюсы демона мне тоже не очевидны. Как стоит реализовывать демона, выполняющего отложенные таски? Как вечный цикл, проверяющий "просроченные" таски? тогда обращение к хранилищу будет чаще чем ежесекундно... Даст ли реализация с демоном какие-либо преимущества? или все же демоны хороши исключительно для отлова входящих "сигналов"(пакетов, сообщений) -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
ivashka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Как по мне то однозначно БД только таблица MEMORY (если нужно что бы надежность была выше, задания хранятся в обычной таблице, а при старте скрипта копируем в таблицу мемори).
В таком случае будет и интерфес удобный, и скорость норм, и хард дольше и лучше жить. На счет реализации, то как я понимаю будет пхп, тогда вариант с демоном. Логика следующая, запускается демон, смотрит есть ли задачи к выполнению, если есть, передает берет задачу, форкается и форк исполняет задание, главный процесс смотрит дальше есть ли задачи. Такой вариат у меня работает без перерыва уже 9 месяц. |
|||
|
||||
Alix36 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Вот тут не понял, зачем вторая таблица? Вот это тоже интересный моменет. "Смотреть, есть ли задачи" получается можно только выборкой из БД. Тогда в главном треде получаем while(1) с селектом внутри... Соотв. селект будет выполняться до нескольких десятков раз в секунду. --- Может тогда лучше так. Главный тред - хранит в памяти всю очередь. Зациклен и вызывает в отдельных тредах обработку каждого "подоспевшего" таска. Так же главный тред разово стартует вторичный тред, который так же живет "вечно", выбирает и добавляет в основную очередь новые таски и sleep'ает себя на 30* секунд. *- минимальное время "задержки" выполнения таска. Это сообщение отредактировал(а) Alix36 - 10.7.2011, 21:37 -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
ivashka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
По поводу второй таблицы:
если у вас сервер упадет, все данные с мемори удалятся, соответственно и выходит 2 таблицы. Одна допустим innoDB вторая Memory. Выгребать все таски не знаю стоит ли, дело в том, что в таком случае вы не сможете добавить заданий во время работы. Лучше выгребать хотябы по 5, или другое количество, но не всю, хотя вариант, выгребать все, проходится, слипнуться, выгребать все и т.д. вполне вменяем. А зачем вторичный процес держать вечно, лучше форкать, одно задание одному ребенку. |
|||
|
||||
solenko |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Это задачи, которые нужно выполнять "как только получится", или "строго по расписанию"? Если как только получится -- AMQ -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
Alix36 |
|
||||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Я имел ввиду, что если у нас появляется inno-таблица то теряется смысл memory-таблицы. Зачем дублировать информацию, если и так уже храним в стабильной таблице.
как только задача "просрочилась") В любом случае вопрос именно в решении на php, а не в отдельном демоне. -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
||||
|
|||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
почему? просто интересно в принципе неплох. cron как таковой очень мало нагружает систему. и уж по крайней мере не надо думать о "тредах и слипах" cron+БД+скрипт на любом языке позволят решить задачу быстро. если упрется в эффективность, тогда рассматривать другие варианты такое решение позволяет провести быстрое прототипирование, сосредоточиться на главном. а что известно про задачи и их количество? скажем, если задач немного, но они ёмкие, механизм вызова не влияет на загрузку, и наоборот про БД думаю беспокоиться не стоит, её для того и придумали, штоб работала. ежесекундный запрос для базы, возвращающий 2 короткие записи - сущий пустяк. к тому же в таком режиме оно вероятно в кэше поселится. |
|||
|
||||
Alix36 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
форкать все равно нужно будет, если будут массивные задачи. и по несколько в секунду, их нужно разносить на форки. или каждую секунду выбирать по 1 таску, тогда получим накопление очереди, точнее можем получить вопрос просто в основном теоретический. Просто ради того, что-бы узнать что можно, что нельзя и что лучше. -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
srt |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 13.5.2008 Репутация: нет Всего: 1 |
Alix36, как тебе удобно, так и сделай
крон или крен - пофик |
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
||||
|
||||
srt |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 13.5.2008 Репутация: нет Всего: 1 |
отложенные задачи - отложенные задачи
реализовать либо по времени либо по событию ну дык |
|||
|
||||
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |