Zadejte hledaný výraz...

Online chat a záťaž serveru – ako na to?

perpex
verified
rating uzivatele
(13 hodnocení)
18. 1. 2015 20:39:26
Zdravím,
v jednom projekte potrebujem urobiť online chat a zaujímala by ma teória čo sa týka zaťaženia na server. Ako to býva v praxi realizované. Ide o to že chat funguje na jednoduchom princípe. Niekto napíše správu, tá sa uloží do DB a potom sa zobrazí v chat okne. Teda máme jeden INSERT a jeden SELECT (select napr. ajaxom každý 5s).
No a tu by mohol byť problém, čo ak bude naraz spustených 1000 chat okien (2 užívatelia v jednom, teda 2000 užívateľov), to je 2000 požiadavok na DB (select) plus ďalšie pri INSERTe.
Ako sa toto rieši v praxi?
Napadlo ma, napr. vložiť správu do DB a z DB cronom každých 5s vytiahnuť správy a uložiť ich napr. do TXT súboru (tento súbor by musel byť riešený tak aby sa z neho čítali iba správy ktoré sú pre konkrétnych užívateľov). To by mohlo minimalizovať požiadavky na DB len raz za 5s. Zobrazovací skript by pristupoval k tomu TXT súboru.
Je to vhodné riešenie? Bude menšia záťaž na server? Ako by ste riešili ten TXT súbor (zápis/čítanie)?
Ďakujem za rady.
18. 1. 2015 20:39:26
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083913
Pavel Janků
verified
rating uzivatele
(93 hodnocení)
18. 1. 2015 20:52:47
Co třeba NoSQL databáze? Couchbase ideální.
18. 1. 2015 20:52:47
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083912
Denis Ulmann
verified
rating uzivatele
(9 hodnocení)
18. 1. 2015 20:53:55
pokud ty dotazy budou indexované a nebude to vps 1 jádro za euro, tak ti to zatěžovat nebude, ale podobné věci se řeší mezi různými aplikacemi TCP pakety, které žerou prakticky nula nula nic co se zátěže týče, přes web bych to řešil obdobně, zkus se podívat na node.js, já v tom ještě nedělal, ale na přednáškám jsem to několikrát viděl prezentované a až budu dělat chat na webu tak si to zkusím.
- Když jsem začínal se c# tak jsem hledal nejsložitější řešení a řešil jsem to obdobně, v aplikaci jsem zobrazil webbrowser kde byly všechny okna napsané jako html a k tomu tuny javascriptu, úplně na všechno a dokonce každé 3 sec refresh javascript, který načítal různé změny u uživatelů (on/off) a bylo tam toho více (ta appka je tu http://anti-cheat.cz/navod-anti-cheatu ), co jsem mohl jsem cachoval, databázi jsem měl sestavenou prvotřídně a indexovanou a nežralo mi to taky nic extra. Největší počet online na aplikaci jsem měl kolem 300.
18. 1. 2015 20:53:55
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083911
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
18. 1. 2015 20:55:44
Pokud je nutné ukládat historii chatu, pak se na to používají noSql databáze.
18. 1. 2015 20:55:44
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083910
carlos
verified
rating uzivatele
(19 hodnocení)
18. 1. 2015 21:07:02
Teda nevim co planujes za brutalni zatez ze toto resis.. (muselo by se jednat opravdu o 500+ soucasnych useru, coz asi pri nove spustenem chatu mit nebudes)
Nicmene se to resi websocketem, takze databaze neni bottleneck... bottleneck jsou otevrena spojeni...
Anebo jak bylo zmineno custom skript treba v C++, ktery komunikuje primo na urovni TCP/IP...
18. 1. 2015 21:07:02
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083909
Chat se dnes už neřeší opakovanými dotazy přes AJAX (polling), ale buď přes Websockets nebo Server-Sent Events.
Viz
Zátěž pak závisí na počtu uživatelů, ne na počtu otevřených oken.
18. 1. 2015 21:11:08
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083908
Fido123
verified
rating uzivatele
(13 hodnocení)
18. 1. 2015 21:27:44
Zbytečně stahuješ kalhoty, když brod je ještě daleko. Programuj proti interfejsům a ne proti konkrétním implementacím a když někdy nastane problém, tak ho snadno vyřešíš.
18. 1. 2015 21:27:44
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083907
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
21. 1. 2015 16:36:04
Napsal Martin Schlemmer;1159470
Chat se dnes už neřeší opakovanými dotazy přes AJAX (polling), ale buď přes Websockets nebo Server-Sent Events.
To jak se to řeší není o tom, co je zrovna v módě. Mezi ajaxem a server-sent events je rozdíl v generovaném trafficu (SSE generuje menší traffic), ale rozdíl je také v zátěži serveru. SSE (v kombinaci s Apache) udržuje otevřené spojení s každým klientem (a tedy i nové vlákno na každé spojení, toto řeší úsporněji třeba nginx), ajax spojení neudržuje (v závislosti na nastavení keep-alive). Takže nelze říct, že jedna z technologií je lepší než druhá, resp. že jedna bude vždy úspornější než druhá.
21. 1. 2015 16:36:04
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083906
Nevím, proč mluvíte o módě. Pro každý úkol existují správné a špatné nástroje.
AJAX polling je pro chat špatný nástroj, když existují způsoby, jak novou informaci dostat ke klientovi, aniž by se musel pořád dotazovat.
To, že musíte pro push technologie správně nastavit server, je pravda. Apache už má roky modul MPM, takže už také nepotřebuje jedno vlákno pro jedno spojení.
U SSE je dobré sdílet spojení napříč panely prohlížeče pomocí Shared Web Workerů a nezapomenout uzavírat klientem ukončená spojení (viz diskuse pod tímto článkem).
21. 1. 2015 17:36:13
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083905
Václav Mach
verified
rating uzivatele
(13 hodnocení)
21. 1. 2015 18:11:25
Why The Hell Would I Use Node.js? A Case-by-Case Tutorial
dost dobré intro do problému
21. 1. 2015 18:11:25
https://webtrh.cz/diskuse/online-chat-a-zataz-serveru-ako-na-to/#reply1083904
Pro odpověď se přihlašte.
Přihlásit