Turbó fokozat
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Turbó fokozat

on

  • 5,030 views

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

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

Statistics

Views

Total Views
5,030
Views on SlideShare
4,515
Embed Views
515

Actions

Likes
2
Downloads
3
Comments
0

8 Embeds 515

http://webakademia.hu 480
http://www.linkedin.com 15
https://www.linkedin.com 6
http://www.slideshare.net 5
http://webcache.googleusercontent.com 4
http://www.slideee.com 3
http://feeds.feedburner.com 1
resource://brief-content 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Turbó fokozat Presentation Transcript

  • 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