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
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
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
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