Webes alkalmazásoknál (is) egyre fontosabb téma a skálázódás, gondoljunk csak a Twitter szenvedéseire. Mi ez, hogyan, mik vannak? Megpróbállak képbe hozni és ráirányítani a kapcsolódó témákra, megoldásokra, technikákra.
Fontos: a skálázódás nem azt jelenti, hogy az oldalad minél kevesebb milliszekundum alatt szolgálódjon ki, nem arról van szó, hogy minél gyorsabb legyen. Egy csak teljesítményre optimalizált oldalnál óhatatlanul lesz egy plafon, aminél több látogatót egy időben nem fogsz tudni kiszolgálni.
A skálázódás azt jelenti, hogy egy ésszerű, de nagyon tág határon belül bármilyen terhelést képes vagy kezelni és kb. ugyanolyan (gyors) válaszidőket produkálni. Sok az átfedés a teljesítményre (gyorsaságra) optimalizálással, de nem teljesen ugyanaz.
Ökölszabályként azt javaslom, hogyha eléred a "szempillantás" sebességet (> 0.1s), akkor utána gondolj a skálázódásra és csak aztán próbálj meg még lejjebb menni (jellemzően > 0.01s lenne ideális), hogy minél kevesebb legyen a szerverköltség.
Természetesen mindig gondolj a célcsoportra és így a várható terhelésre, ahhoz lődd be az ügyet. Pölö hazai projekteknél általában elég teljesítményre gyúrni, nem kell skálázgatni.
Ma ott tartunk, hogy a proci, tárhely és memória költsége nagyon olcsó, újabb és újabb (jellemzően virtuális) szervereket olcsón lehet indítani. A legtöbb területen viszonylag egyszerű, kész megoldások állnak rendelkezésre, például:
Alkalmazás-kiszolgálókat (PHP, Rails, satöbbi) könnyű indítani és nincs skálázódási gond, hiszen mind ugyanazt csinálja. A terhelés-elosztásra egész jó load-balancerek vannak. Statikus fájlokat könnyű kiszolgálni, gondoljunk csak az S3-ra az Amazontól.
A legnagyobb problémák: adatbázis-kezelés és live video stream kiszolgálás.
Adatbázis-kezelésnél az olvasásokra megoldást kínál a replikáció és az elosztott cache, írásra viszont csak a sharding marad. Ezek bonyolult ügyek, nincs "mindenre jó" trükk, alkalmazásonként külön-külön kell megoldani. Az egy szem "mindenre jó" Oracle cluster borzasztó drága és azért az sem egyszerű.
A kulcs-érték "adatbázisok" (pl. BigTable, Google AppEngine DataStore, HBase, Memcachedb) nem relációs elven mennek, óriási gond a rugalmasság: ezekkel sokkal nehezebb új funkciókat kitalálni és beépíteni az alkalmazásodba, pedig a weben állandóan kell valami mozgás.
Live video stream-nél gond a stream elosztása a kiszolgáló szerverek között. Elvileg megoldást kínál a Flash Media Server, de aranyáron. Van még néhány hasonlóan drága fizetős termék, de a weben nehéz ezeket a pénzeket az üzleti modellbe illeszteni, műszakilag pedig szintén nem hipp-hopp dolog.
A live video szervereknél látom a leggyorsabb megoldást, hiszen a gát elsősorban üzleti. Előbb-utóbb úgyis esik az áruk és az open-source megoldások (pl. Red5) is felnőnek.
Az adatbázis-kezelésnél viszont úgy tartják, hogy a hagyományos relációs modellt túl kell haladni, ezzel egyetértek. De. A kulcs-érték modellt személy szerint nem tudom elfogadni megoldásként, több rugalmasság kell. Szerintem itt még sok-sok (több, mint három) évet kell várnunk, addig is figyeljük az eseményeket.
Végül itt van néhány skálázódással összefüggő termék és technika, Google-n rá lehet keresni, ezen a blogon is írtam már jónéhányról (van kereső!), lehet tanulni if you like:
iMect means internet, media and other cool things. We're a small company located in Hungary. There is a big footer on every page where you can discover what we do and what happens with us.
Az iMect jelentése: internet, média és egyéb király dolgok. Egy kis magyar cég vagyunk. Minden oldalon van egy nagy lábléc, ahol felfedezheted, hogy mivel foglalkozunk.