ugrás a tartalomhoz

Platformválasztás nagy terheltségű alkalmazáshoz

zottty · 2007. Nov. 15. (Cs), 13.46
Sziasztok!

Segítségét kérném azoknak, akiknek volt már dolguk olyan weboldalt fejleszteni, aminek aztán nagy lett a terheltsége.

Sok weblapot csináltam már, elsősorban PHPben és ASP.NET-ben. Tapasztalatom van Pylons-szal és JSF-el is, annyi nem, hogy az életrajzomba írjam :)

Most kezdek bele egy weblapba, aminek várhatóan egész nagy terheltsége le (ha bejön, persze).

Nekem két lehetőség jut eszembe platformra:
CakePHP
JSF + Glassfish + TopLink
Mindkettő MySQL-lel.

Persze a rapid development is fontos szempont a választásban. :)

Kérlek segítsetek abban, hogy mennyire skálázhatóak ezek a technológiák nagy terheltség esetén, melyiket érdemes választani. Illetve volt már tapasztalatotok azzal, hogy a CakePHP template cache-elése mennyire gyors és használható? Érdemes-e a Cake-et összegyúrni Smarty-val? Mi a szűk kereszmetszet egy JSF alapú alkalmazásnál?

Összességében: Melyiket érdemes választani?

Ezer köszi!
zottty
 
1

CakePHP NO

tolmi · 2007. Nov. 15. (Cs), 15.33
Hát a CakePHP-t én nem ajánlom. Gondolom neked is csak azért fordult meg a fejedben, mert nem nézted végig a forrását. Annak ellenére hogy elterjedt, kimondottan amatőr megoldásoktól hemzseg és szerintem nincs is mögötte egy profi csapat. Akkor már inkább Symfony ha nagyon muszáj, bár az sem egy szent grál. Annyi szól mellette hogy profi programozók írták és gondoltak a skálázásra is, valamint ugyanez a profi csapat koordinálja a fejlesztést is. Persze végtelenül lassan fejlődik, de így van ez. Vagy Zend Framework. Az is elég átgondolt keretrendszer.

Egyébként lehet PHP-ban írni nagyteljesítményű horizontálisan skálázott webalkalmazásokat, csak jónéhány trükköt ismerni kell. Ez nem keretrendszerfüggő(mivelhogy az ismert PHP keretrendszerek le se sz*rják a horizontális skálázást, kivéve talán Drupal).

Másrészt pedig a Java területen nem lesz komolyabb gondod a skálázással, ellenben nem biztos hogy jól jársz ha nem fejlesztettél sokat eleddig Java/J2EE környezetben. Ha mégis ez irányt választod, mindenképpen fontold meg a GWT-t. Sok funkció kihelyezhető vele kliensoldalra. Mi írtunk már "vastagklienst" böngészőbe GWT-vel és egész jó lett.
Nyilván fogsz használni valami MVC keretrendszert itt is, hát én ajánlom a JBoss Seam-et, de kinek ugye mi esit kézre. Én személy szerint nem komálom a Struccot :)

Remélem sikerült támpontokat adnom.
2

framework kontra skálázhatóság

Hodicska Gergely · 2007. Nov. 15. (Cs), 16.00
(mivelhogy az ismert PHP keretrendszerek le se sz*rják a horizontális skálázást, kivéve talán Drupal).
Ez ki tudnád kicsit jobban fejteni, érdekelne, hogy mikre gondolsz?


Üdv,
Felhő
3

Skálázás

tolmi · 2007. Nov. 15. (Cs), 19.12
A kérdést talán a skálázás, mint fogalom érdemes körüljárni PHP esetében, persze közel sem kimerítően itt, de sör mellet bármikor ;)

