Óriási adathalmaz, hatalmas feladat, szerverhegyek, mit tegyek... A mágikus szavak: MapReduce, BigTable, GFS. Ilyen cuccra nagy valószínűséggel sohasem lesz szükséged, de érdekes. Marha sokat küzdöttem, hogy viszonylag érthető maradjon a dolog... remélem sikerült.
A probléma: óriási adathalmazokat, amik nem férnek el egy, de egy tucat szerveren sem egyszerre kell feldolgozni, mintha csak egyetlen Excel tábla lenne.
Feltételezem belegondoltál már abba, hogy mi történik egy Google kereséskor. Az nyilván nem járható út, hogy az összes Google adatot beleverik egy MySQL-be és lenyomnak a torkán egy SQL lekérdezést. Mennyi adatról van szó? A Google kereső kábé 500 petabyte, azaz 500 000 terabyte adatban keres jelenleg, ami napról napra nő.
A feladathoz nem használnak klasszikus értelemben vett adatbáziskezelő szervereket, hanem három fő komponensre alapoznak:
Ez egy keretrendszer, vagy inkább modell, amit a Google fejlesztett ki a probléma megoldására. A PageRank ugyan halálra sztárolt innovációjuk, de a MapReduce-tól tud egyáltalán működni a Google gépezet, ennyire fontos ügyről van tehát szó.
A MapReduce egy 6 részre osztott folyamat, ami pongyolán magyarázva így néz ki:
Általában csak a Map és Reduce részeket kell megírni, a többit elintézi a rendszer. A legtöbb Google szolgáltatás alapja egy jól megírt MapReduce. Egy MapReduce kód mérete általában 100 sor alatt van, marhára csak a lényegre kell koncentrálni, nagyon kényelmes! Nem véletlen, a Google-nél nagyon nagy agyak vannak.
A MapReduce igényeihez nem volt megfelelő fájlrendszer. A fő probléma az, hogy az adatokat bazi nagy, általában 100GB körüli fájlokban kell tárolni, ráadásul fürtözötten, hiszen petabyte-okról van szó. A másik jellegzetesség, hogy ezeket nagyon ritkán kell csak törölni, felülírni vagy csökkenteni a méretüket, leginkább csak hozzáírnak a végükhöz (append).
Így hát a Google kifejlesztett egy sajátot, ez a GFS. Őt ne úgy képzeld viszont el, hogy felteheted rá a filmjeidet vagy az oprendszeredet, nem erre van, nem is tudja ezt.
Nincs a Google méreteihez elegendő teljesíményű adatbáziskezelő rendszer a világon, pedig ilyenre mindig szükség van, MapReduce ide vagy oda. A Google elég nagy, csinált magának egyet.
A BigTable nagyon gyors, nagyon nagy és felrúgja a hagyományos adatbázis-kezelők fő működési elveit. A GFS nagy fájljainak kezelésére van kihegyezve és a gyorsaság érdekében rettentő sok redundancia van benne, a motorháztető alatt fittyet hány a suliban tanult relációs adatbázis-kezelésre és normalizálásra.
Ez olyan, mint amikor a fizikusok belefutottak a Newton-i elméletek határaiba, vagy méginkább a kvantumfizikába. A mi hétköznapi paramétereinkkel egy csomó hagyományos fizikai elv kiválóan működik és használható, de vannak extrém körülmények, ahol már másképp kell gondolkodni. A BigTable pontosan ez a MySQL-hez képest.
BigTable-n fut a Youtube, Google Reader, Google Maps, Google Earth, Blogger.com, Orkut... szinte mindenük.
Ha elindítod a keresést, akkor a Google megnézi, hogy kerestek-e már ilyet és elég friss-e az eredmény. A legtöbb keresés ilyen és ekkor szimplán megkapod a már eltárolt eredményt.
Ha viszont nem kerestek még erre vagy túl régen, akkor felizzik a gépezet. Fontos tudnod, hogy ekkor nem fut neki a rendszer átnézni mind az 500 petabytot csak neked, csak most. Előfeldolgozott, előkészített eredmények kombinációját kapod. Ezt az előfeldolgozást hívják indexálásnak és a Google folyamatosan végzi a nap 24 órájában. (Állítólag 24 óra alatt 20-25 petabyte-ot dolgoznak fel.)
A Google Robot ugye végiglátogatja az oldalakat és visszaküldi azok kódját. Ekkor a kód bekerül egy GFS fájlba, amit a folyamatosan háttérben futó "keresőindexáló" MapReduce folyamatok majd egyszer feldolgoznak. Állítólag ők huszan vannak, húsz MapReduce dolgozza fel a weblapod kódját húszféleképpen, hogy utána szerepelhessen a keresések között. Szeretnéd megnézni a PageRank MapReduce kódját, mi? Ha!
A Google szervereinél nem kell valami csúcsszuper vasakra gondolni. Rendkívül szimpatikus filozófiájuk az, hogy hibatűrő, minden gagyin elfutkorászó rendszereket kell készíteni.
Jelenleg nagy valószínűséggel szimpla négymagos Intel Xeon szervereket birizgálsz 4GB RAM-mal, 1 gigás hálókártyával és kettő darab teljesen hétköznapi 160GB-os IDE vinyóval, amit a sarkon is megvehetsz. Belőlük 2006-os becslések szerint 450 000 darab volt, most már 1 mila fölött vannak és állítólag évente 500 000-et szeretnének vásárolni... el sem tudom képzelni. Olyan számok ezek, hogy már levegőnek nézem.
Ezt gyorsan elintézem: az eddig írt dolgok a többi nagyra is érvényesek(pl. Microsoft és Yahoo), hasonlókat írtak, hasonló elven működnek. A Yahoo megoldásának neve Hadoop, a Microsoft-é Dryad.
Igen, írok majd a Hadoop-ról és kapcsolódó részeiről, mert a Yahoo-nak köszönhetően már te is játszhatsz nagyfiús dolgokkal.
Műszaki oldalon tehát a Google/Yahoo/Microsoft csata jórésze a MapReduce/Hadoop/Dryad tengelyen mozog. Állítólag a MapReduce a legjobb, a Yahoo a Hadoop kinyitásával (open-source!) próbálja utolérni, a Microsoft pedig házon belüli erőforrásokkal. Ugye innentől kezdve kap egy plusz ízt az MS/Yahoo ügy?
P.S.: nézd meg ezt a MapReduce PDF-et. 2004-ben publikálta a Google, elég sok mindent kiadtak a nyilvánosságnak. A legérdekesebb a legvégén lévő néhány sor kód a szószámolásos példáról.
iMect means internet, media and other cool things. iMect is a small company near lake Velence, Hungary. We’ve a big footer on every page where you can discover what we do and what happens with us.
Az iMect jelentése: internet, média és egyéb király dolgok. Egy kis cég vagyunk közel a Velencei-tóhoz. Minden oldalon van egy nagy lábléc, ahol felfedezheted, hogy mivel foglalkozunk.