Turbó fokozat
-
Upload
andras-barthazi -
Category
Technology
-
view
5.051 -
download
0
description
Transcript of Turbó fokozat
Turbó fokozatnginx, Redis, Node.js
Sunday, October 4, 2009
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
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á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
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 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
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 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
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
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é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
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. 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
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ű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
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
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
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
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
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
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
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.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
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ő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
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
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á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