1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
1 | |
Как правильно организовать алгоритм по работе с Заданиями?27.07.2015, 07:55. Показов 750. Ответов 12
Метки нет (Все метки)
Добрый день,
А существует ли в природе Таскер(выполнение задач), но работающей как бы не совсем на основе Крона, а с помощью одного пхп файла и базы данных MySQL? Допустим, Крон дёргает пхп файл раз в 1 минуту (это понятно как сделать), а этот пхп файл проверяет базу данных на предмет Заданий, и далее сам этот же скрипт их выполняет. Т.е. скриптом из базы данных просто берутся нужные параметры для выполнения Задания. С одной стороны вроде бы не сложно, с другой не совсем ясно как. К тому же, если допустим у нас будет 60 заданий, и все они будут выполняться по очереди, то задание будет выполняться 1 раз каждый час, т.к. будет идти очередь. Это очень долго. Если же для сокращения времени, брать на выполнение сразу несколько заданий по такому принципу, то по идее может лечь хостинг/сервер или скрипт просто не отработает. Как это делать правильнее? Или быть может есть готовые таскеры? Добавлено через 7 минут да... смысл чтобы после завершения последнего Задания, цикл начинался снова с 1-го Задания.
0
|
27.07.2015, 07:55 | |
Ответы с готовыми решениями:
12
Как правильно организовать класс по работе с БД Как правильно организовать алгоритм вычисления переменных Как правильно организовать БД? Как правильно организовать БД? |
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
|
|
27.07.2015, 10:34 | 2 |
Добрый день, создать такой "Таскер(выполнение задач)" можно даже без особых проблем, суть такова - каждый час крон запускает php скрипт он же в свою очередь первым делом проверяет по базе задания узнаёт их кол-во и выполняет в цикле, только нужно будет написать правильный алгоритм выполнения задания и тогда будет все отлично!
1
|
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
27.07.2015, 10:45 [ТС] | 3 |
Raider_, Минус предложенного мной алгоритма, что если Заданий например 60, то выполнить все сразу в цикле, возможно просто не даст хостинг/сервер. Так как скрипт будет работать долго, а во вторых будет нагрузка на процессор.
А если выполнять по очереди(раз в минуту одно задание), то будет слишком долго выполнять 60 заданий, по очереди – делать каждое раз в минуту, это целый час на обход всех 60-ти заданий, а если их 120?? В итоге мы получим, что задание выполняется раз в час (если их 60, и раз аж в два часа, если их 120)! А хотелось бы раз в 5 минут или 10. Тут наверно подход многопоточности нужен. Добавлено через 2 минуты дело в том, что хотелось бы выполнять каждое задание раз в 5 - 10 минут.
0
|
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
|
|
27.07.2015, 10:51 | 4 |
тогда в таком случии нужно несколько файлов обработчиков один запускаться каждые 5 минут другой каждые 7 чтоб конфликтов не было (это самый простой способ) а задания чтоб допустим не все сразу выполнялись а только часть просто общее кол-во делим допустим на 2,4,5,6 и т.д это уже логика и тут надо просчитывать все
1
|
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
27.07.2015, 10:52 [ТС] | 5 |
сразу? если Заданий 80. Каждое может выполняться по 5 секунд максимум. Это 400 секунд = 6 минут. Какой хостинг даст так работать? При том, что если они еще ресурсоёмкие, то нагрузка на процессор же.
0
|
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
|
|
27.07.2015, 11:05 | 6 |
Ну в такой ситуации сложно найти компромисс! Тут нужно чем то жертвовать что бы добиться успеха то есть:
Минимальная нагрузка на сервер - малая скорость выполнения Быстрая скорость обработки и выполнения - большая нагрузка на сервер Нужно найти что то среднее а для это нужно из общего числа заданий брать определенное кол-во чтоб быстро выполнить и не нагрузить
1
|
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
27.07.2015, 11:11 [ТС] | 7 |
Raider а чтоб именно каждые 5 минут, так получается вообще никак не продумать?
Просто, если у нас 80 Заданий, с каждым проходом выполняем по 10. Это 8 файлов-обработчиков: 1-ый каждые 5 минут 2-ой каждые 6 минут 3-ий – 7 4-ый – 8 5-ый – 9 6 –ой -10 7-ой - 11 8-ой – 12 каждые 6 минут и 12 минут, они ж пересекутся тогда. А если брать только чётные и не чётные, то получается за раз надо брать больше заданий, а не 10. А больше заданий, опять упрёмся во время выполнения скрипта.
0
|
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
|
|
27.07.2015, 11:20 | 8 |
смотри можно сделать так то что когда добавляются задания в бд у них есть поле допустим "num_obr" номер обработчика который должен выполнить это задания и все тогда пусть все 15 обработчиков в раз запустятся то конфликта не будет каждый выполнит своё
Добавлено через 2 минуты так же можно после того как обработчик взял задание чтоб он помечал его в бд то что взял и выполнит он! Но это скользкая дорожка могут быть конфликты
1
|
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
27.07.2015, 11:26 [ТС] | 9 |
думал такой вариант тоже, но как раз если они сразу все запустятся, то да, могут быть накладки.
в принципе, у меня был вариант еще брать все задания разом! и как говоришь, выполнять в цикле, но после каждого Задания помечать в БД, что это Задание выполнено. А если скрипт прервал свою работу по какой-то причине, то предпоследнее задание-то он успел записать что оно выполнено. И второй старт скрипта возьмёт опять ВСЕ задания, за исключением тех, которые с пометкой "выполнено". Вроде ничего? Хотя я лазил как-то по коду какого-то Фреймворка, где похожие Кроновские дела реализовывались многопоточностью, и какая-то там была реализация на Cron Threaded процессах.
1
|
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
|
|
27.07.2015, 11:39 | 10 |
С ними я не работал и не хочу почему то мне они не нравятся!
да все верно так будет отлично Добавлено через 6 минут не а смотри заданий та все равно допустим 120, их так же по чуть чуть выполнять нужно не все сразу!
1
|
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
27.07.2015, 11:41 [ТС] | 11 |
да нет, они не связаны друг с другом, если они выполнятся все сразу это даже хорошо, только вот хостер не даст выполнить всё сразу скорее всего, не понравится ему такая нагрузка и время работы скрипта
0
|
> /dev/null
286 / 119 / 86
Регистрация: 14.05.2014
Сообщений: 767
|
|
27.07.2015, 12:22 | 12 |
AlexSokolov, а не легче уже тогда купить VPS и настроить там веб сервер? Сейчас есть очень выгодные тарифы и по цене выйдет как за хостинг.
1
|
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
|
|
27.07.2015, 12:58 [ТС] | 13 |
bleef159 безопасность не та, надо быть очень админом, линуксы юниксы и т.д.
Был опыт года 3 назад, c самым не дорогим хостингом, который давал впс, но там слишком жестко давили ресурсы, сервер еле жил, будучи не имея никакой по сути нагрузки. Может конечно уже обстановка поменялась. А так да. Просто сама логика не совсем ясна, какая будет прям наиболее оптимальна. И как я видел по коду других людей, всё это делали через процессы Крона, псевдомультипоточность и т.д., как-то там всё не просто было. Но там были более объёмные дела, выполнение 10 000 заданий например.
0
|
27.07.2015, 12:58 | |
27.07.2015, 12:58 | |
Помогаю со студенческими работами здесь
13
Как правильно организовать? Как правильно организовать событие Как правильно организовать магазин Как организовать правильно запрос Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |