NAGY TELJESÍTM TMÉNYŰ WEBALKALMAZÁSOK KÉSZÍTÉSE SE JAVA TECHNOLÓGI GIÁVAL Szerzők Dévai István Automatizálási és s Alkalmazott Informatikai Tanszék
Az előad adás s tartalma Elméleti áttekintés Nagy teljesítményű webes megoldások Lehetőségek Java platform esetén Alkalmazásrétegbeli gyorsítótárazás Mérések a Clusterforum alkalmazással HSQLDB alapon PostgreSQL alapon Gyakorlati tapasztalatok, jótanácsok 2/28
Bevezetés Alkalmazások Híroldalak Web alapú E-mail alkalmazások Fórumok Aukciós és közösségi portálok Elvárásaink Magas egyidejű felhasználószám esetén is rövid válaszidők Szolgáltatáskiesés nem engedhető meg 3/28
Néhány definíci ció Skálázhatóság Addícionális hardver beillesztése esetén közel lineáris teljesítménynövekedés Scale-up Scale-out Magas rendelkezésre állás Négykilences = 99.99% egy évben Mennyire gyorsan javítható a rendszer 4/28
Webes kiszolgáló rendszer 5/28
Webes kiszolgálás s Java alapokon A kiszolgálás alapja: JSR-154 szabványt követő Servlet konténer Az együttműködés lehetőségei: Terhelésmegosztás Automatikus átkapcsolás (failover) Session replikáció Elosztott gyorsítótárazás 6/28
Terhelésmegoszt smegosztás és failover A terhelés megosztása történhet: A kérések száma szerint Az egy csomóponton található sessionök száma szerint Egy csomópont hálózati vagy CPU terhelése szerint Az adatok partícionálása szerint A failover megvalósításához szükséges: Csoporttagság folyamatos nyilvántartása 7/28
A session kezelése Ragadós session kezelés Session replikáció Topológiák (Teljes, N-Backup, Partícionált, Gyűrű, Elosztott tár) Granularitás Szinkronitás Trigger események 8/28
Nyílt forrásk skódú megoldások Tomcat 6.x Glassfish V2 JBoss 5 Klaszter keretrendszer Apache Tribes Shoal (JXTA peer to peer alapon) JGroups + JBoss Cache Támogatott replikációs topológiák All-to-all 1-Backup Elosztott tár Gyűrű Partícionált Elosztott tár A replikáció granularitása Objektum Objektum Objektum vagy mező Farming Nincs (jelenleg nem működik, külső szkriptekkel lehetséges) Van Van + Teljes farmon való hot-deploy lehetőség Stateful Session Bean replikáció Nincs Van Van 9/28
Alkalmazásr srétegbeli gyorsítótáraz razás A Java platform előnye Számos (nyílt forráskódú) gyorsítótár implementáció Jól rétegzett alkalmazások A gyorsítótárazás céljai: Cluster csomópontok CPU és IO terhelésének csökkentése Az adatbázisszerver tehermentesítése Az alkalmazásszerver vagy a felhasznált külső rendszerek tehermentesítése 10/28
Teljesítm tménynövelés gyorsítótáraz razással Mennyi erőforrást igényel a gyorsítótárazandó adatok újbóli előállítása? Milyen időközönként válik érvénytelenné az adat? (Írás/olvasás aránya) Mennyire friss információkra van szüksége a felhasználónak? Mennyi a rendelkezésre álló memória a csomópontokon és mennyi az összes gyorsítótárazandó adat? Milyen a kérések lokalitása? (találat/hozzáférés arány) Mivel kulcsoljuk a gyorsítótárat (egyszerű vagy összetett kulcs?) 11/28
Cache megoldások I. Weboldal cache Használata dinamikus tartalom esetén nem jellemző Kulcsolási nehézségek Webkomponens cache Jó hatásfok Tipikus alkalmazások: külső rendszer, bejelentkezett felhasználók listája, stb. 12/28
Cache megoldások II. Üzleti objektum cache Entitások halmaza Egyszerű kulcsolás Alkalmazásfüggő hatásfok Adatbázis kérés cache A legtöbb alkalmazásban nagyon jól alkalmazható Egyszerű kulcsolás 13/28
Gyorsítótár keretrendszerek EHCache OSCache JBoss Treecache Weboldal cache Van Van Van Webkomponens cache Van Van Van Üzleti objektum cache Van Hibernate esetén nem támogatott Van Adatbázis kérés cache Van Hibernate esetén nem támogatott Van Eloszott működést is támogat Igen Igen, de Hibernate esetén nem támogatott Igen Tranzakcionalitás Nincs Nincs Igen, JTA szerverrel 14/28
Clusterforum teszt alkalmazás Klasszikus fórum oldalak modellezése Entitásmodell: Cél: teljesítmény növelése klaszterezéssel és alkalmazásrétegbeli gyorsítótárazással 15/28
Clusterfórum rum képernyőkép p I. 16/28
Clusterfórum rum képernyőkép p II. 17/28
Felhasználói i modell A modell: Implementáció Apache JMeter Elosztott tesztelés 18/28
19/28
Mérési összeállítás Minden gép azonos hardver kiépítésű (Intel P4 Dual Core 3.04Ghz, 2G RAM, 100Mbit LAN) A felhasznált gépek: 1 terheléselosztó (Apache HTTPD + mod_jk) 1 adatbázisszerver (HSQLDB vagy Postgres) 1-4 klaszter csomópont (Apache Tomcat 6.0.16 + EHCache 1.4.1) 6 JMeter tesztgép 20/28
Mod_jk képernyőkép 21/28
Mérés s I. Az adatbázis nem szűk keresztmetszet (HSQLDB) 1000 900 800 700 600 500 400 KiszolgIdőÁtlag [msec] KiszolgIdőTop90% [msec] Teljesítmény [kérés/sec] 300 200 100 0 1 2 3 4 Csomópontok száma 22/28
Mérés s II. Az adatbázis mint szűk keresztmetszet (PostgreSQL) 500 450 400 350 300 250 200 KiszolgIdőÁtlag [msec] KiszolgIdőTop90% [msec] Teljesítmény [kérés/sec] 150 100 50 0 1 2 3 4 Csomópontok száma 23/28
Mérés s III. Szűk keresztmetszet feloldása az üzleti objektumok gyorsítótárazásával 500 450 400 350 300 250 200 150 100 KiszolgIdőÁtlag [msec] KiszolgIdőTop90% [msec] Teljesítmény [kérés/sec] 50 0 1 2 3 4 Csomópontok száma 24/28
Mérés s IV. Szűk keresztmetszet feloldása az üzleti objektumok és az adatbáziskérések gyorsítótárazásával 600 500 400 300 200 KiszolgIdőÁtlag [msec] KiszolgIdőTop90% [msec] Teljesítmény [kérés/sec] 100 0 1 2 3 4 Csomópontok száma 25/28
A mérések m összefoglalásasa 600 500 400 300 KiszolgIdőTop90% [msec] Teljesítmény [kérés/sec] 200 100 0 Nincs cache Domain cache Query cache 26/28
Jótanácsok és s kitekintés Tapasztalatok Terhelendő és tesztelő csomópontok aránya Hibernate query cache hiányosságok Gzip használata Kitekintés Oracle Coherence Terracotta DSO XSTM 27/28
Végül Köszönöm a figyelmet várom kérdéseiket! 28/28