A kedves érdeklődőknek most egy gyors betekintés nyújtanánk, egy kis historikus áttekintés, önfényezést, mentegetőzést, ésatöbbi...
A múlt
Mikor anno elindult az iWiW, a gyors, hatékony és egyben egyszerű megoldásként kézenfekvő volt a megvalósításhoz a PHP és a PostgreSql használata. Aztán az oldal beindult, jöttek a hozzáfejlesztések, az egyre nagyobb látogatottság, és egy idő után elérte az alkalmazás a nehezen működtethető, a "kód lassan olyan, hogy inkább hozzá se nyúljunk" szintet.
A döntés
Lépni kellett, persze jött a kérdés, hogy milyen irányba.
Lehetőségből azt gondolná az ember, hogy van sok, csak hogy a PHP-t, Java-t, .Net-et említsük, de persze ne feledkezzünk meg a perl, python, c és egyéb, a webes fejlesztésben már nehezebben alkalmazható megoldásokról. Egy ilyen döntés esetében az ember próbál okos lenni, de mellette saját kompetenciáit, tapasztalatait is szem előtt tartja. Mindezt összevetve jutottunk arra, hogy a Java irányt választjuk, és eddig ezt nem bántuk meg.
Ennyit a bonyolult bevezetésről, nézzük is meg, miről van szó pontosan.
Az alkalmazás felépítése
MVC. Az első kulcsszó, amit egy ilyen rendszer fejlesztésénél az ember szeme előtt lebeg. Mi is ez? Egyszerű: bontsuk jól elkülöníthető rétegekre az alkalmazásunk, ami majd később sok gondunkat megoldja, ha bővíteni, skálázni kell a rendszert.
Most eltekintek a szakzsargonoktól, íme egyszerű felsorolás a rétegeinkről, emészthető formában:
- Adatelérési réteg
Ennek a rétegnek a feladata, hogy az üzleti logika számára a kért adatokat az adatbázisból, az objektum-cacheből, vagy egyéb más helyekről szolgáltassa, valamint fogadja. Fontos, hogy ezen a szinten történjen meg annak a vizsgálata, hogy mi jöhet a cacheből, mi az adatbázisból, és persze a legfontosabb, hogy mindez a lehető leghatékonyabb, leggyorsabb formában. Ezen a szinten valósulnak meg a wiwd kommunikációk is. - Üzleti logika
Legegyszerűbben megfogalmazva itt történik meg az adatok összeállítása, felhasználók ismerőssé jelölése, fórum hozzászólások mentése, stb. Minden funkció, ami a felhasználók kattintásaiból vagy háttérfolyamatokból erednek. - Megjelenítési réteg
Az alkalmazás legbutább rétege, JSP-ben megvalósítva, feladata az üzleti réteg által szolgáltatott adatok megjelenítése (magyarul a html oldalak összeállítása). A JSP-t és az üzleti logikát homlokzati (facade) osztályok kötik össze.
Lehet azon vitatkozni, hogy a JSP-t érdemes-e template-t rendszerként alkalmazni, nem jobb-e erre a célra a Velocity vagy társai, azonban egy dolgot leszögezhetek, nincsenek Java kódok a JSP-ben :)
Pár technikai adat:
- Java: 1.5
- Servlet: 2.4
- JSP: 2.0
- Felhasznált taglibek: jstl, core, fmt, iwiw :)
- Java osztályok száma: ~800db
Nemsokára kicsit bővebben még a következő témák várhatóak: objektum-cache (OSCache, memcached), wiwd, keresés (lucene), valamint pár tapasztalat, amit úgy gondolunk, megosztunk veletek, hátha valakinek a segítségére lesz a későbbiekben...
UPDATE:
Jól megkaptam a többiektől, hogy egyáltalán nem vagyok egy vicces bloggoló, és ráadásul senkit sem érdekel, amit itt nyomatok, de nem adom fel, lesz további rész :)
UPDATE 2:
Többen megkérdőjeleztétek, hogy ekkora hardveren miért nem megy jobban a site. Nos, van egy terület, amin tudjuk hogy változtatnunk kell, és ez okozhat hullámzást a teljesítményben, dolgozunk is rajta, de mindezt leszámítva elmondható, hogy ekkora számú konkurens felhasználószám kiszolgálására kell ez az infrastruktúra.