Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: vyvojar 23. 09. 2012, 11:52:18

Název: Škálovatelnost webové aplikace
Přispěvatel: vyvojar 23. 09. 2012, 11:52:18
Dejme tomu, že mám web aplikaci, který už nezvládá počet klientů. Jak se dá takový aplikace pak škálovat? Tzn. si koupím třeba další HW, nainstaluji tam tu samou aplikaci a nějak si pořeším, aby část klientů se připojovala přes jednu mašinu a část přes druhou? Tzn. pak víc mašin sdílí třeba tu samou ip? To je blbost ne? Neznáte nějaké dobré materiály ohledně toho? Třeba dejme tomu, že budu velký optimista už dopředu udělám aplikaci třeba v node.js, jako db zvolím HBASE, co používá facebook, všechno jsou to prý dobře škálovatelné technologie, ale stejně když na to přijde, tak nebudu vůbec vědět, co mám jako dělat.
Název: Re:Škálovatelnost aplikace
Přispěvatel: Mirek Prýmek 23. 09. 2012, 11:55:40
http://lmgtfy.com/?q=scalable+web
Název: Re:Škálovatelnost aplikace
Přispěvatel: vyvojar 23. 09. 2012, 12:10:22
Dík, já to chci od místních expertů :)
Název: Re:Škálovatelnost aplikace
Přispěvatel: host 23. 09. 2012, 16:20:51
zdravim, trochu treba upresnit, ci web server nestiha vybavovat poziadavky, alebo nestiha databaza(storage). Velmi vseobecne riesenie je loadbalancing, tj. predradene proxy pred niekolkymi webservermi. Lenze toto nepomoze ak nestiha databazova vrstva. V takom pripade pomoze skor ladenie db a vykonny storage, alebo tiez zmena db servera. Chcelo by to viac info a statistiky vytazenia servera.
Název: Re:Škálovatelnost aplikace
Přispěvatel: Ivan 23. 09. 2012, 17:12:52
Bud uz vis kde je bottleneck anebo si precti neco o "premature optimization".
Název: Re:Škálovatelnost aplikace
Přispěvatel: mon 23. 09. 2012, 21:52:24
toho je naozaj vela, vsetko zavisi od aplikacie a jej typu, potrieb, ceny a milion inych veci.

niekedy je lepsie vertikalne skalovat (pri platenych produktoch sa to niekedy viac oplati), teda kupit lepsi stroj (viac cpu, viac ram) alebo horizontalne (viac strojov) a tam je vela moznosti, v zavislosti co nestiha. Bud web vrstva, logicka vrstva, databazova vrstva, vsetko sa zvykne mnozit ale potom treba riesit synchronizaciu (co moze spomalovat aplikaciu ak sa spravi skoro a aplikacia nevyzaduje horizontalne skalovanie).
tam je moznosti vela, bud spomenuty reverzny proxy pre web
pre db napr. replikacia (master/slave , jeden zapisuje a na citanie je viac strojov, alebo nieco ako oracle rac, a ine) alebo rozdelit databazu (tiez vertikalne, horizontalne)
pre app vrstvu treba niekedy distribuovanu alebo replikovanu cache
a tak dalej a dalej... :)
Název: Re:Škálovatelnost webové aplikace
Přispěvatel: Kit 24. 09. 2012, 13:11:21
Někdy pomůže reverzní proxy. I na stejném stroji dokáže zvýšit výkon aplikace. Pro více strojů může tato proxy dělat load balancing, IP zůstane jen jedna. Jak už ale bylo uvedeno: Pokud úzkým hrdlem je databáze, nepomůže to.

Často se zapomíná na snížení limitu počtu současně připojených klientů. Defaultní hodnoty nastavené v Apache bývají příliš vysoké a server se uswapuje.
Název: Re:Škálovatelnost webové aplikace
Přispěvatel: DK 24. 09. 2012, 13:21:05
Kit: proto radim nepouzivat swap na takovych serverech :) uz dvakrat se mi stalo, ze uplne kleknul server (ani ssh neslo), protoze se uswapoval (bohuzel server nebyl v me rezii)
Název: Re:Škálovatelnost webové aplikace
Přispěvatel: Tomáš Crhonek 24. 09. 2012, 13:25:20
Zřejmně je to dotaz v teoretické rovině. Tak proč nediskutovat.

Je třeba si uvědomit, co taková aplikace potřebuje. Pokud budu vycházet z klasické trojvrstvé struktury: persistentní úložitště (systém souborů, databáze), aplikační vrstva na serveru (PHP) a tenký klient (webový prohlížeč), tak:

Pokud nestíhá úložiště, je možné nastadit replikace dle typu zvoleného úložiště. SQL lze snadno replikovat jako master - slave. Dotazy mohou jít na farmu slavů, inserty na master. Nutná přestavba aplikace, pokud se s tím nepočítá přímo v návrhu. Některé KV DB umí i replikaci master-master, pochopitelně s omezením dle CAP. Storage vrstva se může také realizovat čistě jako distribuovanou memory DB (Redis) a persistenci řešit jinak (nebo nijak a spoléhat se jen na vzdálené lokality).

V případě souborů na disku existují clusterované systémy souborů (GlusterFS). Každá aplikace by měla mít přístup ke všem souborům. (Opět, jako u každé distribuované aplikace, je zde omezení dané CAP.)

Též je možné mezi storage a aplikaci nasadit cache (memcached). Nejrychlejší dotaz je takový, který se nemusí vykonat. Toto je asi nejčastější optimalizace na straně storage. Nějaká forma cache mezi diskem a aplikací.

Aplikace může běžet ve více instancích, pokud je zachována konzistence úložiště.

Před aplikacemi může běžet reverzní cachující proxy (squid, nginx). Což je nejčastější optimalizace mezi webovým serverem a webovým klientem. V případě více instancí aplikace lze před farmu aplikačních serverů nasadit také loadbalancer. V takovém případě může mít loadbalancer klidně jednu IP a za ním být spousta instanací aplikace. Loadbalancer může být také ve více instancích pro high avail.

Jinými slovy, pokud je zachována konzistence dat na straně storage, aplikace může běžet v mnoha instancích za jedním nebo více loadbalancerů.
Název: Re:Škálovatelnost webové aplikace
Přispěvatel: to_je_jedno 24. 09. 2012, 15:27:08
http://droplabs.net/video/scaling-grammycom-at-the-high-performance-drupal-meetup
Je to sice konkretni pro jednu aplikaci, ale je tam nekolik veci, ktery lze obecne vyuzit (cdn, load balancer, proxy, cache...)

obecne: pouzit nejaky rozumny framework s moznosti reverse proxy a obecnyho cache backend s moznosti pouzit cokoliv(memcached, apc, mongo atd.)