Kétféle skálázási mód van. Ezeknek sikerült megszülni a horizontális és vertikális skálázás neveket.
A PHP vertikális skálázási lehetőségei sajnos a jelenleg elterjedt architektúrán az adott webalkalmazás példányainak növelésében merül ki. Ezen belül is komoly problémákat vet fel a szinkronizálás, mivel erre nincs kényelmes megoldás(file mutexek és hasonlók, amik kimondottan lassúak és problémásak, azok vannak).
Lásd például Java esetében lehetőséged van kényelmesen többszálon(tehát több individuális kérés között is) dolgozni, úgy hogy korrekt szinkronizálási lehetőségeid vannak.
Egy esetleges példaalkalmazás lehetne egy futtatókörnyezet szintű singleton, nem pedig PHP példány szintű. Egy Zend_Lucene-t nem szívesen tartok a memóriában sok példányban. :)

A horizontális skálázási lehetőségek pedig még rosszabb állapotban vannak. Operációs környezetek közötti szinkronitás vagy információs együttűködés pedig zéróminuszalfa, annyi sem. Nincs platformtámogatás cache koherenciára, tranzakciózásra. Ezeket a keretrendszerfejlesztőknek kell kiszenvedniük.
Lásd Java, ahol pedig a J2EE platformmal kapod ezeket készen, jól dokumentálva.

Éppen ezekért PHP alatt normális skálázást támogatni nagyon nehézkes. Ezért is foglalkoznak olyan kevesen ezzel, de az a kevés is csak akkor fog ilyenbe bele, ha pénzügyileg meg van finanszírozva (lásd Drupal clustering). Alapjáraton senkinek sem akaródzik ezt a témát kergetni.

A nagy PHP Web2.0-s szájtok esetében is problémák (voltak) ezek, de ott nyilván meg lettek fizetve emberek hogy ezeket áthidalják. Ezzel szembe kell nézni előbb vagy utóbb a nyílt forráskódú PHP-s közönségnek is, ha továbbra is erősödik a PHP helyzete a "komoly" platformok ranglétráján.

Összefoglalva, a platform alapvetően az oka hogy nehézkes skálázni. Nem hiszem hogy mondjuk a Java jobb választás lenne, mert ott teljesen más dolgok fogják megnehezíteni az életed. Sajnos nincs tökéletes választás jól skálázható platform ügyében (főleg hogy ennek komoly gazdasági megfontolások is megbújhatnak a hátterében).

Remélem sikerült legalább alapjaiban bemutaton az álláspontomat.
4

értelek

Hodicska Gergely · 2007. Nov. 16. (P), 00.07
mivelhogy az ismert PHP keretrendszerek le se sz*rják a horizontális skálázást, kivéve talán Drupal)
A fogalmakkal tisztában vagyok, igazából én ezt a kijelentést furcsáltam, és mint kiderült a válaszodból, hogy igazából inkább a platform adta korlátok (vagy lehetőségek? ;)) zavarnak. Nem hiszem, hogy a horizontális skálázást a szűken vett keretrendszerek rontanák, persze lehet rosszul megírva egy cucc, ami miatt nem skálázható, de a jobb keretrendszerek szerintem ebben nem akadályoznak.

Az más dolog, hogy esetleg nem adnak plusz eszközöket, és neked kell megoldani mondjuk egy sesson kezelést. Azt nem tudom, hogy ezekre mennyire lehet "dobozos" jó megoldást adni, nekem inkább az volt a tapasztalatom, hogy ezek a rendszerek többnyire egyediek, testreszabott megoldásokra van szükség.

A Java-s részekre érdemben nem tudok reagálni, mert csak felületes ismereteim vannak vele kapcsolatban. Nem látom át, hogy egynémely említett funkcióra mennyire lehet szükség az átlagos (már ha lehet ilyet mondani a nagyterhelésű rendszerek esetében) weboldalaknál. Ha lesz időm, akkor valamikor elmélyedek ebben a témában, mert igazán érdekes, hogy Java oldalon milyen megoldások vannak, kíváncsi lennék, hogy ezek a platform nyújtotta lehetőségek mennyire használhatóak.

Drupal clustering
Erre nem találtam semmi utalást. Ez micsoda?

Összefoglalva, a platform alapvetően az oka hogy nehézkes skálázni.
Maga a PHP az sehol nem akadály számodra a skálázhatóság szempontjából. Amiket hiányolsz, azok szerintem konkrét funkciók, de önmagukban nem jelentik a skálázhatóságot. (Persze mint mondom nincs tapasztalatom egy nagy forgalmú oldal felépítésében Java alapokon, talán majd egyszer :)).

