Turbó fokozat
                            nginx, Redis, Node.js




Sunday, October 4, 2009
Az előadó

                          Bártházi András
                          mailto:andras beigli barthazi pont hu
     ...
Miről lesz szó?

                          Mitől lesz gyors egy szolgáltatás?

                          Eszközök, melyek ...
Gyors webszolgáltatások
                          Melyeket nem feltétlenül kell komolyan venni, de...

               Nyom...
Turbó gomb

                Használd az erőt!

                Ma már egy 4 magos, 16 GB
                memóriát tartalma...
Statikus HTML
                Nagyon sok weboldal kivitelezhető
                HTML-ként

                Lehet generálni...
Kódolás assemblyben

               Ha nem is assembly-ben, de C/C++-
               ben egész használható megoldások
    ...
NOSQL, gyors SQL
                az sql nyelv sok esetben “felesleges”
                lehet

                gyors, egysz...
nginx
                orosz fejlesztésű webszerver, leginkább a lighttpd-hoz hasonlít

                http://nginx.net/

...
nginx
                          Bár kevesebb szó esik róla, mégis ismert projektek is
                          használják...
nginx: lehetőségek
                          Alapfunkciókat ismeri:

                            hozzáférés blokkolás IP c...
nginx: dokumentáció

                          alapvetően orosz projekt, orosz dokumentációval

                          ...
nginx: működés

                          eltérően az Apache-tól, nincsenek külön szálak indítva
                         ...
nginx: sebesség

                          a sebesség nagyon sokféleképpen mérhető:

                            kis stati...
nginx: sebesség

                          ide jött volna különböző mérésekkel igazolva, hogy
                          mi...
nginx: sebesség

                          memóriában, processzor terhelésben viszont egyértelmű
                         ...
nginx: mérések
                          a méréseket egy négyprocesszoros, Core 2 quad szerveren,
                        ...
nginx vs. lighttpd
                          személyesen nem végeztem méréseket, nincsenek tapasztalatok

                ...
nginx: használat
                          mi a következőkre használjuk a projektjeinkben:

                            st...
Redis: tulajdonságok

                          Hipergyors fejlesztés: pár hónap alatt 1.0-s kiadás

                     ...
Redis: tulajdonságok

                          Alapvetően egy kulcs-érték alapú, az adatokat
                          me...
Redis: tulajdonságok

                          nagyon gyors kiszolgálás:
                          másodpercenként 100.00...
Redis: egyszerű

                          nem igényel különösebb konfigurációt, gyorsan
                          kipróbál...
Redis: alapműveletek
                          SET kulcs érték

                          GET kulcs, MGET kulcs1 kulcs2 ku...
Redis: alapműveletek
                          KEYS minta
                          azon elemek listája, melyek kulcsa min...
Redis: listaműveletek
                          RPUSH kulcs érték, LPUSH kulcs érték
                          elem beszúr...
Redis: listaműveletek
                          LINDEX kulcs index
                          a “kulcs” lista egy elemének ...
Redis: halmazműveletek
                          SADD kulcs érték, SREM kulcs érték, SPOP kulcs

                         ...
Redis: halmazműveletek
                          SINTER kulcs1 kulcs2 kulcsN,
                          SINTERSTORE célkul...
Redis: rendezés
                 listával és halmazzal is működik

                 SORT kulcs
                 SORT kulcs...
Redis: mentés
                          konfig fájlban hangolható:

                            x másodpercenként

        ...
Redis: replikáció


                          Több adatbázist képes összeszinkronizálni:
                          MASTER-...
Redis: backup


                          az adatbázis perzisztens része egy darab fájl

                          leá%ás ...
Redis: egyebek

                          egyszerű, saját szöveges protoko%

                          példakódként egy eg...
Redis: használat


                          IWIW alkalmazásaink mögötti adattároláshoz

                          Miner m...
Node.js
                          event I/O engine a V8 JavaScript motorhoz

                          alapvető célja skál...
Node.js: tulajdonságok

                          Hipergyors fejlesztés

                          Ke%emes közösség (levli...
Node.js: I/O

                          Alapvetően támogatja a következő I/O műveleteket:

                            kon...
Node.js: sebesség

                          Nagyon gyors webszerver

                          10.000 kérést, 1000 konkur...
Node.js: sebesség

                          Event Machine (Ruby) és Node.js összehasonlítás
                          For...
Node.js: Comet

                          Mivel memóriafoglalása minimális, i%etve esemény
                          alapú...
Node.js

                          Bár fiatal projekt, de:

                            mivel JavaScript, kész JavaScript k...
Node.js
                          Érdekesebb kapcsolódó projektek:

                            Redis kliens, CouchDB klie...
Node.js: használat

                          A Miner Toolbar megoldásának kiszolgálója készül
                          N...
Köszönet

                          Bártházi András
                          mailto:andras beigli barthazi pont hu
      ...
Upcoming SlideShare
Loading in...5
×

Turbó fokozat

2,838

Published on

Eszközök gyors weboldalak készítéséhez

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,838
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Turbó fokozat

  1. 1. Turbó fokozat nginx, Redis, Node.js Sunday, October 4, 2009
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 32. Redis: replikáció Több adatbázist képes összeszinkronizálni: MASTER-SLAVE mode% Sunday, October 4, 2009
  33. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×