turb fokozat - webconf.hu · lrange kulcs kezdet vég lista egy részének lekérdezése ltrim...

45
Turbó fokozat nginx, Redis, Node.js Sunday, October 4, 2009

Upload: others

Post on 16-Oct-2019

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Turb fokozat - webconf.hu · 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

Turbó fokozatnginx, Redis, Node.js

Sunday, October 4, 2009

Page 2: Turb fokozat - webconf.hu · 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

Az előadó

Bártházi Andrásmailto:andras beigli barthazi pont hutwitter:ba78http://webakademia.huhttp://web.conf.hu/2009/program#Turbó fokozat

Programozókat keresünk Miner.hu kereső projektünkhöz

Sunday, October 4, 2009

Page 3: Turb fokozat - webconf.hu · 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

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

Page 4: Turb fokozat - webconf.hu · 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

Gyors webszolgáltatásokNyomjuk 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

Melyeket nem feltétlenül kell komolyan venni, de...

Sunday, October 4, 2009

Page 5: Turb fokozat - webconf.hu · 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

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

Page 6: Turb fokozat - webconf.hu · 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

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

Page 7: Turb fokozat - webconf.hu · 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

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

Page 8: Turb fokozat - webconf.hu · 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

NOSQL, gyors SQLaz 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

Page 9: Turb fokozat - webconf.hu · 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

nginxorosz 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

Page 10: Turb fokozat - webconf.hu · 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

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

Page 11: Turb fokozat - webconf.hu · 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

nginx: lehetőségekAlapfunkció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

Page 12: Turb fokozat - webconf.hu · 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

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

Page 13: Turb fokozat - webconf.hu · 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

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

Page 14: Turb fokozat - webconf.hu · 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

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

Page 15: Turb fokozat - webconf.hu · 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

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

Page 16: Turb fokozat - webconf.hu · 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

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

Page 17: Turb fokozat - webconf.hu · 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

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

Page 18: Turb fokozat - webconf.hu · 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

nginx vs. lighttpdszemé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

Page 19: Turb fokozat - webconf.hu · 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

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

Page 20: Turb fokozat - webconf.hu · 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

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

Page 21: Turb fokozat - webconf.hu · 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

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

Page 22: Turb fokozat - webconf.hu · 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

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

Page 23: Turb fokozat - webconf.hu · 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

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

Page 24: Turb fokozat - webconf.hu · 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

Redis: alapműveletekSET 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

Page 25: Turb fokozat - webconf.hu · 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

Redis: alapműveletek

KEYS mintaazon elemek listája, melyek kulcsa mintával kezdődik

RANDOMKEY

RENAME régikulcs újkulcs

DBSIZE

EXPIRE kulcs szám

Sunday, October 4, 2009

Page 26: Turb fokozat - webconf.hu · 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

Redis: listaműveletek

RPUSH kulcs érték, LPUSH kulcs értékelem beszúrása a “kulcs” lista elejére, végére

LLEN kulcs

LRANGE kulcs kezdet véglista egy részének lekérdezése

LTRIM kulcs kezdet vég

Sunday, October 4, 2009

Page 27: Turb fokozat - webconf.hu · 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

Redis: listaműveletekLINDEX kulcs indexa “kulcs” lista egy elemének lekérdezése

LSET kulcs index értékadott indexű elem felülírása

LREM kulcs darab értékadott értékű elemek eltávolítása a listából

LPOP kulcs, RPOP kulcs

Sunday, October 4, 2009

Page 28: Turb fokozat - webconf.hu · 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

Redis: halmazműveletek

SADD kulcs érték, SREM kulcs érték, SPOP kulcs

SMEMBERS kulcs

SMOVE kulcs1 kulcs2 érték

SCARD kulcselemek száma az adott halmazban

SISMEBER kulcs érték

Sunday, October 4, 2009

Page 29: Turb fokozat - webconf.hu · 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

Redis: halmazműveletekSINTER kulcs1 kulcs2 kulcsN,SINTERSTORE célkulcs kulcs1 kulcs2 kulcsNmetszet lekérése, i%etve metszet tárolása

SUNION kulcs1 kulcs2 kulcsNSUNIONSTORE célkulcs kulcs1 kulcs2 kulcsNösszeg lekérése, i%etve összeg tárolása

SDIFF kulcs1 kulcs2 kulcsNSDIFFSTROE célkulcs kulcs1 kulcs2 kulcsNkülönbség lekérése, i%etve különbség letárolása

Sunday, October 4, 2009

Page 30: Turb fokozat - webconf.hu · 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

Redis: rendezéslistával és halmazzal is működik

SORT kulcsSORT kulcs DESCSORT 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

Page 31: Turb fokozat - webconf.hu · 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

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

Page 32: Turb fokozat - webconf.hu · 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

Redis: replikáció

Több adatbázist képes összeszinkronizálni:MASTER-SLAVE mode%

Sunday, October 4, 2009

Page 33: Turb fokozat - webconf.hu · 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

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

Page 34: Turb fokozat - webconf.hu · 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

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

Page 35: Turb fokozat - webconf.hu · 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

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

Page 36: Turb fokozat - webconf.hu · 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

Node.jsevent 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

Page 37: Turb fokozat - webconf.hu · 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

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

Page 38: Turb fokozat - webconf.hu · 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

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

Page 39: Turb fokozat - webconf.hu · 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

Node.js: sebesség

Nagyon gyors webszerver

10.000 kérést, 1000 konkurens klienstőlpá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

Page 40: Turb fokozat - webconf.hu · 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

Node.js: sebesség

Event Machine (Ruby) és Node.js összehasonlításForrá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

Page 41: Turb fokozat - webconf.hu · 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

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

Page 42: Turb fokozat - webconf.hu · 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

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

Page 43: Turb fokozat - webconf.hu · 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

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

Page 44: Turb fokozat - webconf.hu · 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

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

Page 45: Turb fokozat - webconf.hu · 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

Köszönet

Bártházi Andrásmailto:andras beigli barthazi pont hutwitter:ba78http://webakademia.huhttp://web.conf.hu/2009/program#Turbó fokozat

Programozókat keresünk Miner.hu kereső projektünkhöz

Sunday, October 4, 2009