Valami oka viszont csak lehet annak, hogy a legtöbb nagyobb weboldal mögött nem Java áll (félre ne érts, véletlenül sem olyan sztereotípiákra szeretnék utalni, miszerinte a Java lassú lenne), és nem hiszem, hogy csak anyagi, vagy képzettségbeli okai lennének, mert azért van ahol egyik sem probléma.

Remélem sikerült legalább alapjaiban bemutaton az álláspontomat.
Teljesen.


Üdv,
Felhő
9

értve lenni jó

tolmi · 2007. Nov. 16. (P), 14.54
A fogalmakkal tisztában vagyok...

Ebben nem kételkedtem, de gondoltam azokra is akiknek ez új lehet és meglelik a topicot.

platform adta korlátok (vagy lehetőségek? ;)) zavarnak

A lehetőségek sosem zavartak :) De viccet félre. Nem a platform korlátai zavarnak(igen, elb*sztam az előző hozzászólásomban - az archtektúra zavar elsősorban, a platform hülyeségeivel együtt lehet élni), hanem az elterjedt (LAMP, I mean) architektúra limitációi. Itt van ugye az én heppem, a Quercus, találtam is egy uber-brutál tuning howto-t Drupalhoz multkor. Megosztanám. Lényegében a PHP Java Servlet fordító és a Terracotta JVM clusterező megoldás házasítása, plusz egy csipetnyi elosztott ehcache. Én kipróbáltam (igaz hogy nem resin-nel) és brutális 16x-18x növekedés figyelhető meg a kiszolgálás sebességében. Ennek az oka talán az Drupal RDBMS kezelése mögött bújik meg. Mivel minden memóriában van, amit használni szeretne, nem nehéz jól produkálni :) Ebből is látszik, hogy mennyit számít az architektúra. A platformot viszont nagyon kedvelem.

Azt nem tudom, hogy ezekre mennyire lehet "dobozos" jó megoldást adni, nekem inkább az volt a tapasztalatom, hogy ezek a rendszerek többnyire egyediek, testreszabott megoldásokra van szükség.


Én úgy hiszem, hogy nem. A "dobozos" megoldások okkal kerültek dobozba. Bármiféle fürtözést támogatni szoftveresen nem kis munka, ez - mint említettem - nem olyan téma, amibe Pistike belefog otthon. Éppen ezért a testreszabottnak hitt megoldások lépten nyomon hagynak cserben és olyankor nincs hova fordulnod, hiszen a platform nem támogatja, te meg egy home-brewed megoldással próbálkozol. (Most tényleg nem azért mert én Java fanboy vagyok, de) Javaban legalább az alkalmazásszerverek támogatják (tekintsük őket is frameworköknek, mert végsősoron azok is), így van rá support is. Támogatniuk kell, mert a J2EE speckó megköveteli. Ez jó dolog.

hogy Java oldalon milyen megoldások vannak, kíváncsi lennék, hogy ezek a platform nyújtotta lehetőségek mennyire használhatóak.

Ezzel kapcsolatban fogadd személyes ajánlásomat. Egy PHP-s fejlesztő iszonyat sokat profitálhat egy ilyen alámerülésből. A Java és J2EE ötletei nagyon jók csak néhol kicsit használhatatlan az API meg a nyelvi konstrukciók.

Drupal clustering

Na most beégtem :) Nem találom azt a cikket a drupal.org-on, amire gondoltam. Valamely cég, utána pedig a Google SOC adományozott pénzt a Drupal normális load-balancing meg adatbázis elosztottság megvalósítására. Valamint gondolom neked nem kell bemutatni a high performane group-ot :) Azért ott is főleg vén rókák tanyáznak és egy részük fizetett fejlesztő, még ha nem is azért fizetik hogy közvetlen Drupal-t fejlesszen.

Valami oka viszont csak lehet annak, hogy a legtöbb nagyobb weboldal mögött nem Java áll (félre ne érts, véletlenül sem olyan sztereotípiákra szeretnék utalni, miszerinte a Java lassú lenne), és nem hiszem, hogy csak anyagi, vagy képzettségbeli okai lennének, mert azért van ahol egyik sem probléma.

