SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
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 Apache-
                          csal 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

Mais conteúdo relacionado

Semelhante a Turbó fokozat

Nyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi BíróságonNyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi BíróságonNorbert Laky
 
Virtualizáció Linuxon: XEN
Virtualizáció Linuxon: XENVirtualizáció Linuxon: XEN
Virtualizáció Linuxon: XENFerenc Szalai
 
Klaszter és virtualizációs technikák
Klaszter és virtualizációs technikákKlaszter és virtualizációs technikák
Klaszter és virtualizációs technikákFerenc Szalai
 
Cgi röviden ajmar
Cgi röviden ajmarCgi röviden ajmar
Cgi röviden ajmarbonami2014
 
Protokoll feldolgozás generált kóddal
Protokoll feldolgozás generált kóddalProtokoll feldolgozás generált kóddal
Protokoll feldolgozás generált kóddalViktor Hercinger
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaFerenc Kovács
 
Virtualizált szolgáltatás platform kialakítása Xen és AoE alapokon
Virtualizált szolgáltatás platform kialakítása Xen és AoE alapokonVirtualizált szolgáltatás platform kialakítása Xen és AoE alapokon
Virtualizált szolgáltatás platform kialakítása Xen és AoE alapokonFerenc Szalai
 
A világ változik, változik a Mozilla is
A világ változik, változik a Mozilla isA világ változik, változik a Mozilla is
A világ változik, változik a Mozilla isKálmán "KAMI" Szalai
 
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...Ferenc Szalai
 
Linux Kernel - Bevezetes
Linux Kernel - BevezetesLinux Kernel - Bevezetes
Linux Kernel - BevezetesLevente Kurusa
 
Firefox Thunderbird Seamonkey - felpörgetve!
Firefox Thunderbird Seamonkey - felpörgetve!Firefox Thunderbird Seamonkey - felpörgetve!
Firefox Thunderbird Seamonkey - felpörgetve!Kálmán "KAMI" Szalai
 

Semelhante a Turbó fokozat (17)

Nyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi BíróságonNyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi Bíróságon
 
Virtualizáció Linuxon: XEN
Virtualizáció Linuxon: XENVirtualizáció Linuxon: XEN
Virtualizáció Linuxon: XEN
 
WebRTC - Hol tartunk ma?
WebRTC - Hol tartunk ma?WebRTC - Hol tartunk ma?
WebRTC - Hol tartunk ma?
 
Klaszter és virtualizációs technikák
Klaszter és virtualizációs technikákKlaszter és virtualizációs technikák
Klaszter és virtualizációs technikák
 
Cgi röviden ajmar
Cgi röviden ajmarCgi röviden ajmar
Cgi röviden ajmar
 
A forditonak mindenhez lehet köze
A forditonak mindenhez lehet közeA forditonak mindenhez lehet köze
A forditonak mindenhez lehet köze
 
A Mozilla nem csak Firefox
A Mozilla nem csak FirefoxA Mozilla nem csak Firefox
A Mozilla nem csak Firefox
 
Protokoll feldolgozás generált kóddal
Protokoll feldolgozás generált kóddalProtokoll feldolgozás generált kóddal
Protokoll feldolgozás generált kóddal
 
Xen klaszterek
Xen klaszterekXen klaszterek
Xen klaszterek
 
Firefox OS beszámoló
Firefox OS beszámolóFirefox OS beszámoló
Firefox OS beszámoló
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
 
Fordítási alapok
Fordítási alapokFordítási alapok
Fordítási alapok
 
Virtualizált szolgáltatás platform kialakítása Xen és AoE alapokon
Virtualizált szolgáltatás platform kialakítása Xen és AoE alapokonVirtualizált szolgáltatás platform kialakítása Xen és AoE alapokon
Virtualizált szolgáltatás platform kialakítása Xen és AoE alapokon
 
A világ változik, változik a Mozilla is
A világ változik, változik a Mozilla isA világ változik, változik a Mozilla is
A világ változik, változik a Mozilla is
 
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
 
Linux Kernel - Bevezetes
Linux Kernel - BevezetesLinux Kernel - Bevezetes
Linux Kernel - Bevezetes
 
Firefox Thunderbird Seamonkey - felpörgetve!
Firefox Thunderbird Seamonkey - felpörgetve!Firefox Thunderbird Seamonkey - felpörgetve!
Firefox Thunderbird Seamonkey - felpörgetve!
 

Mais de András Bártházi (9)

Announcing Escher
Announcing EscherAnnouncing Escher
Announcing Escher
 
Cynefin
CynefinCynefin
Cynefin
 
ingatlan.com goes mobile
ingatlan.com goes mobileingatlan.com goes mobile
ingatlan.com goes mobile
 
Susmus.hu - technológiák
Susmus.hu - technológiákSusmus.hu - technológiák
Susmus.hu - technológiák
 
NodeJS
NodeJSNodeJS
NodeJS
 
jQuery 1.4 újdonságok
jQuery 1.4 újdonságokjQuery 1.4 újdonságok
jQuery 1.4 újdonságok
 
Redis: a memcached gyilkos
Redis: a memcached gyilkosRedis: a memcached gyilkos
Redis: a memcached gyilkos
 
Miner Business
Miner BusinessMiner Business
Miner Business
 
Google Analytics API and OS analytics tools
Google Analytics API and OS analytics toolsGoogle Analytics API and OS analytics tools
Google Analytics API and OS analytics tools
 

Turbó fokozat

  • 1. Turbó fokozat nginx, Redis, Node.js Sunday, October 4, 2009
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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 Apache- csal 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. Redis: replikáció Több adatbázist képes összeszinkronizálni: MASTER-SLAVE mode% Sunday, October 4, 2009
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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