Diskuze: Složitý skript náročný na výkon pro web server s administrací

Webové servery Složitý skript náročný na výkon pro web server s administrací

Avatar
Grimor
Člen
Avatar
Grimor:

Ahoj,

mám službu, která každý den v určitou hodinu zpracuje několik webových stránek a naplní informacemi databázi, kterou později pomocí cizího API odešle dál. Je to proces, který je docela náročný na výkon. Zatím mám ten skript napsaný v PHP a spouštím ho na lokálním WAMPu, ale i tak jeho zpracování docela dlouho trvá (asi 30 sekund na jednu stránku).

Myslíte že je to správný postup? Může PHP skript, který bude součástí celého web serveru s administrací výkonově stačit, aby byl každý den v určitou hodinu spouštěn?
Nemám použít ještě nějaký jiný server, který bude pouze pro ten skript a pracovat v jiném, snad výkonnějším jazyce?

Předem děkuju za odpovědi.

 
Odpovědět 7.8.2015 13:03
Avatar
Jan Barášek
Redaktor
Avatar
Jan Barášek:

Ahoj,

co to udělat tak, že si práci rozložíš a budeš ty stránky zpracovávat průběžně během celého dne? Pak nebude jednorázově taková zátěž a bude se to všechno hezky stíhat.

Jinak se mi 30 sekund zdá opravdu moc, co všechno tam děláš? Stažení stránky, zpracování a volání API by se běžně mělo stihnout pod 2 sekundy, v extrémních případech max. 5 sekund.

Nahoru Odpovědět  +2 7.8.2015 13:31
Chci naučit počítače přemýšlet a změnit tak svět vyhledávání.
Avatar
Grimor
Člen
Avatar
Odpovídá na Jan Barášek
Grimor:

Ono to, že se to v tu jednu hodinu stane jak tak trochu účel. Jeden typ uživatelů musí do té hodiny připravit podklady ke zpracování pro odeslání druhému typu uživatelů. Ono to musí celou stránku přeparsovat a přefiltrovat informace v ní - používám k tomu http://simplehtmldom.sourceforge.net/ . Pak těmi informacemi naplní databázi pomocí údajů, které zadala první skupina uživatelů.

 
Nahoru Odpovědět 7.8.2015 13:58
Avatar
Grimor
Člen
Avatar
Odpovídá na Grimor
Grimor:

Nevím jak dlouho to může trvat na nějakém externím web serveru, když jsem ten parser použil u jednoho jiného projektu, tak místo mých 10ti sekund mu to trvalo 2 sekundy u cizího hostingu.

Myslíte že je tohle správný postup nebo existuje nějaký způsob jak to jinak optimalizovat za těchto podmínek?

 
Nahoru Odpovědět 7.8.2015 14:02
Avatar
mkub
Redaktor
Avatar
Odpovídá na Grimor
mkub:

myslim, ze v tomto pripade by mohlo pomoct prekompilacia PHP tak, ako to robi FB, ba dokonca aj vydal na to nastroj a myslim, ze je k dispozicii aj so zdrojovymi kodmi pod opensource licenciou

 
Nahoru Odpovědět 4.9.2015 13:19
Avatar
Richard
Člen
Avatar
Odpovídá na mkub
Richard:

Myslím že po měsíci už to má pořešené :-)
Ta knihovna má velikou režii, taky jsme ji používali, ale museli jsme vyvinout vlastní řešení kvůli výkonu (zlepšení z 160sekund na 23 sekund, nehledě na to že si to vzalo 6x vyšší prostředky).

Ale 30 sekund není na podobný věci nic neobvyklýho, na nějakým normálním serveru by měl mnohem lepší výsledek.

Editováno 4.9.2015 13:40
Nahoru Odpovědět 4.9.2015 13:39
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Grimor
Člen
Avatar
Grimor:

No pořešené to mám jen dočasně, chce to optimalizaci. Už dávno jsem přemýšlel o předkompilováním, ale je to spíše studentský indie projekt a použít hiphop by mohlo být na mně trochu náročné.

Nejsem ještě v PHP moc zdatný, ale neexistovalo by v PHP něco jako multithreading? Nebo nějakým způsobem mít více webserverů pod jednou doménu a každý z nich by byl zodpovědný za jinou část webů, které se zpracují? Taky jsem koukal, že Amazon má nějaké servery na webové aplikace a uložiště (moc dobře tomu ale nerozumím), nemohl by Amazon tímto způsobem nabízet řešení?

Jsem z toho docela zoufalý, brzo by to mělo být v ostrém provozu.

 
Nahoru Odpovědět 4.9.2015 17:56
Avatar
Richard
Člen
Avatar
Odpovídá na Grimor
Richard:

Loadbalancing je řešení, ale myslím dost overkill, alespoň ten opravdovej.
Samozřejmě můžeš rozložit operace na různé servery, tam je to už jen o implementaci.

Multithreading v php je, ale je to taková sranda, určitě se najde lepší řešení.

Jestli rozumím správně, máš jeden php soubor, kterej po spuštění udělá postupně všechny operace? "Multithreadovat" to můžeš jednoduše tak, že budeš mít pro každou stránku jednu instanci - ale pozor, určit správné škálování je věda a mohl by sis uškodit více než pomoct.

Ale jestli máme nějak rozumně pomoct, budeme potřebovat víc detailních informací - klidně i do PM jestli to nechceš mít veřejně, rád pomůžu.

Editováno 4.9.2015 18:12
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 4.9.2015 18:12
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.