Félre nem érts, én sohasem mondtam hogy PHP-t nem lehet skálázni. Pusztán meglehetősen nehézkes, nagy hiányossága ez a platformnak (amit a megfelelő architektúrán elegánsan ki lehet kerülni). Én magam is nagyon szeretem a PHP-t, vannak feladatok, amelyek egy-az-egyben PHP-nak valóak és vannak azok, amelyekre ezt az egész J2EE hóbelevancot kitalálták. Mindennek megvan a helye.

Másrészt úgy vélem elsősorban anyagi okai vannak annak hogy gyakoriak a LAMP startup-ok vagy webkettes népszerű oldalak. Az az igazság hogy PHP-ban gyorsabban fejlesztesz, áttekinthetőbb a munka, és általában kevesebbet kell szívni vele. Míg a hardver olcsó, a munkaerő nem az. A PHP-s munkaerő pedig a világon mindenhol olcsó és igen bő a kínálat is belőle. Olyan pedig nincs hogy pénz van bőven. Lehet hogy van most, de jövőre miből lesz?

Végezetül álljon itt egy blog és arra válasz. Nem mindenben értek egyet az urakkal, de lényegében megfogalmazzák a dolgot:
Why Are Most Large-Scale Web Sites Not Written in Java? (Bocs a jump-through linkért)

Ui.: ...és az ajándék link drupal scalinghoz, mint érdekesség és hasznosság :)
10

GWT

zottty · 2007. Nov. 16. (P), 23.42
Valami oka viszont csak lehet annak, hogy a legtöbb nagyobb weboldal mögött nem Java áll


Bár nem tudom mi van mögötte, de pl gmail és eredeti google alkalmazások mögött AFAIK igenis JAVA (GWT) áll.
12

Annyira evidens

tolmi · 2007. Nov. 17. (Szo), 12.24
...hogy senkinek nem ugrott be. Hát az iWiW is Java alapú már pár éve :D Az más kérdés hogy el sem tudom képzelni mennyit bénáztak a kódjában, de attól még Java.

Ettől függetlenül például a RedHat Mugshot-ja is Java Servlet alapú.
13

iwiw architektúra

Hodicska Gergely · 2007. Nov. 17. (Szo), 13.21
Az iwiw esetében valszeg nem a Java miatt vannak teljesítmény gondok (bár hallottam más Virgo projekt esetén "érdekes" megoldásokról), inkább architektúrálisan gondok lehetnek, azt pl. sosem tudtam megérteni, hogy a képeket hogyan tudják ilyen lassan kiszolgálni.


Üdv,
Felhő
14

iwiw üzenetek

zottty · 2007. Nov. 18. (V), 13.44
Ha már iwiw, akkor nekem már ott veszett a respect a fejlesztők felé, hogy amikor kapok egy üzenetet és megnézem, az üzenet megjelenítésekor még pörög az új üzenet boríték a menüben.

Azaz a logika kb:

1. kirajzolom a menüt (itt még van olvasatlan üzenetem)
2. kiveszem az üzenetet dbből, megjelölöm olvasottként
3. kiiratom az üzenetet.

Ez alapján lehet következtetni a site megoldásaira...nekem nem nyerte el a tetszésem.
15

iwiw...

Fraki · 2007. Nov. 18. (V), 16.30
Na igen, egyetértek, az én iwiw-megítélésem sem tűr semmiféle eufemizmust :)
16

Re

tolmi · 2007. Nov. 18. (V), 23.54
...az egy dolog hogy architektúra. Az meg egy másik hogy olcsó, hányaveti programozókkal b*szott sok pénzért megcsináltak egy sz*rt. Nekem nincs ismerősöm aki ezt alá tudja támasztani az iWiW kapcsán, de valahogy nagyon ismerős az eredmény más fejlesztőcégek munkái kapcsán...

Másrészt pedig elkovetik a hibákat újra és újra. Foltozzák a vékony műanyagzacskót. :)
5

CakePHP

