Turbó fokozat nginx, Redis, Node.js
Sunday, October 4, 2009
Az előadó Bártházi András mailto:andras beigli barthazi pont hu twitter:ba78 http://webakademia.hu http://web.conf.hu/2009/program#Turbó fokozat Programozókat keresünk Miner.hu kereső projektünkhöz
Sunday, October 4, 2009
Miről lesz szó? Mitől lesz gyors egy szolgáltatás? Eszközök, melyek segíthetnek: nginx - webkiszolgáló Redis - memória alapú adatbázis Node.js - öná%ó szerver oldali JavaScript
Sunday, October 4, 2009
Gyors webszolgáltatások Melyeket nem feltétlenül kell komolyan venni, de...
Nyomjuk meg a turbó gombot a szerverkompúteren Tegyük ki a tartalmat statikus HTML fájlként Írjuk meg a szerver oldali kódunkat assemblyben Ne használjunk adatbázis kéréseket, vagy csak egyszerűeket Sunday, October 4, 2009
Turbó gomb Használd az erőt! Ma már egy 4 magos, 16 GB memóriát tartalmazó szerver is elérhető áron beszerezhető
Sunday, October 4, 2009
Statikus HTML Nagyon sok weboldal kivitelezhető HTML-ként Lehet generálni a HTML-t A cache-t ki lehet írni HTML-ként a szerverre, és rewrite megoldásokkal kiszolgálni Gyors kiszolgáló ke%
Sunday, October 4, 2009
Kódolás assemblyben Ha nem is assembly-ben, de C/C++ben egész használható megoldások vannak, például: http://www.webtoolkit.eu/wt Mindenestre a cél hogy a kód egyszerű, és a lehetőségek szerint gyors legyen
Sunday, October 4, 2009
NOSQL, gyors SQL az sql nyelv sok esetben “felesleges” lehet gyors, egyszerű adatbázisok: CouchDB, MongoDB, ... MySQL, PostgreSQL: de jól indexelt, csak elsődleges kulccsal történő lekérdezések memóriában tárolt adatok Sunday, October 4, 2009
nginx orosz fejlesztésű webszerver, leginkább a lighttpd-hoz hasonlít http://nginx.net/ két célra kiváló, de más feladatokra is megá%ja a helyét: statikus fájlok kiszolgálása proxy szerver minimális memóriahasználata miatt VPS szerverekre kifejezetten ajánlott Sunday, October 4, 2009
nginx Bár kevesebb szó esik róla, mégis ismert projektek is használják: wordpress.com sourceforge.net torrentreactor.net github.com
Sunday, October 4, 2009
nginx: lehetőségek Alapfunkciókat ismeri: hozzáférés blokkolás IP cím(tartomány) alapján, HTTP Basic authentikáció, könyvtártartalom listázása, FastCGI, Gzip, virtuális hosztok, rewrite rule-ok, stb. Érdekesebb modulok: load balancing, 1x1 GIF, GeoIP, image filter (képek feldolgozása GD könyvtárra), levelezés proxy, kiszolgálás memcachedből, Circle GIF, HTTP Push, upload progress Sunday, October 4, 2009
nginx: dokumentáció alapvetően orosz projekt, orosz dokumentációval az utóbbi időben elkészült egy angol nyelvű wiki, mely átfogóan bemutatja a lehetőségeket, modulokat interneten több helyen is olvashatunk leírásokat arról, hogy adott problémákat hogy lehet megoldani a segítségével
Sunday, October 4, 2009
nginx: működés eltérően az Apache-tól, nincsenek külön szálak indítva kliensenként úgynevezett “event based server” megoldás processzoronként érdemes workereket indítani, négyprocesszoros szerverben négyet
Sunday, October 4, 2009
nginx: sebesség a sebesség nagyon sokféleképpen mérhető: kis statikus fájlok nagy statikus fájlok (adatátvitel) különböző szerver oldali nyelvek
Sunday, October 4, 2009
nginx: sebesség ide jött volna különböző mérésekkel igazolva, hogy milyen gyors az nginx statikus fájlok esetén de összehasonlítva távoli kiszolgálás esetén Apachecsal másodpercenként több tízezres kiszolgálás me%ett nem tudtam kimutatni sebességbeli különbséget
Sunday, October 4, 2009
nginx: sebesség memóriában, processzor terhelésben viszont egyértelmű nyertes volt, helyből adva a szervernek terhelést: 25kB-os fájl, 100.000 kérés, 10.000 párhuzamos szál Apache: 150 MB memória, 2-es, 3-as load, 45 mp nginx: 50 MB memória, “nincs” load, 22 mp
Sunday, October 4, 2009
nginx: mérések a méréseket egy négyprocesszoros, Core 2 quad szerveren, 4 GB memóriával végeztem, az “ab” eszközzel távoli kiszolgáláskor egy 100 Mbit/s vonalon csatlakozó, másik szerver teremben levő szerverről mértem alapból a szerveren minimális terhelés volt, a méréseket 10-20 alkalommal is elvégezve vontam le a következtéseket
Sunday, October 4, 2009
nginx vs. lighttpd személyesen nem végeztem méréseket, nincsenek tapasztalatok nincs rengeteg összehasonlítás, ezekből a lighttpd hátrányának a következőkre róják fel: több napnyi futtatás után szivárgó memória kevésbé jó processzor kihasználás virtuális hosztoknál nincs külön logolási lehetőség(?) http://www.wikivs.com/wiki/Lighttpd_vs_nginx
Sunday, October 4, 2009
nginx: használat mi a következőkre használjuk a projektjeinkben: statikus fájlok kiszolgálása (Miner Maps, Miner Toolbar) FastCGI-vel PHP kiszolgálás: előnye hogy nagy látogatottság esetén megfogta a PHP processzek számát, sebesség/processzoridő/memória változás amúgy nem volt
Sunday, October 4, 2009
Redis: tulajdonságok Hipergyors fejlesztés: pár hónap alatt 1.0-s kiadás Nagyon jó dokumentáció Ke%emes közösség (levlista) Jó nyelvi támogatottság (PHP, Ruby, Python, Java...)
Sunday, October 4, 2009
Redis: tulajdonságok Alapvetően egy kulcs-érték alapú, az adatokat memóriában tároló adatbázisszerver http://code.google.com/p/redis/ Leginkább a Memcachedhez lehet hasonlítani, de szignifikáns különbségek vannak
Sunday, October 4, 2009
Redis: tulajdonságok nagyon gyors kiszolgálás: másodpercenként 100.000 írás, 80.000 olvasás atomi, összetett műveletek: listák, halmazok támogatása perzisztens tárolás: adatbázis kiírása lemezre jól hangolhatóan
Sunday, October 4, 2009
Redis: egyszerű nem igényel különösebb konfigurációt, gyorsan kipróbálható, átlátható, telnettel lehet hozzá csatlakozni nincsenek bonyolult parancsok, nagyon könnyen és gyorsan tanulható
Sunday, October 4, 2009
Redis: alapműveletek SET kulcs érték GET kulcs, MGET kulcs1 kulcs2 kulcs3 EXISTS kulcs INCR kulcs, DECR kulcs INCRBY kulcs szám, DECRBY kulcs szám DEL kulcs
Sunday, October 4, 2009
Redis: alapműveletek KEYS minta azon elemek listája, melyek kulcsa mintával kezdődik RANDOMKEY RENAME régikulcs újkulcs DBSIZE EXPIRE kulcs szám
Sunday, October 4, 2009
Redis: listaműveletek RPUSH kulcs érték, LPUSH kulcs érték elem beszúrása a “kulcs” lista elejére, végére LLEN kulcs LRANGE kulcs kezdet vég lista egy részének lekérdezése LTRIM kulcs kezdet vég
Sunday, October 4, 2009
Redis: listaműveletek LINDEX kulcs index a “kulcs” lista egy elemének lekérdezése LSET kulcs index érték adott indexű elem felülírása LREM kulcs darab érték adott értékű elemek eltávolítása a listából LPOP kulcs, RPOP kulcs
Sunday, October 4, 2009
Redis: halmazműveletek SADD kulcs érték, SREM kulcs érték, SPOP kulcs SMEMBERS kulcs SMOVE kulcs1 kulcs2 érték SCARD kulcs elemek száma az adott halmazban SISMEBER kulcs érték
Sunday, October 4, 2009
Redis: halmazműveletek SINTER kulcs1 kulcs2 kulcsN, SINTERSTORE célkulcs kulcs1 kulcs2 kulcsN metszet lekérése, i%etve metszet tárolása SUNION kulcs1 kulcs2 kulcsN SUNIONSTORE célkulcs kulcs1 kulcs2 kulcsN összeg lekérése, i%etve összeg tárolása SDIFF kulcs1 kulcs2 kulcsN SDIFFSTROE célkulcs kulcs1 kulcs2 kulcsN különbség lekérése, i%etve különbség letárolása Sunday, October 4, 2009
Redis: rendezés listával és halmazzal is működik SORT kulcs SORT kulcs DESC SORT kulcs LIMIT 0 10 ALPHA DESC SORT kulcs BY weight_* SORT kulcs BY weight_* GET object_* veszi kulcs lista elemeit (pl. azonosítók: 1,2,3), lekéri weight_1, weight_2, weight_3 értékeket és rendezi azokat, majd az így kapott sorrend alapján visszaadja object_3, object_2, object_1 elemeket Sunday, October 4, 2009
Redis: mentés konfig fájlban hangolható: x másodpercenként x írás művelet után pl beá%ítható: alapból percenként, de ha volt 1000 művelet, akkor azután is SAVE, BGSAVE, LASTSAVE műveletek
Sunday, October 4, 2009
Redis: replikáció
Több adatbázist képes összeszinkronizálni: MASTER-SLAVE mode%
Sunday, October 4, 2009
Redis: backup
az adatbázis perzisztens része egy darab fájl leá%ás nélkül backpuolható, mivel az adatbázis mentése atomi művelet
Sunday, October 4, 2009
Redis: egyebek egyszerű, saját szöveges protoko% példakódként egy egyszerű Twitter klón forrása is elérhető, kipróbálható több adatbázist (névteret) is támogat, bár nem igazán kényelmesen, érdemes inkább külön szervereket indítani
Sunday, October 4, 2009
Redis: használat
IWIW alkalmazásaink mögötti adattároláshoz Miner mögötti queue, /iss bejegyzések tárolása, gyorsítása, oldal cache, stb.
Sunday, October 4, 2009
Node.js event I/O engine a V8 JavaScript motorhoz alapvető célja skálázható hálózati “dolgok” készítése esemény alapú, nem pedig thread alapú megoldás nem webszerver, de webszerver is készíthető segítségével http://nodejs.org/ hasonló az Event Machine (Ruby) és Twisted (Python) projektekhez
Sunday, October 4, 2009
Node.js: tulajdonságok Hipergyors fejlesztés Ke%emes közösség (levlista) Használható dokumentáció Fiatal kora e%enére sok kapcsolódó projekt
Sunday, October 4, 2009
Node.js: I/O Alapvetően támogatja a következő I/O műveleteket: konzolos “standard I/O” (stdin, stdout) fájlok írása, olvasása HTTP, TCP és DNS protoko%ok kezelése
Sunday, October 4, 2009
Node.js: sebesség Nagyon gyors webszerver 10.000 kérést, 1000 konkurens klienstől pár mp alatt kiszolgál (12k dinamikus tartalmú oldal) nagyobb fájloknál lassabb lehet (megoldás folyamatban), de nem is erre való
Sunday, October 4, 2009
Node.js: sebesség Event Machine (Ruby) és Node.js összehasonlítás Forrás: http://four.livejournal.com/1019177.html 1 konkurens kliens: node: 23782, ev: 22606 / sec 5 konkurens kliens: node: 34303, ev: 36899 / sec 300 konkurens kliens: node: 35668, ev: 36405 / sec
Sunday, October 4, 2009
Node.js: Comet Mivel memóriafoglalása minimális, i%etve esemény alapú kiszolgálót lehet készíteni benne, kiválóan alkalmas több ezer szál párhuzamos kezelésére is példakódként egy böngésző alap chatszoba megvalósítást is me%ékeltek hozzá
Sunday, October 4, 2009
Node.js Bár fiatal projekt, de: mivel JavaScript, kész JavaScript könyvtárak je%emzően használhatóak vele számos modul, kiegészítés van már hozzá most is
Sunday, October 4, 2009
Node.js Érdekesebb kapcsolódó projektek: Redis kliens, CouchDB kliens, Tokyo Tyrant kliens, Postgres kliens JSON-RPC webszolgáltatás, Express (Sinatra klón), Disqus blog komment rendszer klón, IRC bot Készül az Extension API, amivel kész könyvtárak könnyen csatolhatóak lesznek
Sunday, October 4, 2009
Node.js: használat A Miner Toolbar megoldásának kiszolgálója készül Node.js alapokon Különböző Miner szubprojektek mögöttes kiszolgálója lesz Jól proxyzható nginx segítségével
Sunday, October 4, 2009
Köszönet Bártházi András mailto:andras beigli barthazi pont hu twitter:ba78 http://webakademia.hu http://web.conf.hu/2009/program#Turbó fokozat Programozókat keresünk Miner.hu kereső projektünkhöz
Sunday, October 4, 2009