Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Naplanovanie cronu cez php

TomasX
verified
rating uzivatele
(4 hodnocení)
19. 4. 2020 09:12:50
u cronu ti to ale také nebude dobře fungovat, cron není proces management, bude ti to tiše umírat a nebude se to spouštět.
Paralelizmus je samozřejmě urychlení, ale používej jednotky souběžných úloh, ne 10tis, tak scheduler v linuxu nefunguje a je to kontraproduktivní, stejně tak nebudeš mít tolik spojení na db.
Udělej si frontu v databázi (tabulka se všemi úlohami a jejich parametry, přidej sloupec s náhodným číslem od 1 do 5, do jendoho sloupce si ukládej datum, kdy byla úloha dokončena. K tomu si udělej php script, který si načte třeba nedokončených úloh 100 úloh, zpracuje, uloží, že je zpracoval a ukončí se. Do cronu si ho dej pětkrát s parametrem od 1 do 5 (podle toho si načte úlohy z db), každou minutu je spušť, použij flock (linuxový příkaz), aby se nespouštěly dokud ještě předchozí běží.
Každý den si jiným cronem přegeneruj tabulku s frontou a dej tam nové úlohy. Crony ti to pak budou postupně po malých kouskách zpracovávat. Je to spolehlivé, máš nad tím kontrolu, můžeš v db sledovat jak se to postupne odbavuje.
19. 4. 2020 09:12:50
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449018
williamolivia250
verified
rating uzivatele
19. 4. 2020 10:22:09
Howdy! This blog post could not be written any better check site! Looking at this article reminds me of my previous roommate! He always kept preaching about this. I am going to forward this article to him. Fairly certain he will have a good read. Thank you for sharing!
19. 4. 2020 10:22:09
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449017
pvaaccs
verified
rating uzivatele
19. 4. 2020 10:44:23
Your style is very unique in comparison to other folks I have read stuff from. click here Thank you for posting when you've got the opportunity, Guess I will just book mark this site.
19. 4. 2020 10:44:23
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449016
indy.cz
verified
rating uzivatele
19. 4. 2020 18:18:37
Na to je lepší použít - nainstalovat si nějaký message queing systém např. rabbitMQ nebo Kafka, než tím zatěžovat cron. Pro obojí je potom podpora v PHP.
19. 4. 2020 18:18:37
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449015
TomasX
verified
rating uzivatele
(4 hodnocení)
19. 4. 2020 18:31:43
kafka nebi rabbitmq ti neřeší jak zprávy zpracovat (konzumovat), na to stejně potřebuješ nějaký cron, php neumí dobře běžet jako daemon.
Nedoporučil bych něco takového použít, kafka bere nemalé prostředky, musíš nějak vyřešit zabezpečení, ve výchozím stavu je vše otevřené do světa a pro tohle použití je to příliš složité.
Databáze je na tyhle účely dostatečná.
19. 4. 2020 18:31:43
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449014
skorozacatecnik
verified
rating uzivatele
20. 4. 2020 13:05:59
Napsal TomášX;1580228
.. php neumí dobře běžet jako daemon.
Tomáši, proč podle tebe nemůže běžet php jako daemon dobře? Nebo co je to "dobře" v tvém pojetí?
20. 4. 2020 13:05:59
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449013
TomasX
verified
rating uzivatele
(4 hodnocení)
20. 4. 2020 14:06:05
Napsal skorozacatecnik;1580368
Tomáši, proč podle tebe nemůže běžet php jako daemon dobře? Nebo co je to "dobře" v tvém pojetí?
není na to určený, budeš narážet na problémy s memory managementem a memory leaky (frameworky vč. nette nebo doctrine to nezvládají, v php 7.4 udělali velký kus práce, ale pořád to není on), je single thread, takže buď přebírá požadavek z venku nebo něco vykonává, nemůže dělat obojí (např. když budeš parsovat 10MB xml 5s, během té doby ti nebude odpovídat na ping a nepoznáš, jestli script je mrtvý nebo něco dělá, to vede k blbému monitoringu), z řady chyb, které vzniknou se neumí zotavit (registrace error handleru je třeba jednorázová, nelze to tak opakovat donekonečna) atd.
Někdo se o to pokouší a pokoušel, ale celý php ekosystém je určený na spot run a podle toho se testuje a vyvíjí. Dělat z něho daemona jde proti větru a zbytečně si přiděláváš práci, přitom jiné jazyky ti nedělají bariéry a umí to dobře s pár řádky kódu (node.js, python, go, java/scala). Dělat z konkrétního jazyka univerzální jazyk na vše přináší vždy určité problémy, nechci tím říct, že php je špatný jazyk, jen tohle neumí a není to špatně, od toho tady je apache/nginx/cgi/fpm, která to řeší.
20. 4. 2020 14:06:05
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449012
skorozacatecnik
verified
rating uzivatele
20. 4. 2020 15:04:52
Napsal TomášX;1580374
není na to určený, budeš narážet na problémy s memory managementem a memory leaky (frameworky vč. nette nebo doctrine to nezvládají, v php 7.4 udělali velký kus práce, ale pořád to není on), je single thread, takže buď přebírá požadavek z venku nebo něco vykonává, nemůže dělat obojí (např. když budeš parsovat 10MB xml 5s, během té doby ti nebude odpovídat na ping a nepoznáš, jestli script je mrtvý nebo něco dělá, to vede k blbému monitoringu), z řady chyb, které vzniknou se neumí zotavit (registrace error handleru je třeba jednorázová, nelze to tak opakovat donekonečna) atd.
Někdo se o to pokouší a pokoušel, ale celý php ekosystém je určený na spot run a podle toho se testuje a vyvíjí. Dělat z něho daemona jde proti větru a zbytečně si přiděláváš práci, přitom jiné jazyky ti nedělají bariéry a umí to dobře s pár řádky kódu (node.js, python, go, java/scala). Dělat z konkrétního jazyka univerzální jazyk na vše přináší vždy určité problémy, nechci tím říct, že php je špatný jazyk, jen tohle neumí a není to špatně, od toho tady je apache/nginx/cgi/fpm, která to řeší.
Budu s tebou souhlasit, že PHP na daemony není úplně dělané (viz druhý odstavec), ale jako CLI s tím není moc problém. Pokud forkujes procesy, tak se dají sledovat, spravovat i monitorovat.
Nemohu ale do velké míry souhlasit s tím prvním odstavcem. Je sice pravda, že je docela těžké udržet memory (u mě třeba cca 20M na proces), ale jde to, jen člověk musí být pečlivý při psaní kódu a čistit paměť, kde to jen jde.
Co se týká využití zdrojů (procesorů/threadů), tak ano, každý script využije jeden thread, ale zase jsem u toho CLI a forku, kde může jeden script obstarávat požadavky a další procesy mohou pracovat s daty, které předávají zpět k odeslání. Jako další (ne moc čisté řešení) je mít opět jeden controller script, který volá další úlohy (workery) klasicky přes URL. Dané scripty zpracují data a uloží je třeba do REDIsu, odkud si je hlavní script vytáhne a odešle.
Z vlastní zkušenosti vím, že script spuštěný jako CLI dokáže odbavit tisíce zpráv za sekundu. Musí ale delegovat složité úlohy dalším procesům.
Každopádně jsou jiná řešení (jazyky), které jsou na podobné věci šikovnější, v tom máš naprostý recht. Jen mi přišlo neobjektivní to Tvé "absolutní zavrhnutí".
Takže s tebou souhlasím tak napůl no.
Každopádně díky za názor.
20. 4. 2020 15:04:52
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449011
TomasX
verified
rating uzivatele
(4 hodnocení)
20. 4. 2020 15:27:45
striktně jsem to zavrhoval jen z kontextu vlákna, radit zde použití php jako deamona mi nepřipadá košér a není dostatečný prostor to odůvodnit, proto jsem napsal "neumí dobře", to je striktně za to přesný popis :).
Memory si sice dokážeš sám čistit, ale když použiješ balíček/framework třetí strany, jsi uvězněný v pasti. Forkování procesů, ipc komunikace (ať už přes shmop nebo stream_socket_pair) je vyšší dívčí pro zdejší publikum. Stejné je to i s těmi crony, ono to jde i pro 10 000 úloh, freebsd má třeba u cron daemona pro tyhle účely náhodné zpoždění v ms, aby vše nespustilo najednou a nedošlo k fork bombě, stejná věc se usleepem lze zajistit i pro linux atd.
Na tyhle účely má třeba php tak špatně udělaný subprocess managenet, že stejně všichni končí u proc_open a ve smyčce si pulují stavy jednotlivých procesů a hlídám je. Další zádrhel jsou statické velikostí io bufferů a pro jejich změnu musíš rekompilovat php. Tohle je už za rámec většiny php programátorů, sám víš kolik jsi s tím měl práce a že to není sranda. Historie mě naučila, že raději je potřeba zavčasu na tyhle slepá místa upozornit a nedoporučit.
PHP v roli daemona používá několik velkých českých ecommerce řešení a je to drahé produkční řešení, jakýkoliv debugging je obrovský problém, heapdumpy jsou skoro k ničemu, xdebug má vysoké nároky a na produkci způsobuje sám pády. Já z toho mám aspoň zakázky, ale nechtěl bych takovou věc mít doma :).
20. 4. 2020 15:27:45
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449010
skorozacatecnik
verified
rating uzivatele
20. 4. 2020 18:21:33
Jsi to krásně doplnil Tomáši. Ten debugging je asi největší peklo a admini ze mě vůbec nebyli šťastní. Když já mám to PHP tak rád... :)
20. 4. 2020 18:21:33
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449009
hm
verified
rating uzivatele
(20 hodnocení)
20. 4. 2020 18:33:17
taky sem dlouho mel PHP rad, ale uz jedu nodu... a nevracel bych se ani za nic...
20. 4. 2020 18:33:17
https://webtrh.cz/diskuse/naplanovanie-cronu-cez-php/strana/2/#reply1449008
Pro odpověď se přihlašte.
Přihlásit