Fraki · 2007. Nov. 16. (P), 03.16
Illetve volt már tapasztalatotok azzal, hogy a CakePHP template cache-elése mennyire gyors és használható?

Gyors és használható. (És rapid...)

Érdemes-e a Cake-et összegyúrni Smarty-val?

Nem.
6

Köszi

zottty · 2007. Nov. 16. (P), 13.05
Köszi mindenkinek. Hasznosak és profik a válaszok, nagyon köszi.

Én egy nagyobb terheltségű alkalmazást készítettem, PHP/MySQL-ben, saját frameworkkel (akkor még nem voltak divatosak a ready-to-use frameworkok :) ) és persze nagy terheltségnél felfutott a terhelés, igencsak. Erről volt is egy témám itt a weblaboron.

Végül már mindent leoptimalizáltunk, SQL hívások, adatbázis, PHP előfordító a háttérben, autoloader kiszedve, már tényleg a leg idiótább dolgokat optimalizáltuk, amivel sikerült kb 20%-os sebességnövekedést elérni. Aztán a végére kiderült, hogy a template rendszer húzza vissza az egészet. Nagyobb koncepcionális hiba nem volt a tervezésében, de nem cache-elt. Miután sikerült megcache-eltetni, iszonyat sebességjavulást értünk el.

Még egy PHP-s kérdés, ami ide kapcsolódik:
Ha nagy terheltség, akkor CAKE, vagy Symphony? Ez utóbbit egyáltalán nem ismerem.

(P.s. facebook.com php/mysql comboval megy, szóval az biztos, hogy a skákázhatóság jól megoldható, kérdés milyen áron :) )
7

Eldönthetetlen

tolmi · 2007. Nov. 16. (P), 14.02
Ha nagy terheltség, akkor CAKE, vagy Symphony? Ez utóbbit egyáltalán nem ismerem.

Erre sosem fogsz normális választ kapni. Ajánlom hogy nézd meg, próbáld ki mindkettőt és dönts te magad. Mi nem ismerjük a döntési szempontjaid finomságait, csak annyit hogy nagy terheltségű webalkalmazás készítéséhez szeretnéd használni és fontos a teljesítmény. Ez alapján a helyes válasz az lenne, hogy egyik sem :)

Ui.: Ha nem ismered a Symfony-t, itt egy cikk a weblaboron róla.

(P.s. facebook.com php/mysql comboval megy, szóval az biztos, hogy a skákázhatóság jól megoldható, kérdés milyen áron :) )

De ők nem is használnak ready-made keretrendszert ;)
8

yahoo bookmarks

Hodicska Gergely · 2007. Nov. 16. (P), 14.48
De ők nem is használnak ready-made keretrendszert ;)

Kicsit elcsépelt ugyan, de pl. a yahoo bookmarks symfonyt használ, mondjuk érdekesek a legfőbb kiválasztási szempontok: http://www.symfony-project.com/blog//2006/10/28/yahoo-bookmarks-uses-symfony.

Ha nagy terheltség, akkor CAKE, vagy Symphony? Ez utóbbit egyáltalán nem ismerem.
Hát mindenféleképpen érdemes megnézned a mindkettőt. Az biztos, hogy például mindkettő esetében egy nagyobb terhelésű oldal esetén a framework model részével lehetnek gondjaid. A yahoo is itt saját megoldást alkalmazott. Ami esetleg lehet szempont, hogy egy ilyen rendszer esetén szinte biztosan bele kell majd nyúlnod az alap framework működésbe, és ilyen szempontból szerintem a symfony lényegesen jobb, szebb és jobban strukturált kódja van, komoly tapasztalat van mögötte. Szintén szempont lehet, hogy mivel a Cake kódja PHP4, ezért sok olyan PHP5-ben elérhető nyelvi funkciót nem tudsz használni benne, ami biztonságosabb programozást tesz lehetővé, illetve szintén nem fogsz tudni használni bizonyos módszereket, melyekkel jobban karbantartható, rugalmasabb kódot tudsz előállítani.


Üdv,
Felhő
11

Plusz

zottty · 2007. Nov. 16. (P), 23.43
Kicsit off, és lefelejtettem, fontos még a keretrendszer választásnál a localization is.