Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
В представленном виде есть одна неопределенность, а именно — повторное
выполнение задачи в случае, если она уже начата. Это становится особенно
актуально, если задача «сложная» и требует несколько секунд на ее реализацию.
Таким образом создается проблема повторного выполнения:
● Функция solve_one_task() уже запущена, но еще не завершила свою работу;
● Следовательно, в базе данных до сих пор задача отмечена как невыполненная;
● Следующий цикл опять получит эту задачу и запустит функцию solve_one_task()
еще раз, с этой же самой задачей.
Разумеется, это можно решить, например, изменением какого-то статуса в базе данных по этой задаче.
Но мы не будем нагружать базу данных: исходя из моего тестирования, MYSQL
может принять запрос, но обработать его не сразу. Различие даже в 0.5 секунд
может привести к повторному выполнению — что категорически не подходит.
Задачи можно хранить в MSMQ или RabbitMQ.
Выполнять можно через spring-integration или apache camel и celery: там везде уже стоит защита от "повторого выполнения"
но пыхоблядь слишком тупа, и думает, что кроме mysql и крона ничего нет на свете
наверняка там еще есть свой класс Db
Разумеется там всё есть, но пыхеры этим не пользуются.
Брейн демдж их настолько глубок, что им физически не представить себе что задачу можно решить чем-то кроме крона и майсикула.
Главная проблема пых же не в том, что он язык говеный (питон тоже так себе язык местами), а в том, что пхп портит мозги.
Эти говнорешения с кроном и мускулем он же не с потолка взял: они описаны в книгах, на форумах, всё коммунити о нем знает. Говно -- часть философии
Селера кстати может привести к малость оверинжерингу. Допустим, ты берешь селеру с RabbitMQ.
Rabbit писан на эрланге. Эрланг запускает виртуальную машину (BEAM) -- тн ноду. Внутри ноды запускает приложение.
Ноды могут общаться между собой по RPC, однако списоком нод на хосте заведует портмаппер epmd.
1. epmd открывает порт
2. каждая нода на хосте котрывает порт для RPC, и регистрируется в epmd
3. RabbitMQ открывает порт для AMPQ и опцилаьно плагин для веб-морды открывает еще одинр порт
И того у нас два процесса и четыре порта
(rabbitmqctl запускает еще одну BEAM, через epmd находит ноду с rabbit, и шлет ей комманды)
Внутри ноды работают rabbitmq, мониторинг, mnesia (в ней кроль хранит настройки и очередь сообщений) да еще и мнезийная папка зависит от имени хоста (нода@хост) так что переименовав хост можно пососоать писон.
Вся это мандала ради того, чтобы селера своим воркерам (которых может быть вообще один) ставила задачу.
Ну ёбушки-воробушки, это вы бы еще кафку сюда притащили
> Для некоторых задач по автоматизации бизнес процессов максимально допустимая задержка часто составляет не более чем 1-1.5 секунды.
- интересно, что это за задачи? Выгружать в csv данные о том, сколько галерные макаки мышкой не щёлкали, сидя на удалёнке?
Именно поэтому я против «MYSQL».
Задачи можно хранить в MSMQ или RabbitMQ.
Выполнять можно через spring-integration или apache camel и celery: там везде уже стоит защита от "повторого выполнения"
но пыхоблядь слишком тупа, и думает, что кроме mysql и крона ничего нет на свете
наверняка там еще есть свой класс Db
https://www.php.net/manual/en/intro.mqseries.php
https://www.php.net/manual/en/book.sem
https://www.php.net/manual/en/book.gearman.php
https://www.php.net/manual/en/book.stomp.php
https://framework.zend.com/manual/1.12/en/zend.queue.introduction.html
http://web.archive.org/web/20180418234618/rediska.geometria-lab.net/documentation/integration-with-frameworks/zend-framework/zend_queue-adapter/
Брейн демдж их настолько глубок, что им физически не представить себе что задачу можно решить чем-то кроме крона и майсикула.
Главная проблема пых же не в том, что он язык говеный (питон тоже так себе язык местами), а в том, что пхп портит мозги.
Эти говнорешения с кроном и мускулем он же не с потолка взял: они описаны в книгах, на форумах, всё коммунити о нем знает. Говно -- часть философии
Rabbit писан на эрланге. Эрланг запускает виртуальную машину (BEAM) -- тн ноду. Внутри ноды запускает приложение.
Ноды могут общаться между собой по RPC, однако списоком нод на хосте заведует портмаппер epmd.
1. epmd открывает порт
2. каждая нода на хосте котрывает порт для RPC, и регистрируется в epmd
3. RabbitMQ открывает порт для AMPQ и опцилаьно плагин для веб-морды открывает еще одинр порт
И того у нас два процесса и четыре порта
(rabbitmqctl запускает еще одну BEAM, через epmd находит ноду с rabbit, и шлет ей комманды)
Внутри ноды работают rabbitmq, мониторинг, mnesia (в ней кроль хранит настройки и очередь сообщений) да еще и мнезийная папка зависит от имени хоста (нода@хост) так что переименовав хост можно пососоать писон.
Вся это мандала ради того, чтобы селера своим воркерам (которых может быть вообще один) ставила задачу.
Ну ёбушки-воробушки, это вы бы еще кафку сюда притащили
Какая автоматизация бизнес-процессов )))
https://www.freedesktop.org/software/systemd/man/systemd.timer.html
https://www.freedesktop.org/software/systemd/man/systemd.time.html
А вообще конечно
http://www.celeryproject.org/
и в пизду крон
- интересно, что это за задачи? Выгружать в csv данные о том, сколько галерные макаки мышкой не щёлкали, сидя на удалёнке?
Правда кажется что крон+пхпскрипт это не совсем про супербыстрый перформанс)
https://www.fiverr.com/romanruzin
I will create online calculator for website
STARTING AT$35
i will create cartoon avatar profile picture
сразу видно успешного программиста