Z´apadoˇcesk´a univerzita v Plzni Fakulta aplikovan´ych vˇed Katedra informatiky a v´ypoˇcetn´ı techniky
Diplomov´ a pr´ ace
KIVFS - Datov´ eu ´ loˇ ziˇ stˇ e
Plzeˇn, 2012
Radek Strejc
Origin´ al zad´ an´ı pr´ ace • ten s ˇcerven´ ym kulat´ ym raz´ıtkem v jednom v´ ytisku pr´ace • kopie zad´an´ı ve druh´em
Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u.
V Plzni dne 17. kvˇetna 2012, Radek Strejc
...........................
Abstract KIVFS - Data storage The project KIVFS is the new experimental implementation of distributed file system. The first goal of this diploma thesis is to analyze the weak points of the data storage layer used in KIVFS on the server side from the view of requirements on the very large data storages. The second goal is to find and describe the possible ways and options for the optimalization. Following to this is another goal which is to do the implementation of the chosen options. The final aim is to test and proove that the new implemented functionalities are effective.
Obsah ´ 1 Uvod 1.1 Projekt KIVFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 C´ıle pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1
2 Obecn´ a problematika datov´ ych u ´ loˇ ziˇ st’ 2.1 Probl´em nedostateˇcn´e kapacity . . . . . . . . . . . . . . . . . . . . . ˇ sen´ı v jednoduch´em prostˇred´ı . . . . . . . . . . . . . . . . . 2.1.1 Reˇ ˇ sen´ı v rozs´ahl´em prostˇred´ı . . . . . . . . . . . . . . . . . . . 2.1.2 Reˇ
2 2 2 3
3 Rozs´ ahl´ a datov´ au ´ loˇ ziˇ stˇ e 3.1 Moˇznosti realizace . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Centralizovan´e datov´e u ´loˇziˇstˇe . . . . . . . . . . . . . . . . 3.1.2 Distribuovan´e datov´e u ´loˇziˇstˇe . . . . . . . . . . . . . . . . 3.2 Realizace rozs´ahl´eho datov´eho u ´loˇziˇstˇe v distribuovan´em prostˇred´ı
. . . .
4 4 4 5 7
. . . . . . . . . . . . . . . .
8 8 9 9 9 9 11 12 12 13 14 14 15 15 16 16 16
. . . .
18 18 20 20 20
. . . . .
21 23 23 24 24 25
4 Distribuovan´ e souborov´ e syst´ emy 4.1 Transparentnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . ˇ alovatelnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Sk´ 4.3 Jmenn´ y prostor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Hiearchick´ y jmenn´ y prostor . . . . . . . . . . . . . . . . . 4.4 Pˇr´ıstup k soubor˚ um . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Stavov´e a bezestavov´e servery . . . . . . . . . . . . . . . . . . . . 4.6 Replikace dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 Konzistenˇcn´ı modely . . . . . . . . . . . . . . . . . . . . . 4.6.2 Konzistenˇcn´ı protokoly . . . . . . . . . . . . . . . . . . . . 4.7 Kliensk´e cache a offline operace . . . . . . . . . . . . . . . . . . . 4.7.1 Spr´ava verze souboru . . . . . . . . . . . . . . . . . . . . . 4.8 Sd´ılen´ı soubor˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8.1 S´emantika sd´ılen´ı . . . . . . . . . . . . . . . . . . . . . . . 4.8.2 Vylouˇcen´ı soubˇeˇzn´eho pˇr´ıstupu pomoc´ı zamyk´an´ı . . . . . 4.8.3 Vylouˇcen´ı soubˇeˇzn´eho pˇr´ıstupu pomoc´ı pˇred´av´an´ı povˇeˇren´ı 4.9 Bezpeˇcnost uloˇzen´ ych dat . . . . . . . . . . . . . . . . . . . . . . 5 Distribuovan´ y souborov´ y syst´ em 5.1 Architektura . . . . . . . . . . . 5.1.1 Autentizaˇcn´ı vrstva . . . 5.1.2 Synchronizaˇcn´ı vrstva . 5.1.3 Datov´a vrstva . . . . . .
KIVFS . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
6 Datov´ eu ´ loˇ ziˇ stˇ e v KIVFS 6.1 Pˇrehled poskytovan´ ych sluˇzeb . . . . . . . . . . . . . . . . . . . 6.2 N´avrhy pro optimalizaci a rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . 6.2.1 Jmenn´ y prostor . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Efektivn´ı vyuˇzit´ı sluˇzeb relaˇcn´ıho datab´azov´eho syst´emu 6.2.3 Model pˇr´ıstupu k soubor˚ um . . . . . . . . . . . . . . . .
. . . .
. . . . .
. . . .
. . . . . . . . . . . . . . . .
. . . .
. . . . .
6.2.4 6.2.5 6.2.6 6.2.7 6.2.8 6.2.9 6.2.10 6.2.11 6.2.12
Vylouˇcen´ı soubˇeˇzn´eho pˇr´ıstupu k souboru . . . Podpora klientsk´e lok´aln´ı cache a offline operac´ı Replikace a konzistence uloˇzen´ ych dat . . . . . S´emantika sd´ılen´ı souboru . . . . . . . . . . . . Obnova po v´ ypadku . . . . . . . . . . . . . . . Spr´ava uloˇzen´ ych dat a jejich deduplikace . . . Zabezpeˇcenost uloˇzen´ ych dat . . . . . . . . . . Kv´oty virtu´aln´ıch svazk˚ u . . . . . . . . . . . . . Tunelov´an´ı pˇr´ıstupu k soubor˚ um . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
25 25 26 27 27 27 29 29 31
7 Sd´ılen´ a knihovna libkivfscore
32
8 Optimalizace datov´ eho u ´ loˇ ziˇ stˇ e KIVFS 8.1 Metadatov´a mezivrstva . . . . . . . . . . . . . . . . . . 8.1.1 Vlastn´ı datab´azov´ y konektor . . . . . . . . . . . 8.1.2 Mapov´an´ı relac´ı na datov´e typy . . . . . . . . . 8.2 Vzd´alen´ y pˇr´ıstup k soubor˚ um a relaˇcn´ı s´emantika jejich 8.2.1 Otevˇren´ı souboru . . . . . . . . . . . . . . . . . 8.2.2 Pˇr´ıprava na pˇrenos obsahu souboru . . . . . . . 8.2.3 Pˇrenos obsahu souboru . . . . . . . . . . . . . . 8.2.4 Dokonˇcen´ı pˇrenosu obsahu souboru . . . . . . . 8.2.5 Uzavˇren´ı souboru . . . . . . . . . . . . . . . . . 8.3 Rozdˇelov´an´ı souboru do podsoubor˚ u . . . . . . . . . . 8.4 Seznam pˇr´ıstupov´ ych pr´av . . . . . . . . . . . . . . . . 8.4.1 Vyhodnocen´ı omezen´eho pˇr´ıstupu k souboru . . 8.4.2 Spr´ava seznamu pˇr´ıstupov´ ych pr´av . . . . . . . ´ 8.5 Uprava vz´ajemn´eho vylouˇcen´ı pˇr´ıstupu k soubor˚ um . . 8.6 Podpora klientsk´e lok´aln´ı cache . . . . . . . . . . . . . 8.7 Transparentn´ı pˇr´ıstup k ˇsifrovan´ ym dat˚ um . . . . . . . 8.7.1 Pouˇzit´e algoritmy . . . . . . . . . . . . . . . . . 8.7.2 Transparentn´ı pˇr´ıstup k ˇsifrovan´ ym soubor˚ um . 8.8 Kv´oty virtu´aln´ıch svazk˚ u . . . . . . . . . . . . . . . . . 8.8.1 Rezervace m´ısta . . . . . . . . . . . . . . . . . . 8.8.2 Spr´ava kv´ot . . . . . . . . . . . . . . . . . . . . 8.9 Tunelov´an´ı pˇrenosu souboru . . . . . . . . . . . . . . . 8.9.1 Vytvoˇren´ı tunelu . . . . . . . . . . . . . . . . . 8.10 Replikace . . . . . . . . . . . . . . . . . . . . . . . . . 8.10.1 Zjiˇstˇen´ı zastaral´ ych replik . . . . . . . . . . . . 8.10.2 Zjiˇstˇen´ı aktu´aln´ıch replik . . . . . . . . . . . . . 8.10.3 Aktualizace zastaral´e repliky souboru . . . . . . 8.10.4 Dokonˇcen´ı aktualizace zastaral´e repliky souboru 8.11 Deduplikace . . . . . . . . . . . . . . . . . . . . . . . . 8.11.1 Zjiˇstˇen´ı zdrojov´ ych kandid´at˚ u . . . . . . . . . . 8.11.2 Deduplikace podsoubor˚ u . . . . . . . . . . . . . 8.11.3 Odstranˇen´ı nepouˇzit´ ych zdrojov´ ych soubor˚ u . . 8.11.4 Otevˇren´ı deduplikovan´eho podsouboru . . . . . 8.12 Implementace logov´an´ı poˇzadavk˚ u. . . . . . . . . . . .
33 35 36 37 37 38 39 39 40 40 41 41 42 44 44 45 46 46 46 47 48 48 48 49 50 50 51 51 51 52 52 53 53 53 54
. . . . . . . . . . . . sd´ılen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Implementace vlastn´ıho klienta 10 V´ ykonnostn´ı testy 10.1 Pˇrenosov´a rychlost . . . . . . 10.1.1 Vyhodnocen´ı v´ ysledk˚ u 10.2 Tunelovan´e spojen´ı . . . . . . 10.2.1 Vyhodnocen´ı v´ ysledk˚ u
55
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
56 56 60 61 62
11 Organizace zdrojov´ ych k´ od˚ u a jejich pˇ reklad 63 11.1 Pˇreklad a instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 11.2 Spuˇstˇen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 12 Z´ avˇ er
65
13 Pˇ rehled zkratek a pouˇ zit´ eho znaˇ cen´ı
66
14 Pˇ r´ılohy
70
´ Uvod
1 1.1
Projekt KIVFS
V r´amci projektu KIVFS prob´ıh´a v´ yvoj nov´e implementace stejnojmenn´eho distribuovan´eho souborov´eho syst´emu (d´ale jen DFS) s c´ılem umoˇznit dostupnost dat na nejrozˇs´ıˇrenˇejˇs´ıch desktopov´ ych (Microsoft Windows, GNU/LINUX) a mobiln´ıch (Windows Mobile, Android, iOS) platform´ach. Hlavn´ım d˚ uvodem vzniku projektu je ne´ uplnost existuj´ıc´ıch DFS (jako jsou napˇr. OpenAFS[1], Coda[2] ˇci NFSv4[3]), kter´a souvis´ı pˇredevˇs´ım s: • ne´ uplnou implementac´ı funkc´ı (napˇr. ne´ upln´a transparentnost, chybˇej´ıc´ı online replikace), • omezen´ ymi moˇznostmi nasazen´ı (napˇr. kv˚ uli pouˇz´ıv´an´ı NAT), a nespokojenost s: • malou podporou mobiln´ıch zaˇr´ızen´ı (mobiln´ı telefony, tablety, apod.), • sloˇzitou rozˇsiˇritelnost´ı (napˇr. nepˇrehledn´e zdrojov´e k´ody), • licenˇcn´ımi omezen´ımi (napˇr. patentov´a omezen´ı, nekompatibilita GNU/GPL). Jedn´ım z c´ıl˚ u projektu je nahradit souˇcasnˇe pouˇzit´ y OpenAFS na katedˇre informatiky a v´ ypoˇcetn´ı techniky.
1.2
C´ıle pr´ ace
C´ılem t´eto pr´ace je nav´azat na v´ ysledky m´e dˇr´ıve obh´ajen´e bakal´aˇrsk´e pr´ace, v r´amci kter´e bylo navrˇzeno a implementov´ano z´akladn´ı datov´e u ´loˇziˇstˇe KIVFS.[18] Konkr´etnˇe jde o proveden´ı anal´ yzy slab´ ych m´ıst souˇcasn´e verze KIVFS z hlediska poˇzadavk˚ u na rozs´ahl´a datov´a u ´loˇziˇstˇe, na kterou nav´aˇze n´avrh a implemenentace ˇreˇsen´ı vedouc´ı k jejich odstranˇen´ı. Ve v´ ysledku pr´ace je poˇzadov´ano m´ıt funkˇcn´ı a optimalizovanou implementaci datov´eho u ´loˇziˇstˇe KIVFS, kter´a v porovn´an´ı se souˇcasnou verz´ı bude prokazovat jednoznaˇcnˇe lepˇs´ı v´ ykonnostn´ı v´ ysledky, stabilitu a rozˇs´ıˇrenou funkcionalitu.
1
Obecn´ a problematika datov´ ych u ´ loˇ ziˇ st’
2
Kaˇzd´ y uˇzivatel ˇci syst´emov´ y spr´avce se v souvislosti s potˇrebou uchov´avat a spravovat r˚ uzn´a data dˇr´ıve nebo pozdˇeji setk´a s r˚ uzn´ ymi probl´emy, kter´e se pˇr´ımo t´ ykaj´ı jeho fyzick´eho datov´eho u ´loˇziˇstˇe. Mezi ˇcast´e probl´emy patˇr´ı: • nedostateˇcn´a kapacita, • bezpeˇcnost uloˇzen´ ych dat, • omezen´a dostupnost, • omezen´a v´ ykonnost a ˇsk´alovatelnost. Probl´em nedostateˇcn´e kapacity datov´eho u ´loˇziˇstˇe m´a pˇr´ımou souvislost s jeho ˇsk´alov´an´ım a bezpeˇcnost´ı uloˇzen´ ych dat z hlediska prevence proti jejich ztr´atˇe (z´alohov´an´ı) ˇci zneuˇzit´ı (asymetrick´e ˇsifrov´an´ı). Stejnˇe tak omezen´a dostupnost datov´eho u ´loˇziˇstˇe, kter´a m˚ uˇze b´ yt zp˚ usoben´a napˇr. nemoˇznost´ı uˇzivatele pˇristupovat ke sd´ılen´emu obsahu u ´loˇziˇstˇe skrze s´ıt’ vlivem neˇcekan´eho v´ ypadku, vede k probl´emu souvisej´ıc´ı s aktu´alnˇe nedostateˇcnou (resp. chybˇej´ıc´ı) kapacitou.
2.1
Probl´ em nedostateˇ cn´ e kapacity
Nedostateˇcn´a kapacita datov´eho u ´loˇziˇstˇe vede k nemoˇznosti ukl´ad´an´ı dalˇs´ıch dat. M˚ uˇze tak´e zp˚ usobit zpomalen´ı cel´eho syst´emu a v extr´emn´ım pˇr´ıpadˇe i jeho nepouˇzitelnost. Mezi ˇcast´e pˇr´ıˇciny nedostateˇcn´e kapacity lze uv´est: • st´ale se zvˇetˇsuj´ıc´ı objemy bˇeˇzn´ ych pracovn´ıch a multimedi´aln´ıch dat, kter´a je pˇr´ıpadnˇe nutn´a m´ıt z´alohovan´a a po ˇcase i archivovan´a (prevence proti jejich ztr´atˇe), • nedostupnost datov´eho u ´loˇziˇstˇe vlivem jeho neˇcekan´eho v´ ypadku nebo v krajn´ım pˇr´ıpadˇe fyzick´eho selh´an´ı, • omezuj´ıc´ı parametry datov´eho u ´loˇziˇstˇe, kter´e mohou b´ yt: – nastaven´e samotn´ ym spr´avcem (diskov´e kv´oty, apod.) ˇci operaˇcn´ım syst´emem (rezervace diskov´eho prostoru, apod.), – d´any jeho samotnou implementac´ı (napˇr. maxim´aln´ı doporuˇcovan´a velikost 2TB svazku u OpenAFS[12]). 2.1.1
ˇ sen´ı v jednoduch´ Reˇ em prostˇ red´ı
V jednoduch´em prostˇred´ı (napˇr. dom´acnosti a mal´e firemn´ı s´ıtˇe), ve kter´em se vyskytuj´ı jednotky uˇzivatel˚ u, je moˇzn´e probl´em nedostateˇcn´e kapacity souˇcasn´eho datov´eho u ´loˇziˇstˇe vyˇreˇsit velmi lehce. D´ıky st´ale se zvˇetˇsuj´ıc´ım kapacit´am a z´aroveˇ n ’ sniˇzuj´ıc´ım se cen´am na trhu bˇeˇznˇe dostupn´ ych datov´ ych u ´loˇziˇst lze st´avaj´ıc´ı datov´e u ´loˇziˇstˇe pohodlnˇe rozˇs´ıˇrit ˇci zcela nahradit nov´ ym. K realizaci ˇsk´alovateln´eho datov´eho u ´loˇziˇstˇe je moˇzn´e vyuˇz´ıt technologi´ı:
2
• Logical Volume Management (LVM), • Redundant Array of Inexpensive Disks (RAID). Ty umoˇzn ˇuj´ı vytvoˇrit rozs´ahl´e datov´e u ´loˇziˇstˇe sloˇzen´e z jednoho a v´ıce datov´ ych u ´loˇziˇst’ (diskov´ ych odd´ıl˚ u) jejich sjednocen´ım do jednoho logick´eho celku (odd´ılu) oznaˇcovan´eho u LVM jako logick´ y odd´ıl ˇci jako pole u RAID. U obou technologi´ı je nutn´a podpora operace pro zmˇenu velikosti kapacity odd´ılu ze strany pouˇzit´eho souborov´eho syst´emu, kter´e v pˇr´ıpadˇe velmi rozs´ahl´ ych datov´ ych u ´loˇziˇst’ m˚ uˇze pˇredch´azet ˇcasovˇe n´aroˇcn´a rekonstrukce a synchronizace pole po zaˇclenˇen´ı dalˇs´ıho diskov´eho odd´ılu. Dalˇs´ım ˇreˇsen´ım m˚ uˇze b´ yt vyuˇz´ıt´ı sluˇzeb online datov´ ych u ´loˇziˇst’. Jejich velkou v´ yhodou je dostupnost uloˇzen´ ych dat kdekoliv, kde je dostupn´e pˇripojen´ı k s´ıti. Nev´ yhodou jsou v´ yˇse n´aklad˚ u za poskytovanou sluˇzbu. Ty postupnˇe pˇres´ahnou cenu bˇeˇzn´eho datov´eho u ´loˇziˇstˇe dostupn´eho na trhu. Mezi dalˇs´ı nev´ yhody patˇr´ı omezen´ı dostupnosti uloˇzen´ ych dat vlivem pomal´e pˇrenosov´e rychlosti pouˇzit´e linky a nutnost d˚ uvˇeˇrovat poskytovateli sluˇzby, ˇze j´ı bude poskytovat spolehlivˇe a uloˇzen´a data nebudou zneuˇzita tˇret´ı stranou. 2.1.2
ˇ sen´ı v rozs´ Reˇ ahl´ em prostˇ red´ı
V rozs´ahl´em prostˇred´ı (napˇr. firemn´ı a univerzitn´ı s´ıtˇe) je situace znaˇcnˇe sloˇzitˇejˇs´ı. Z mnohem vˇetˇs´ıho poˇctu uˇzivatel˚ u vypl´ yv´a i potˇreba spravovat nˇekolikan´asobnˇe vˇetˇs´ı objem uloˇzen´ ych dat, a proto rostou i n´aroky na cel´e datov´e u ´loˇziˇstˇe t´ ykaj´ıc´ı se jeho bezpeˇcnosti, redundance, ˇsk´alovatelnosti, apod. Kromˇe lok´aln´ıch u ´loˇziˇst’ jednotliv´ ych uˇzivatel˚ u se proto vyuˇz´ıvaj´ı i rozs´ahl´a datov´a u ´loˇziˇstˇe (obr´azek ˇc. 1), kter´a jsou pˇr´ıstupn´a pˇres poˇc´ıtaˇcovou s´ıt’.
Obr´azek 1: Rozs´ahl´e datov´e u ´loˇziˇstˇe.
3
3
Rozs´ ahl´ a datov´ au ´ loˇ ziˇ stˇ e
Rozs´ahl´a datov´a u ´loˇziˇstˇe v s´ıti jsou realizov´ana nˇekolika jednotkami aˇz stovkami fyzick´ ych datov´ ych u ´loˇziˇst’. K jejich obsahu je zprostˇredkov´an transparentn´ı zabezpeˇcen´ y pˇr´ıstup prostˇrednictv´ım jedn´e z n´asleduj´ıc´ıch forem abstrakce sd´ılen´ı dat: • sd´ılen´ı zaˇr´ızen´ı nebo jeho ˇca´st´ı na blokov´e u ´rovni s vyuˇzit´ım: – speci´aln´ıch s´ıt’ov´ ych komunikaˇcn´ıch protokol˚ u (napˇr. iSCSI[4], DRBD[5]), – komunikaˇcn´ıho rozhran´ı (napˇr. Fibre Channel[6]), • sd´ılen´ı soubor˚ u skrze s´ıt’ov´e souborov´e syst´emy (napˇr. OpenAFS[1], Coda[2], NFSv4[3]). Rozs´ahl´e datov´e u ´loˇziˇstˇe m´a z d˚ uvodu vyˇsˇs´ıch zˇrizovac´ıch a udrˇzovac´ıch n´aklad˚ u (ˇcas, finance) smysl pouˇz´ıvat v s´ıt´ıch vˇetˇs´ıch organizac´ı, kde jak´ ykoliv v´ ypadek datov´eho u ´loˇziˇstˇe a omezen´ı dostupnosti uloˇzen´ ych dat m˚ uˇze zp˚ usobit velk´e probl´emy. Z toho d˚ uvodu je u rozs´ahl´eho datov´eho u ´loˇziˇstˇe kladen nemal´ y d˚ uraz na jeho: • dostupnost, spolehlivost a v´ ykonnost, • centralizovanou spr´avu, • jednoduchou u ´drˇzbu, • ˇsk´alovatelnost, a v souvislosti s uloˇzen´ ymi daty i na moˇznost jejich: • z´alohov´an´ı, archivace, migrace • zabezpeˇcen´ı (napˇr. formou ˇsifrov´an´ı, omezen´ı pˇr´ıstupu), • sd´ılen´ı.
3.1
Moˇ znosti realizace
Kv˚ uli zm´ınˇen´emu transparentn´ımu pˇr´ıstupu nen´ı z hlediska koncov´ ych uˇzivatel˚ u znateln´ y rozd´ıl mezi r˚ uzn´ ymi typy rozs´ahl´ ych datov´ ych u ´loˇziˇst’. Z pohledu jejich spr´avce je ale lze rozliˇsit dle moˇznost´ı realizace. 3.1.1
Centralizovan´ e datov´ eu ´ loˇ ziˇ stˇ e
Pˇr´ıstup k cel´emu datov´emu u ´loˇziˇsti je poskytov´an pouze jedn´ım pˇr´ıstupov´ ym bodem v s´ıti. Ten je d´ale pro zjednoduˇsen´ı oznaˇcov´an jako uzel a je uvaˇzov´ano, ˇze datov´e u ´loˇziˇstˇe, ke kter´emu zprostˇredkov´av´a pˇr´ıstup, je jeho pˇr´ımou souˇca´st´ı. Pˇr´ıklad je zn´azornˇen na obr´azku ˇc. 2. Jednoduchost centralizovan´eho datov´eho u ´loˇziˇstˇe, kter´a vypl´ yv´a ze spr´avy pouze jednoho uzlu, pˇrin´aˇs´ı n´asleduj´ıc´ı v´ yhody:
4
Obr´azek 2: Centralizovan´e ˇreˇsen´ı rozs´ahl´eho u ´loˇziˇstˇe.
• rychlost nasazen´ı a okamˇzit´a funkˇcnost, • jednoduch´a u ´drˇzba a snadn´a spr´ava. Pouˇzit´ı pouze jednoho uzlu je ale z´aroveˇ n znaˇcnˇe omezuj´ıc´ı. Lze hovoˇrit o tzv. u ´zk´em hrdle, kter´e pˇrin´aˇs´ı n´asleduj´ıc´ı nev´ yhody: • omezen´e ˇsk´alov´an´ı uzlu (pouze do v´ yˇsky), • vysok´e n´aklady na poˇr´ızen´ı v´ ykonn´eho uzlu souvisej´ıc´ı s potˇrebou, co moˇzn´a nejv´ıce odd´alit ˇcasem nutnou inovaci, a hlavnˇe rizika: • nedostupnost vˇsech uloˇzen´ ych dat v pˇr´ıpadˇe v´ ypadku uzlu, • u ´spˇeˇsn´ ym (fyzick´ ym) u ´tokem z´ısk´a u ´toˇcn´ık pˇr´ıstup ke vˇsem uloˇzen´ ym dat˚ um. V´ yˇse uveden´e vlastnosti centralizovan´eho ˇreˇsen´ı jej pˇredurˇcuj´ı k vyuˇzit´ı pˇredevˇs´ım v menˇs´ıch s´ıt´ıch, ve kter´ ych moˇznost doˇcasn´eho v´ ypadku nepˇredstavuje z´avaˇzn´e probl´emy. 3.1.2
Distribuovan´ e datov´ eu ´ loˇ ziˇ stˇ e
V distribuovan´em prostˇred´ı m˚ uˇze b´ yt uzl˚ u zprostˇredkov´avaj´ıc´ıch pˇr´ıstup k datov´emu u ´loˇziˇsti v´ıce. Kaˇzd´ y z nich poskytuje kromˇe pˇr´ıstupu k vlastn´ımu datov´emu u ´loˇziˇsti i pˇr´ıstup k datov´ ym u ´loˇziˇst´ım ostatn´ıch uzl˚ u v s´ıti. Z hlediska uˇzivatele je d´ıky tomu pˇr´ıstup k dat˚ um st´ale transparentn´ı jako v pˇr´ıpadˇe centralizovan´eho ˇreˇsen´ı. Pˇr´ıklad distribuovan´eho datov´eho u ´loˇziˇstˇe je zn´azornˇen na obr´azku ˇc. 3. Srovn´an´ım distribuovan´eho ˇreˇsen´ı datov´eho u ´loˇziˇstˇe s jeho centralizovanou variantou lze usoudit, ˇze m´a n´asleduj´ıc´ı v´ yhody:
5
Obr´azek 3: Distribuovan´e ˇreˇsen´ı rozs´ahl´eho u ´loˇziˇstˇe.
• vˇetˇs´ı spolehlivost d´ıky vˇetˇs´ı odolnosti v˚ uˇci v´ ypadku (po v´ ypadku jednoho uzlu jsou nedostupn´a pouze ta data, kter´a byla uloˇzen´a jen na jeho datov´em u ´loˇziˇsti), • vˇetˇs´ı dostupnost dat d´ıky moˇznosti vytvoˇrit geograficky rozs´ahl´e datov´e u ´loˇziˇstˇe, • moˇznost vyvaˇzovat z´atˇeˇz mezi v´ıce uzly a sniˇzovat n´aroky na jejich hardware, • t´emˇeˇr neomezen´e ˇsk´alov´an´ı do ˇs´ıˇrky (zmˇena poˇctu uzl˚ u neovlivn´ı celek), • niˇzˇs´ı prvotn´ı n´aklady na zˇr´ızen´ı (moˇznost postupn´eho rozˇsiˇrov´an´ı v z´avislosti na aktu´aln´ı potˇrebˇe). Mezi nev´ yhody, kter´e ale mohou b´ yt z urˇcit´eho hlediska povaˇzov´any za irelevantn´ı, lze uv´est: • vyˇsˇs´ı zat´ıˇzen´ı syst´emu (synchronizaˇcn´ı logika), • sloˇzitost nasazen´ı. Distribuovan´e ˇreˇsen´ı datov´eho u ´loˇziˇstˇe najde nejˇcastˇeji sv´e vyuˇzit´ı v rozs´ahl´ ych s´ıt´ıch, kter´e jsou rozprostˇreny pˇres v´ıce lokalit (i geograficky velmi vzd´alen´ ych), at’ uˇz z d˚ uvod˚ u dostupnosti dat, v´ ykonu ˇci kapacity cel´eho syst´emu. Pˇri porovn´an´ı vlastnost´ı centralizovan´eho a distribuovan´eho datov´eho u ´loˇziˇstˇe je evidentn´ı, ˇze distribuovan´e ˇreˇsen´ı odstraˇ nuje i pˇres svou vyˇsˇs´ı sloˇzitost veˇsker´e nedostatky centralizovan´eho ˇreˇsen´ı.
6
3.2
Realizace rozs´ ahl´ eho datov´ eho u ´ loˇ ziˇ stˇ e v distribuovan´ em prostˇ red´ı
Rozs´ahl´e datov´e u ´loˇziˇstˇe v distribuovan´em prostˇred´ı lze realizovat prostˇrednictv´ım zm´ınˇen´ ych technologi´ı LVM a RAID, kter´e umoˇzn´ı vytvoˇrit ˇsk´alovateln´ y diskov´ y prostor na stranˇe jednotliv´ ych server˚ u, jeˇz mohou vyuˇz´ıvat sd´ılen´ı dat na blokov´e u ´rovni, a v kombinaci s vhodn´ ym distribuovan´ ym souborov´ ym syst´emem umoˇzn´ı uˇzivatel˚ um pˇristupovat k jeho obsahu na u ´rovni soubor˚ u. Kombinace LVM, RAID a distribuovan´eho souborov´eho syst´emu umoˇzn´ı vyuˇz´ıvat vˇsechny v´ yˇse popsan´e v´ yhody, kter´e distribuovan´e prostˇred´ı nab´ız´ı. Pˇred samotnou realizac´ı distribuovan´eho datov´eho u ´loˇziˇstˇe je nutn´e kromˇe spr´avn´eho n´avrhu jeho architektury zvolit i vhodn´ y distribuovan´ y souborov´ y syst´em s ohledem na jeho vlastnosti.
7
4
Distribuovan´ e souborov´ e syst´ emy
Distribuovan´ y souborov´ y syst´em (d´ale jen DFS) je s´ıt’ov´ y souborov´ y syst´em a z´aroveˇ n pˇr´ıpad distribuovan´eho syst´emu. Ten lze definovat jako mnoˇzinu nez´avisl´ ych syst´em˚ u (napˇr. poˇc´ıtaˇc˚ u), kter´e z pohledu uˇzivatel˚ u pˇredstavuj´ı jednotn´ y spojen´ y syst´em.[7] Stejnˇe jako v pˇr´ıpadˇe bˇeˇzn´ ych soubov´ ych syst´em˚ u je i DFS software, kter´ y uˇzivateli postkytuje funkce pro moˇznost: • ukl´adat informace na datov´a u ´loˇziˇstˇe (napˇr. pevn´e disky, diskov´a pole, apod.), • prezentovat uloˇzen´a data v podobˇe soubor˚ u (abstrakce uloˇzen´ ych informac´ı), • organizovat uloˇzen´a data do hiearchick´e adres´aˇrov´e struktury, • manipulovat s uloˇzen´ ymi daty srkze poskytovanou sadu operac´ı. Na rozd´ıl od bˇeˇzn´ ych s´ıt’ov´ ych souborov´ ych syst´em˚ u poskytuje DFS v´ yˇse uveden´e funkce transparentnˇe v distribuovan´em prostˇred´ı. V dalˇs´ıch podsekc´ıch jsou pops´any obecn´e vlastnosti DFS z hlediska datov´ ych u ´loˇziˇst’.
4.1
Transparentnost
Z pohledu uˇzivatele je transparentnost distribuovan´eho prostˇred´ı, kter´e obsahuje jedno ˇci v´ıce nez´avisl´ ych datov´ ych u ´loˇziˇst’ (server˚ u), nejd˚ uleˇzitˇejˇs´ı vlastnost DFS. Transparentnost lze dle funkc´ı DFS, kter´e jsou uˇzivatel˚ um pr´avˇe d´ıky n´ı skryty, rozdˇelit do n´asleduj´ıc´ıch tˇr´ıd:[7] Transparentnost um´ıstˇ en´ı. Uˇzivatel m´a z libovoln´eho pˇr´ıstupov´eho bodu dostupn´a data ze vˇsech datov´ ych u ´loˇziˇst’. Nepotˇrebuje m´ıt znalost, na kter´em konkr´etn´ım datov´em u ´loˇziˇsti jsou uloˇzen´a data, s nimiˇz pr´avˇe pracuje. Replikaˇ cn´ı transparentnost. Bez vˇedom´ı uˇzivatele mohou b´ yt uloˇzena ve v´ıce kopi´ıch (tzv. replik´ach) a na v´ıce datov´ ych u ´loˇziˇst´ıch. Migraˇ cn´ı transparentnost. Data uˇzivatele jsou st´ale dostupn´a i kdyˇz se fyzicky zmˇen´ı um´ıstˇen´ı datov´eho u ´loˇziˇstˇe (at’ uˇz vinou v´ ypadku ˇci z´asahem administr´atora). Pˇ r´ıstupov´ a transparentnost. Pˇr´ıstup uˇzivatele k dat˚ um je stejn´ y jako pˇr´ıstup k dat˚ um uloˇzen´ ym na lok´aln´ım datov´em u ´loˇziˇsti. Soubˇ eˇ zn´ a transparentnost. Uˇzivatel nemus´ı ˇreˇsit probl´em soubˇeˇzn´eho pˇr´ıstupu v´ıce uˇzivatel˚ u k jednomu souboru. Chybov´ a transparentnost. V pˇr´ıpadˇe v´ yskytu chyby (napˇr. v´ ypadku datov´eho u ´loˇziˇstˇe) je uˇzivatel st´ale schopen pracovat se sv´ ymi daty (napˇr. d´ıky replikaci).
8
4.2
ˇ alovatelnost Sk´
ˇ alov´an´ı (do ˇs´ıˇrky) v DFS souvis´ı nejˇcastˇeji s dynamickou zmˇenou poˇctu datov´ Sk´ ych ’ u ´loˇziˇst , kter´a nijak neovlivn´ı uˇzivatele d´ıky jiˇz zm´ınˇen´e transparentnosti distribuovan´eho prostˇred´ı. V r´amci cel´eho syst´emu m´a ˇsk´alov´an´ı vliv na jeho v´ ykonnost a celkovou kapacitu.
4.3
Jmenn´ y prostor
Identifikace objekt˚ u (soubor˚ u) a pˇr´ısluˇsn´ ych zdroj˚ u (obsahu soubor˚ u) je v DFS zajiˇstˇena pomoc´ı mapov´an´ı n´azv˚ u soubor˚ u (organizovan´ ych v adres´aˇrov´e struktuˇre), se kter´ ymi klient pracuje, na adresy fyzicky uloˇzen´ ych datov´ ych blok˚ u ˇci pˇr´ımo soubor˚ u na datov´ ych u ´loˇziˇst´ıch. Pˇreklad n´azv˚ u je realizov´an na stranˇe serveru, kter´ y spravuje tzv. jmenn´ y prostor. 4.3.1
Hiearchick´ y jmenn´ y prostor
V DFS jsou soubory v r´amci jmenn´eho prostoru organizov´any v hiearchick´e (adres´aˇrov´e) struktuˇre. Transparentnost pˇr´ıstupu je zajiˇstˇena d´ıky moˇznosti na stranˇe klienta lok´alnˇe pˇripojit vzd´alen´ y svazek, jehoˇz adres´aˇrov´a struktura (a soubory v n´ı uloˇzen´e) odpov´ıd´a adres´aˇrov´e struktuˇre organizovan´e v r´amci jmenn´eho prostoru, kter´ y je spravov´an serverem. Jmenn´ y prostor lze klasifikovat dle zp˚ usobu, kter´ ym je klient˚ um poskytov´an, do n´asleduj´ıc´ıch tˇr´ıd:[7] Soukrom´ y jmenn´ y prostor. Kaˇzd´ y klient m´a pˇr´ıstup pouze k vlastn´ımu jmenn´emu prostoru. Nev´ yhodou je t´emˇeˇr nemoˇzn´e sd´ılen´ı soubor˚ u v nˇem ˇ organizovan´ ych. Reˇsen´ım je pevnˇe urˇcit nemˇennou ˇca´st jmenn´eho prostoru, ke kter´e m´a pˇr´ıstup v´ıce uˇzivatel˚ u. Glob´ aln´ı jmenn´ y prostor. Cel´ y jmenn´ y prostor je sd´ılen a dostupn´ y vˇsem klient˚ um. Ti maj´ı moˇznost omezen´ım pˇr´ıstupu ostatn´ım uˇzivatel˚ um urˇcit, kter´a ˇca´st odpov´ıd´a jejich lok´aln´ımu jmenn´emu prostoru.
4.4
Pˇ r´ıstup k soubor˚ um
Uˇzivatel˚ um DFS je umoˇznˇen pˇr´ıstup k uloˇzen´ ym dat˚ um formou abstrakce sd´ılen´ı soubor˚ u. Tu lze implementovat pomoc´ı dvou z´akladn´ıch model˚ u: [10] Upload/download model. Klient pˇred pouˇzit´ım souboru st´ahne cel´ y jeho obsah ze vzd´alen´eho datov´eho u ´loˇziˇstˇe a uloˇz´ı jej do lok´aln´ıho datov´eho u ´loˇziˇstˇe. Po pˇr´ıpadn´ ych u ´prav´ach souboru nahraje cel´ y jeho obsah zpˇet na vzd´alen´e datov´e u ´loˇziˇstˇe (obr´azek ˇc. 4). V´ yhodou modelu je jeho jednoduch´a implementace. Za jeho nev´ yhody lze povaˇzovat: • klient mus´ı disponovat dostateˇcnou kapacitou lok´aln´ıho u ´loˇziˇstˇe (pamˇeti), • n´aroˇcn´e na datov´e pˇrenosy pˇri ˇcast´ ych zmˇen´ach souboru.
9
Obr´azek 4: Upload/download model.
Model vzd´ alen´ eho pˇ r´ıstupu. Klient k souboru pˇristupuje skrze rozhran´ı vzd´alen´eho datov´eho u ´loˇziˇstˇe (obr´azek ˇc. 5). Pracuje vˇzdy jen s blokem dat (ˇc´ast´ı souboru), kter´e je potˇreba st´ahnout nebo upravit. Veˇsker´e operace se souborem jsou implementov´any na stranˇe serveru. Model znaˇcnˇe sniˇzuje n´aroky na datov´e pˇrenosy a kapacitu lok´aln´ıho datov´eho u ´loˇziˇstˇe na stranˇe klienta. Za nev´ yhody modelu lze povaˇzovat: • vyˇsˇs´ı reˇzii na stranˇe serveru, • sloˇzitost implementace.
Obr´azek 5: Model vzd´alen´eho pˇr´ıstupu.
10
4.5
Stavov´ e a bezestavov´ e servery
Stavovost serveru lze definovat jako jeho schopnost udrˇzovat vazbu mezi pˇr´ıchoz´ımi poˇzadavky od klienta. Stavov´ y server uchov´av´a informace o vz´ajemnˇe souvisej´ıc´ıch poˇzadavc´ıch. Jednotliv´e poˇzadavky lze mezi sebou prov´azat a v z´avislosti na celkov´e informaci zpracov´avat. Oproti tomu bezestavov´ y server neuchov´av´a ˇz´adn´e informace o pˇr´ıchoz´ıch poˇzadavc´ıch. Kaˇzd´ y poˇzadavek je zpracov´an zcela samostatnˇe a mus´ı proto obsahovat veˇsker´e informace nutn´e ke zpracov´an´ı. Srovn´an´ı vlastnost´ı stavov´eho a bezestavov´eho serveru je uvedeno v tabulce ˇc. 1.
V´ yhody
Nev´ yhody
Stavov´ y server Menˇs´ı n´aroky na datov´e pˇrenosy Niˇzˇs´ı reˇzie serveru Moˇznost zamyk´an´ı soubor˚ u Sloˇzit´a obnova po v´ ypadku
Bezestavov´ y server Odoln´e v˚ uˇci v´ ypadku
Vyˇsˇs´ı reˇzie serveru Vˇetˇs´ı n´aroky na datov´e pˇrenosy
Tabulka 1: Srovn´an´ı vlastnost´ı stavov´ ych a bezestavov´ ych server˚ u
Jako typick´ y pˇr´ıklad (obr´azek ˇc. 6) demonstruj´ıc´ı rozd´ıly mezi stavovov´ ym a bezestavov´ ym serverem lze uv´est zpracov´an´ı poˇzadavk˚ u na pˇr´ıstup ke vzd´alen´emu souboru. Ten je moˇzn´e pomoc´ı stavov´eho serveru realizovat jako postupn´e zpracov´an´ı poˇzadavk˚ u na: 1. otevˇren´ı souboru, 2. proveden´ı operac´ı nad otevˇren´ ym souborem, 3. uzavˇren´ı souboru. Poˇzadavky na pˇr´ıstup k souboru zpracov´avan´e bezestavov´ ym serverem obsahuj´ı veˇsker´e informace nutn´e k jeho jednor´azov´emu zpracov´an´ı a proveden´ı poˇzadovan´e operace: • identifik´ator souboru, • parametry operace.
11
Obr´azek 6: Pˇr´ıstup k souboru um´ıstˇen´em na stavov´em a bezestavov´em serveru.
4.6
Replikace dat
Data uˇzivatel˚ u mohou b´ yt v r´amci DFS uloˇzena ve v´ıce kopi´ıch (tzv. replik´ach) a na v´ıce datov´ ych u ´loˇziˇst´ıch. Replikace pˇr´ımo souvis´ı se ˇsk´alov´an´ım syst´emu a jej´ım c´ılem je zv´ yˇsit jeho:[8] V´ ykonnost. Data mohou b´ yt poskytov´ana z v´ıce zdroj˚ u, kter´e spravuj´ı jejich repliku, a v r´amci cel´eho syst´emu m˚ uˇze b´ yt vyvaˇzov´ana z´atˇeˇz. Dostupnost. Data mohou b´ yt poskytov´ana z nejvhodnˇejˇs´ıho (nejbliˇzˇs´ıho) zdroje spravuj´ıc´ıho jejich repliku. Spolehlivost. Pˇri v´ ypadku mohou b´ yt data st´ale dostupn´a z dalˇs´ıho zdroje spravuj´ıc´ıho jejich repliku. 4.6.1
Konzistenˇ cn´ı modely
´ Spr´ava v´ıce replik vede k probl´emu v zachov´an´ı jejich konzistentn´ıho stavu. Uprava jedn´e z replik vede k nekonzistentn´ımu stavu ostatn´ıch. V distribuovan´ ych syst´emech
12
je tento probl´em ˇreˇsen prostˇrednictv´ım pouˇzit´ı model˚ u konzistence. Ty definuj´ı pravidla, jejichˇz dodrˇzen´ı zajist´ı zachov´an´ı konzistentn´ıho stavu v r´amci cel´eho distribuovan´eho datov´eho u ´loˇziˇstˇe.[7] V r´amci DFS se pouˇz´ıvaj´ı datacentrick´e konzistenˇcn´ı modely, jejichˇz c´ılem je zajistit konzistentn´ı stav replik i po vykon´an´ı soubˇeˇzn´ ych operac´ı pro z´apis a ˇcten´ı. Datacentrick´e modely lze rozdˇelit do dvou skupin podle toho, zda pouˇz´ıvaj´ı synchronizaˇcn´ı operace. Ty slouˇz´ı k synchronizaci vˇsech lok´aln´ıch kopi´ı dat (replik) propagov´an´ım lok´aln´ıch zmˇen nebo pˇrij´ım´an´ım zmˇen z ostatn´ıch kopi´ı. Modely nepouˇ z´ıvaj´ıc´ı synchronizaˇ cn´ı operace: Striktn´ı konzistence. Striktn´ı uspoˇr´ad´an´ı operac´ı. Pˇri kaˇzd´em ˇcten´ı dat ze souboru je vr´acena hodnota odpov´ıdaj´ıc´ı posledn´ımu z´apisu do nˇej. Operace na z´apis jsou okamˇzitˇe a atomicky vykon´any ve vˇsech kopi´ıch. To znaˇcnˇe sniˇzuje v´ ykonnost cel´eho syst´emu. Jedin´ ym moˇzn´ ym ˇreˇsen´ım je sn´ıˇzit poˇzadavky na konzistenci (tzn. pouˇz´ıt slabˇs´ı model konzistence). Line´ arn´ı konzistence. Sd´ılen´e pˇr´ıstupy, kter´e jsou uspoˇr´ad´any dle glob´aln´ıch (neunik´atn´ıch) ˇcasov´ ych znaˇcek, jsou vidˇeny vˇsemi procesy ve stejn´em poˇrad´ı. Sekvenˇ cn´ı konzistence. Sd´ılen´e pˇr´ıstupy, kter´e nejsou uspoˇra´d´any v ˇcase, jsou vidˇeny vˇsemi procesy ve stejn´em poˇrad´ı. Pˇ r´ıˇ cinn´ a konzistence. Vˇsechny procesy vid´ı pˇr´ıˇcinnˇe souvisej´ıc´ı sd´ılen´e pˇr´ıstupy ve stejn´em poˇrad´ı. FIFO konzistence. Vˇsechny procesy vid´ı z´apisy ostatn´ıch proces˚ u v poˇrad´ı, ve kter´em byly provedeny. Z´apisy od r˚ uzn´ ych proces˚ u nemus´ı b´ yt vˇzdy vidˇeny ve stejn´em poˇrad´ı. Modely pouˇ z´ıvaj´ıc´ı synchronizaˇ cn´ı operace: Slab´ a konzistence. Sd´ılen´a data mohou b´ yt povaˇzov´ana za konzistentn´ı aˇz po dokonˇcen´ı synchronizace. Uvolˇ nuj´ıc´ı konzistence. Sd´ılen´a data jsou oznaˇcena za konzistentn´ı po opuˇstˇen´ı kritick´e sekce. Vstupn´ı konzistence. Sd´ılen´a data n´aleˇzej´ıc´ı kritick´e oblasti jsou oznaˇcena za konzistentn´ı pˇri vstupu do kritick´e sekce. 4.6.2
Konzistenˇ cn´ı protokoly
Implementace jednotliv´ ych model˚ u popisuj´ı konzistenˇcn´ı protokoly. Ty definuj´ı, jak je prov´adˇena samotn´a distribuce zmˇen na vˇsechny repliky, kterou realizuj´ı tzv. replikaˇcn´ı manaˇzeˇri. Dle zp˚ usobu, kter´ ym replikaˇcn´ı manaˇzeˇri (d´ale jen RM) zajiˇst’uj´ı konzistentn´ı stav cel´eho distribuovan´eho datov´eho u ´loˇziˇstˇe, lze replikaci rozdˇelit do dvou typ˚ u:[8] Master/slaves replikace. V dan´em ˇcase je dostupn´ y pouze jeden prim´arn´ı RM (master) a jeden nebo v´ıce vedlejˇs´ıch RM (slaves). Operace na z´apis zpracov´av´a
13
master RM a pos´ıl´a kopie zmˇenˇen´ ych dat vˇsem slave RM. Operace v pˇr´ıpadˇe, ˇze master RM vypadne, jeden ze slave RM je zvolen jako nov´ y master. Multimaster replikace. Vˇsichni RM jsou si rovni. Kter´ ykoliv z nich m˚ uˇze zpracov´avat operaci na z´apis a n´aslednˇe distribuovat zmˇeny, kter´e jsou nez´avisle (ale identicky) zpracov´any ostatn´ımi RM. V pˇr´ıpadˇe v´ ypadku libovoln´eho RM nedojde k ovlivnˇen´ı ostatn´ıch.
4.7
Kliensk´ e cache a offline operace
Speci´aln´ı vlastnost´ı DFS je podpora offline operac´ı. Nem´a-li uˇzivatel pˇr´ıstup k s´ıti, m˚ uˇze se sv´ ymi daty st´ale pracovat d´ıky jejich kopii v lok´aln´ı cache klienta. V z´avislosti na jej´ı kapacitˇe je uˇzivateli zajiˇstˇena st´al´a dostupnost jeho pracovn´ıch dat. Lok´aln´ı cache na stranˇe klienta je tak´e vyuˇz´ıv´ana ke zv´ yˇsen´ı v´ ykonnosti pr´ace se soubory, kter´e jsou v n´ı uloˇzen´e. Kv˚ uli zajiˇstˇen´ı konzistentn´ıho stavu soubor˚ u v r´amci cel´eho DFS dojde po dokonˇcen´ı jejich u ´prav (zvl´aˇstˇe pak s pouˇzit´ım offline operac´ı) v klientsk´e lok´aln´ı cache k nav´az´an´ı spojen´ı mezi klientem se serverem, po kter´em n´asleduje synchronizace zmˇenˇen´ ych soubor˚ u. 4.7.1
Spr´ ava verze souboru
Aby klienti byli schopn´ı zjistit, kter´ y soubor byl pr´avˇe vytvoˇren ˇci upraven, mus´ı obdrˇzet informaci, ˇze doˇslo ke zmˇenˇe stavu souboru s dan´ ym n´azvem. Pr˚ ubˇeˇzn´e dotazov´an´ı se server˚ u nebo zas´ıl´an´ı informov´ac´ı klient˚ um o zmˇenˇe obsahu souboru s dan´ ym n´azvem je ale znaˇcnˇe neefektivn´ı. Tento probl´em ˇreˇs´ı v DFS spr´ava verz´ı soubor˚ u.[10] Spr´ava verz´ı soubor˚ u, resp. jejich replik, je velmi jednoduˇse realizovateln´a implementac´ı ˇc´ıtaˇc˚ u zmˇen jednotliv´ ych soubor˚ u. Replika souboru s nejvyˇsˇs´ı hodnotou ˇc´ıtaˇce zmˇen m´a nejvyˇsˇs´ı verzi a lze b´ yt povaˇzov´ana za aktu´aln´ı. Ostatn´ı repliky souboru jsou oznaˇceny jako nekonzistentn´ı a jejich aktualizace je automaticky provedena v z´avislosti na implementovan´em modelu konzistence. Poˇzadavek na otevˇren´ı souboru je vˇzdy proveden nad aktu´aln´ı verz´ı repliky souboru. V pˇr´ıpadˇe, ˇze obsah repliky souboru byl zmˇenˇen, pˇri zpracov´an´ı poˇzadavku na zavˇren´ı repliky souboru je zv´ yˇsena jej´ı aktu´aln´ı verze. V pˇr´ıpadˇe, ˇze je implementov´an model pˇr´ıstupu k souboru typu upload/download a nebo zmˇeny souboru probˇehly pouze v lok´aln´ı cache klienta, m˚ uˇze doj´ıt pˇri vykon´av´an´ı operace zavˇren´ı repliky souboru ke konfliktu s verz´ı repliky souboru uloˇzen´e na stranˇe serveru, jej´ıˇz obsah byl v ned´avn´e dobˇe zmˇenˇen jin´ ym klientem. Mezi z´akladn´ı ˇreˇsen´ı moˇzn´ ych konflit˚ u lze z pohledu klienta uv´est: Ignorov´ an´ı konfliktu. Obsah souboru (resp. jeho repliky) na serveru je pˇreps´an nehledˇe na jeho verzi. • riziko ztr´aty proveden´ ych zmˇen v souboru na stranˇe serveru Sjednocen´ı zmˇ en. Obsah soubor˚ u je porovn´an a n´aslednˇe jsou vyhodnoceny jejich ˇ sen´ım je sjednocen´ı rozd´ıln´e ˇca´sti, kter´e odpov´ıdaj´ı proveden´ ym zmˇen´am. Reˇ
14
tˇechto zmˇen a verz´ı, po kter´em n´asleduje dalˇs´ı pokus o uloˇzen´ı souboru na server. Zmˇeny stejn´ ych ˇc´ast´ı souboru (kolize) jsou vyˇreˇseny jejich serializac´ı. • kolize mus´ı vyˇreˇsit uˇzivatel, kter´ y rozhodne, jak´e zmˇeny se maj´ı zachovat Z´ asah uˇ zivatele. Uˇzivatel rozhodne, kter´a verze souboru se m´a povaˇzovat za aktu´aln´ı. Rozhodne-li, ˇze aktu´aln´ı verze souboru m´a b´ yt jeho lok´alnˇe upraven´a kopie, aktualizuje se jej´ı verze a n´asleduje dalˇs´ı pokus o dalˇs´ı uloˇzen´ı souboru na server. • uˇzivatel mus´ı b´ yt na konflikt upozornˇen a vyˇreˇsit jej
4.8
Sd´ılen´ı soubor˚ u
Sd´ılen´ı soubor˚ u umoˇzn ˇuje pˇristupovat v´ıce klient˚ um k jednomu souboru. Pro uˇzivatele je ide´aln´ı stav, kdy jsou veˇsker´e provedn´e zmˇeny okamˇzitˇe viditeln´e pro ostatn´ı. V DFS je tento stav nedosaˇziteln´ y z d˚ uvod˚ u moˇzn´e latence s´ıtˇe, kter´a zp˚ usobuje zpoˇzdˇen´ı z´apis˚ u vˇsech zmˇen bˇehem synchronizace replik. Soubˇeˇzn´ y pˇr´ıstup v DFS k jednomu souboru a prov´adˇen´ı konfliktn´ıch operac´ı (pro z´apis) m˚ uˇze proto v´est k probl´em˚ um t´ ykaj´ıc´ıch se konzistentn´ıho stavu souboru. ˇ sen´ı probl´emu v r´amci DFS je z´avisl´e na implementovan´e s´emantice sd´ılen´ı Reˇ soubor˚ u a metodˇe vylouˇcen´ı soubˇeˇzn´eho pˇr´ıstupu k soubor˚ um. 4.8.1
S´ emantika sd´ılen´ı
S´emantika sd´ılen´ı soubor˚ u definuje, kdy jsou zmˇeny provedn´e jedn´ım uˇzivatelem viditeln´e i pro ostatn´ı uˇzivatele. Mezi nejˇcastˇeji implementovan´e patˇr´ı:[10] Unixov´ a s´ emantika. C´ılem je zajisit aktu´alnost souboru. Kaˇzd´a operace pro z´apis do souboru je atomicky a okamˇzitˇe provedena ve vˇsech jeho kopi´ıch. Operace ˇcten´ı ze souboru vr´at´ı vˇzdy hodnotu posledn´ı z´apisu do nˇej. Klient, kter´ y provedl operaci pro z´apis do souboru mus´ı pˇred proveden´ım dalˇs´ı operace ˇcekat neˇz je z´apis proveden ve vˇsech kopi´ıch souboru. Transakˇ cn´ı s´ emantika. C´ılem je zajisit konzistentn´ı stav souboru. V´ ysledky operac´ı pro z´apis jsou v bˇehem transakce pr˚ ubˇeˇznˇe ukl´ad´any (v pracovn´ım u ´loˇziˇsti) a permanentnˇe (atomicky) potvrzeny pˇri splnˇen´ı podm´ınek konzistence na konci transakce. Relaˇ cn´ı (session) s´ emantika. C´ılem je zajistit efektivn´ı pˇr´ıstup k souboru. V´ ysledky operac´ı pro z´apis jsou ukl´ad´any do pracovn´ı kopie a permanentnˇe potvrzeny pˇri ukonˇcen´ı relace. Jednoduch´ ym zp˚ usobem, kter´ ym lze tak´e vyˇreˇsit probl´emy soubˇeˇzn´eho pˇr´ıstupu k soubor˚ um, jsou nezmˇeniteln´e soubory. Soubor nelze otevˇr´ıt pro z´apis, ale jen vytvoˇrit a n´aslednˇe ˇc´ıst jeho obsah. Sd´ılen´ı souboru a i jeho replikace je d´ıky tomu znaˇcnˇe zjednoduˇsen´a. Nev´ yhodou jsou vˇsak vyˇsˇs´ı n´aroky na celkovou kapacitu datov´eho u ´loˇziˇstˇe.
15
4.8.2
Vylouˇ cen´ı soubˇ eˇ zn´ eho pˇ r´ıstupu pomoc´ı zamyk´ an´ı
Je-li server implementov´an jako stavov´ y, m˚ uˇze u soubor˚ u uchov´avat stav jejich z´amk˚ u. Ty slouˇz´ı vylouˇcen´ı soubˇeˇzn´eho pˇr´ıstupu k souboru, bˇehem kter´eho by doˇslo ke konfliktn´ım zmˇen´am v jeho obsahu. V pˇr´ıpadˇe, ˇze je soubor uzamˇcen, pak nem˚ uˇze b´ yt otevˇren pro z´apis.[8] Zamyk´an´ı soubor˚ u v DFS lze realizovat implementac´ı ˇc´ıtaˇc˚ u, jejichˇz nenulov´a hodnota odpov´ıd´a zamknut´ı souboru. Mezi z´akladn´ı druhy z´amk˚ u patˇr´ı z´amky pro ˇcten´ı a z´apis. Plat´ı, ˇze pˇri: • v´ıcen´asobn´em ˇcten´ı nedoch´az´ı ke soubˇehu konfliktn´ıch operac´ı, • v´ıcen´asobn´em z´apisu m˚ uˇze doj´ıt k soubˇehu konfliktn´ıch operac´ı, • v´ıcen´asobn´em ˇcten´ı a z´apisu m˚ uˇze doj´ıt k soubˇehu konfliktn´ıch operac´ı. V tabulce ˇc. 2 je pops´ana kompatibilita z´amk˚ u, kter´a urˇcuje, kdy je moˇzn´e soubor zamknout pro ˇcten´ı ˇci z´apis.
Stav z´ amk˚ u souboru Odemˇ cen´ y Zamˇ cen´ y pro ˇ cten´ı Zamˇ cen´ y pro z´ apis
Lze zamknout pro ˇ cten´ı? Ano Ano Ne
Lze zamknout pro z´ apis? Ano Ne Ne
Tabulka 2: Zamyk´an´ı souboru (kompatibilita z´amk˚ u)
4.8.3
Vylouˇ cen´ı soubˇ eˇ zn´ eho pˇ r´ıstupu pomoc´ı pˇ red´ av´ an´ı povˇ eˇ ren´ı
Povˇeˇren´ı povoluje klientovi, kter´ y jej obdˇzel, pˇristupovat k obsahu souboru. Ostatn´ı klienti k obsahu souboru pˇristupovat nemohou. Klient po dokonˇcen´ı u ´prav pˇred´a ’ povˇeˇren´ı dalˇs´ımu ˇcekaj´ıc´ımu z´ajemci o pˇr´ıstup k souboru a to bud formou povˇeˇren´ım n´asleduj´ıc´ıho klienta (ˇcekatele) v logick´em kruhu, kter´ y je sloˇzen ze vˇsech klient˚ u, nebo pˇred´an´ım prvn´ımu klientovi z fronty ˇcekatel˚ u, do kter´e se klienti v pˇr´ıpadˇe z´ajmu o pˇr´ıstup k souboru zaˇrazuj´ı.
4.9
Bezpeˇ cnost uloˇ zen´ ych dat
V DFS je nutn´e zajist bezpeˇcnost uloˇzen´ ych dat prostˇrednictv´ım omezen´ı pˇr´ıstupu k nim. Toho lze doc´ılit pomoc´ı:[8] Ovˇ eˇ ren´ı uˇ zivatele. Po nav´az´an´ı spojen´ı mezi klientem a serverem dojde k ovˇeˇren´ı identity uˇzivatele. V pˇr´ıpadˇe u ´spˇeˇsn´eho ovˇeˇren´ı je uˇzivateli povolen pˇr´ıstup k obsahu datov´eho ˚ uloˇziˇstˇe. V opaˇcn´em pˇr´ıpadˇe je mu pˇr´ıstup zam´ıtnut.
16
ˇ Sifrov´ an´ı komunikace. Komunikace mezi klientem a serverem je ˇsifrov´ana dle pˇredem dohodnut´eho ˇsifrovac´ıho algoritmu. Nelze tak jednoduˇse odposlechnout pos´ılan´a data, pˇr´ıkazy ani pˇr´ıstupov´e u ´daje. Seznamu pˇ r´ıstupov´ ych pr´ av. Ke kaˇzd´emu souboru lze pˇriˇradit seznam pˇr´ıstupov´ ych pr´av (d´ale jen ACL) pro jednotliv´e uˇzivatele nebo skupiny uˇzivatel˚ u. Pˇr´ıstupov´a pr´ava definuj´ı operace, kter´e je moˇzn´e nad souborem vykon´avat. Lze tak napˇr. nastavit, ˇze uˇzivatel je vlastn´ık souboru a m˚ uˇze se souborem libovolnˇe manipulovat (m´a pr´ava pro ˇcten´ı i z´apis). Ostatn´ı uˇzivatel´e napˇr. mohou jen ˇc´ıst obsah souboru (maj´ı pr´ava pouze pro ˇcten´ı). ˇ ˇ Sifrov´ an´ı obsahu soubor˚ u. Sifrov´ an´ım obsahu uloˇzen´ ych dat na datov´em u ´loˇziˇsti lze u ´ˇcinnˇe chr´anit uloˇzen´a data uˇzivatel˚ u pˇred fyzick´ ym u ´tokem na nˇe (napˇr. kr´adeˇz serveru). I v pˇr´ıpadˇe jeho u ´spˇeˇsn´e realizace jsou pak utoˇcn´ıkovi z´ıskan´a ’ data zcela bezcenn´a, nebot nen´ı schopen je deˇsifrovat a n´aslednˇe pˇreˇc´ıst.
17
5
Distribuovan´ y souborov´ y syst´ em KIVFS
KIVFS je experiment´aln´ı implementace distribuovan´eho souborov´eho syst´emu. Hlavn´ı c´ıle projektu jsou:[13] • u ´pln´a transparentnost distribuovan´eho prostˇred´ı, • funkˇcnost v t´emˇeˇr libovoln´em s´ıt’ov´em prostˇred´ı, • multimaster replikace (dostupnost vˇsech replik pro ˇcten´ı i z´apis), • vysok´a ˇsk´alovatelnost, v´ ykonnost, stabilita a bezpeˇcnost, • podpora klientsk´e cache a offline operac´ı, • podpora mobiln´ıch platforem, • modul´arnost (snadn´a rozˇsiˇritelnost´ı a modifikovatelnost), • nez´avislost na pouˇzit´ ych technologi´ıch.
5.1
Architektura
Distribuovan´ y souborov´ y syst´em KIVFS je zaloˇzen na s´ıt’ov´e architektuˇre klient/server. Veˇsker´a komunikace prob´ıh´a prostˇrednictv´ım vlastn´ıho protokolu KIVFS, kter´ y je:[18] • postaven na spolehliv´em protokolu TCP/IP, d´ıky kter´emu nen´ı nutn´e implementovat vlastn´ı mechanismus pro potvrzov´an´ı zpr´av zp˚ usobuj´ıc´ı vyˇsˇs´ı reˇzii a zpoˇzdˇen´ı pˇri zpracov´an´ı poˇzadavk˚ u, • bin´arn´ı a optimalizovateln´ y z hlediska v´ ysledn´e velikosti pˇren´aˇsen´ ych zpr´av, na kterou jsou citliv´e zvl´aˇstˇe klientsk´e aplikace urˇcen´e pro mobiln´ı platformy, • zaloˇzen na principu pos´ıl´an´ı paketu sloˇzen´eho z hlaviˇcky obsahuj´ıc´ı informace o poˇzadavku (resp. odpovˇedi) a tˇela obsahuj´ıc´ıho data (obr´azek ˇc. 8). Klient m˚ uˇze b´ yt pˇripojen k libovoln´emu serveru (obr´azek ˇc. 7), kter´ y mu zprostˇredkov´av´a pˇr´ıstup k dat˚ um z cel´eho syst´emu a umoˇzn ˇuje jejich spr´avu (transparentnost um´ıstˇen´ı, replikace, migrace, soubˇehu a chyb). Z´ıskan´a data d´ale prezentuje v z´avislosti na c´ılov´e platformˇe (transparentnost pˇr´ıstupu a chyb) uˇzivateli napˇr. jako: • pˇripojen´ y vzd´alen´ y svazek s vyuˇzit´ım jadern´eho modulu KIVFS[21] pro operaˇcn´ı syst´em GNU/Linux, • pˇripojen´ y svazek s vyuˇzit´ım jadern´eho modulu FUSE[22], • vzd´alen´ y svazek (z´asuvn´ y modul do souborov´eho manaˇzeru[23]).
18
Obr´azek 7: Architektura KIVFS.
Server je rozdˇelˇen dle funkcionality do jednotliv´ ych na sobˇe nez´avisl´ ych modul˚ u d´ale oznaˇcovan´ ych jako vrstvy, kter´e spolu komunikuj´ı a spolupracuj´ı. Jednotliv´e vrstvy jsou tvoˇreny samostatn´ ymi serverov´ ymi aplikacemi a jsou naprogramovan´e s vyuˇzit´ım programovac´ıho jazyka C. C´ılovou platformou pro pouˇzit´ı serveru je operaˇcn´ı syst´em GNU/Linux. Po pˇr´ıpadn´ ych u ´prav´ach, kter´e spoˇc´ıvaj´ı pˇredevˇs´ım nahrazen´ı pouˇzit´ ych knihoven, je moˇzn´e server pouˇz´ıt i na jin´e desktopov´e platformˇe (napˇr. OpenBSD, Microsoft Windows). Modul´arn´ı architektura umoˇzn ˇuje rozˇsiˇritelnost cel´eho syst´emu o dalˇs´ı funkcionalitu a to v podobˇe pˇrid´av´an´ı dalˇs´ıch modul˚ u. V pˇr´ıpadˇe potˇreby je moˇzn´e upravit ˇci zcela nahradit modul bez ovlivnˇen´ı funkˇcnosti zbytku syst´emu.
Obr´azek 8: Obsah paketu protokolu KIVFS (poˇzadavek na v´ ypis adres´aˇre).
19
5.1.1
Autentizaˇ cn´ı vrstva
Autentizaˇcn´ı vrstva v KIVFS slouˇz´ı jako pˇr´ıstupov´ y bod do cel´eho syst´emu pro klientsk´e aplikace. Kv˚ uli zabezpeˇcen´ı komunikace je veˇsker´a v´ ymˇena zpr´av ˇsifrov´ana pomoc´ı alogritm˚ u, kter´e poskytuje knihovna OpenSSL. Po pˇripojen´ı klienta zajiˇst’uje jeho autorizaci pomoc´ı vlastn´ı datab´aze uˇzivatel˚ u a syst´emu Kerberos. D˚ uvodem pro pouˇzit´ı vlastn´ı datab´aze je moˇznost omezit pˇr´ıstup uˇzivatel˚ um, kteˇr´ı sice maj´ı u ´ˇcet v syst´emu Kerberos, ale nemaj´ı zˇr´ızen´ y u ´ˇcet v r´amci KIVFS. V pˇr´ıpadˇe, ˇze klient je u ´spˇeˇsnˇe autorizov´an, autentizaˇcn´ı vrstva pˇred´av´a veˇsker´e jeho poˇzadavky k vyˇr´ızen´ı synchronizaˇcn´ı vrstvˇe. V opaˇcn´em pˇr´ıpadˇe ukonˇcuje spojen´ı.[19] 5.1.2
Synchronizaˇ cn´ı vrstva
V r´amci KIVFS m˚ uˇze b´ yt v´ıce klient˚ u pracuj´ıc´ıch se stejn´ ymi daty pˇripojeno k r˚ uzn´ ym pˇr´ıstupov´ ym bod˚ um. V pˇr´ıpadˇe, ˇze se poˇzadavky v r´amci cel´eho syst´emu nepropaguj´ı dostateˇcnˇe rychle (ide´alnˇe bez zpoˇzdˇen´ı) a ve stejn´em poˇrad´ı, mohlo by doj´ıt k soubˇeˇzn´emu pˇr´ıstupu a nekonzistentn´ımu stavu uloˇzen´ ych dat. Tento probl´em ˇreˇs´ı synchronizaˇcn´ı vrstva, kter´a poˇzadavky na jakokouliv zmˇenu dat s vyuˇzit´ım Lamportov´ ych hodin a dalˇs´ıch algoritm˚ u synchronizuje mezi vˇsemi pr´avˇe dostupn´ ymi servery.[20] Po u ´spˇeˇsn´e synchronizaci poˇzadavk˚ u je pˇred´a ke zpracov´an´ı datov´e vrstvˇe. Mezi dalˇs´ı u ´lohy synchronizaˇcn´ı vrstvy patˇr´ı: • detekce v´ ypadku serveru a zajiˇstˇen´ı jeho obnovy pomoc´ı synchronizace jeho uloˇzen´ ych dat s daty z ostatn´ıch server˚ u, • pr˚ ubˇeˇzn´e vyhodnocov´an´ı stav˚ u linek mezi servery a nejlepˇs´ı cesty k distribuci poˇzadavk˚ u mezi servery, • ˇr´ızen´ı transakc´ı a spr´ava logick´ ych hodin v syst´emu. 5.1.3
Datov´ a vrstva
Datov´a vrstva slouˇz´ı jako datov´e u ´loˇziˇstˇe pro vˇsechny informace, kter´e jsou nutn´e pro spr´avnou funkci cel´eho syst´emu, a zajiˇst’uje jejich kompletn´ı spr´avu.[18] Pˇredmˇetem t´eto pr´ace je optimalizace datov´eho u ´loˇziˇstˇe a to je proto podrobnˇeji rozebr´ano v n´asleduj´ıc´ı sekci 6.
20
6
Datov´ eu ´ loˇ ziˇ stˇ e v KIVFS
Datov´e u ´loˇziˇstˇe (obr´azek ˇc. 9) je v r´amci jednoho KIVFS serveru tvoˇreno tˇremi samostatn´ ymi serverov´ ymi aplikacemi:[18] VFS server. Slouˇz´ı jako rozhran´ı mezi synchronizaˇcn´ı vrstvou a metadatov´ ym nebo souborov´ ym serverem. V z´avislosti na druhu poˇzadavku jej pˇred´av´a ke zpracov´an´ı pr´avˇe jednomu z nich. Zajiˇst’uje nez´avislost vyˇsˇs´ıch vrstev na implementaci samotn´eho datov´eho u ´loˇziˇstˇe. Metadatov´ y server. Zprostˇredkov´av´a spojen´ı s relaˇcn´ım datab´azov´ ym syst´emem MySQL a spravuje veˇsker´a v nˇem uloˇzen´a data. Mezi ty patˇr´ı informace o uloˇzen´ ych souborech (tj. metadata), jmenn´em prostoru, uˇzivatel´ıch, ostatn´ıch serverech, atd. D´ıky pouˇzit´e datab´azi k uchov´av´an´ı vˇsech informac´ı lze oznaˇcit server jako stavov´ y. Souborov´ y server. Spravuje fyzick´ y obsah jednotliv´ ych soubor˚ u uˇzivatel˚ u a zprostˇredkov´av´a jim jejich pˇrenos. Ve spolupr´aci s metadatov´ ym serverem ’ a vˇsemi ostatn´ımi souborov´ ymi servery zajiˇst uje replikaci.
Obr´azek 9: Datov´e u ´loˇziˇstˇe v KIVFS. Organizace a spr´ava uloˇzen´ ych dat pomoc´ı jednotliv´ ych server˚ u a relaˇcn´ıho datab´azov´eho syst´emu umoˇzn ˇuje: Sn´ıˇ zit poˇ cet pˇ r´ıstup˚ u k fyzick´ emu datov´ emu u ´ loˇ ziˇ sti. Diskov´e operace jsou ˇcasovˇe mnohem n´aroˇcnˇejˇs´ı neˇz ˇcten´ı informac´ı z datab´aze, kterou je moˇzn´e alespoˇ n ˇc´asteˇcnˇe uchov´avat v pamˇeti. Proto je snaha minimalizovat poˇcet fyzick´ ych pˇr´ıstup˚ u na svazky (napˇr. pˇripojen´ ych pevn´ ych disk˚ u) souborov´ ych server˚ u, ke kter´ ym doch´az´ı bˇehem pˇrenosu obsahu soubor˚ u nebo jejich replikaci, a dos´ahnout tak co moˇzn´a nejvyˇsˇs´ı rychlosti a n´ızk´eho zat´ıˇzen´ı. Minim´ aln´ı velikost datab´ aze. Relaˇcn´ı model dat umoˇzn ˇuje efektivnˇe organizovat velk´e mnoˇzstv´ı uloˇzen´ ych dat, mezi kter´e patˇr´ı jiˇz zm´ınˇen´a metadata,
21
informace o uˇzivatel´ıch, ACL, apod. a efektivnˇe tak minimalizovat jejich redundanci. Vzhledem k tomu, ˇze obsah soubor˚ u spravuj´ı souborov´e servery, velikost datab´aze nikdy nebude pˇr´ıliˇs velk´a i kdyˇz v syst´emu bude uloˇzeno mnoho soubor˚ u. D´ıky tomu je moˇzn´e, aby kaˇzd´ y KIVFS server mohl spravovat vlastn´ı kopii cel´e datab´aze a mˇel tak vˇzdy dostupn´e kompletn´ı informace o cel´em syst´emu (synchronn´ı stav vˇsech datab´az´ı zajiˇst’uje synchronizaˇcn´ı vrstva). Jednotn´ y pˇ r´ıstup k uloˇ zen´ ym informac´ım v datab´ azi. k veˇsker´ ym dat˚ um uloˇzen´ ym v datab´azi lze pˇristupovat pomoc´ı dotazovac´ıho jazyka SQL. D´ıky tomu je moˇzn´e uloˇzen´a data efektivnˇe spravovat a vyhled´avat v nich poˇzadovan´e informace. D˚ uvodem pro pouˇzit´ı relaˇcn´ıho datab´azov´eho syst´emu MySQL je jeho rychlost pˇri pr´aci s daty.[18] Nav´ıc d´ıky mal´e velikosti datab´aze (jej´ıˇz ERA model1 je uveden na obr´azku ˇc. 10) KIVFS m˚ uˇze datab´azov´ y syst´em MySQL zkop´ırovat a spravovat cel´ y obsah datab´aze v pamˇeti serveru, coˇz zvyˇsuje rychlost pr´ace napˇr. s jiˇz zm´ınˇen´ ymi metadaty, jejichˇz obsah je ˇcasto ˇcten.
Obr´azek 10: P˚ uvodn´ı ERA model datab´aze.
1
V sekci 8 je uvedena jeho upraven´a a v´ ysledn´a verze.
22
6.1
Pˇ rehled poskytovan´ ych sluˇ zeb
VFS server nab´ız´ı vyˇsˇs´ım vrstv´am adres´aˇrov´e a souborov´e sluˇzby. Jejich realizaci zajiˇst’uje metadatov´ y nebo souborov´ y server. Poskytovan´e sluˇzby jsou pˇrehlednost uveden´e v n´asleduj´ıc´ı tabulce ˇc. 3 (sluˇzby uveden´e v z´avork´ach jsou poskytov´any automaticky v r´amci cel´eho u ´loˇziˇstˇe). Sluˇ zby
Metadatov´ y server
Souborov´ y server
Souborov´ e
otevˇren´ı / vytvoˇren´ı / zamknut´ı uzavˇren´ı / odemknut´ı odstranˇen´ı ˇcten´ı atribut˚ u (spr´ava jmenn´eho prostoru)
ˇcten´ı obsahu z´apis dat (replikace)
Adres´ aˇ rov´ e
vytvoˇren´ı odstranˇen´ı v´ ypis obsahu
-
Tabulka 3: Poskytovan´e sluˇzby Z tabulky je patrn´e, ˇze jmenn´ y prostor (sekce 6.2.1) je spravov´an pouze metadatov´ ym serverem. D´ıky tomu m´a kaˇzd´ y KIVFS server kompletn´ı informace o cel´em u ´loˇzn´em prostoru.
6.2
N´ avrhy pro optimalizaci a rozˇ s´ıˇ ren´ı
Vu ´vodu pr´ace byly bl´ıˇze pops´any poˇzadavky, kter´e mus´ı splˇ novat kaˇzd´e rozs´ahl´e datov´e u ´loˇziˇstˇe, aby bylo v praxi pouˇziteln´e. Na z´akladˇe tˇechto poˇzadavk˚ u a zm´ınˇen´ ych c´ılov´ ych poˇzadavk˚ u na vlastnosti KIVFS jsou v n´asleduj´ıc´ıch bodech specifikovan´e oblasti vhodn´e k optimalizaci: • dostupnost a spolehlivost datov´eho u ´loˇziˇstˇe – efektivn´ı pˇr´ıstup k soubor˚ um (sekce 6.2.3), – sn´ıˇzen´ı omezov´an´ı klient˚ u vlivem souˇcasn´ ych vlastnost´ı KIVFS, mezi kter´e patˇr´ı napˇr. poskytovan´ y jmenn´ y prostor (sekce 6.2.1) ˇci replikace (sekce 8.10), – podpora lok´aln´ı cache a offline operac´ı (sekce 6.2.5), – podpora pro obnovu dat (sekce 6.2.8), • podpora mobiln´ıch platforem s ohledem na jejich omezen´ı, mezi kter´e patˇr´ı napˇr. omezen´a velikost lok´aln´ı cache (sekce 6.2.3 a 6.2.5), • zabezpeˇcnost uloˇzen´ ych dat (sekce 6.2.10),
23
• rozˇsiˇritelnost a flexibilita datov´eho u ´loˇziˇstˇe (sekce 6.2.2). V n´asleduj´ıc´ıch podsekc´ıch jsou tyto body d´ale rozebr´any a jsou navrˇzeny postupy, jak jich doc´ılit. 6.2.1
Jmenn´ y prostor
Nejv´ıce omezuj´ıc´ı vlastnost´ı souˇcasn´e implementace KIVFS z hlediska uˇzivatel˚ u je nemoˇznost sd´ılet jejich uloˇzen´a data mezi sebou. Ta je zapˇr´ıˇcinˇena chybˇej´ıc´ı implementac´ı mechanismu pro omezen´ı pˇr´ıstupu k soubor˚ um, coˇz vedlo k nutnosti poskytovat klient˚ um priv´atn´ı jmenn´ y prostor. Toto je kritick´a vlastnost syst´emu, kterou je potˇreba upravit, aby se stal dostupnˇejˇs´ı pro bˇeˇzn´e uˇzivatele. Jedin´ ym moˇzn´ ym ˇreˇsen´ım je poskytovat uˇzivatel˚ um glob´aln´ı jmenn´ y prostor a implementovat mechanismus zajiˇst’uj´ıc´ıc´ı zabezpeˇcen´ı uˇzivatelsk´ ych dat formou omezen´ı pˇr´ıstupu (viz sekce 6.2.10). 6.2.2
Efektivn´ı vyuˇ zit´ı sluˇ zeb relaˇ cn´ıho datab´ azov´ eho syst´ emu
Datov´e u ´loˇziˇstˇe v KIVFS vyuˇz´ıv´a relaˇcn´ı datab´azov´ y syst´em MySQL k ukl´ad´an´ı vˇsech informac´ı o uˇzivatel´ıch, souborech, u ´loˇziˇst´ıch, apod. Pro pˇr´ıstup k nˇemu pouˇz´ıv´a tzv. konektor. Ten je dostupn´ y v podobˇe sd´ılen´e knihovny pro programovac´ı jazyk C, kter´a poskytuje funkce pro spr´avu datab´aze a dat v n´ı uloˇzen´ ych. Souˇcasn´a implementace metadatov´eho serveru vol´a funkce konektoru pˇr´ımo ve v´ ykonn´ ych bloc´ıch zdrojov´eho k´odu, kter´e zpracov´avaj´ı poˇzadavky od klient˚ u a generuj´ı odpovˇedi na nˇe. To vede k nedostateˇcn´e flexibilitˇe a sloˇzit´emu pouˇzit´ı jin´eho datab´azov´eho syst´emu z n´asleduj´ıc´ıch d˚ uvod˚ u: • v pˇr´ıpadˇe potˇreby zmˇeny pouˇzit´eho datab´azov´eho syst´emu je nutn´e prov´est u ´pravu velk´e ˇc´asti zdrojov´ ych k´od˚ u metadatov´eho serveru, • doch´az´ı k redundanci blok˚ u zdrojov´eho k´odu, kter´a mimo jin´e zvyˇsuje jeho celkovou nepˇrehlednost a neefektivitu zp˚ usobenou nutnost´ı vykon´avat st´ale stejnou sekvenci krok˚ u: – generov´an´ı SQL dotazu (ˇci pˇr´ıkazu), – jeho vykon´an´ı (s vyuˇzit´ım funkc´ı konektoru), – oˇsetˇren´ı pˇr´ıpadn´ ych chyb (napˇr. nedostupnost datab´azov´eho syst´emu), – zpracov´an´ı a uloˇzen´ı dat z v´ ysledku pro dalˇs´ı pouˇzit´ı. Nedostateˇcnou flexibilitu v pouˇz´ıv´an´ı datab´azov´eho syst´emu lze odstranit vhodnou dekompozic´ı zdrojov´eho k´odu, kter´a ve v´ ysledku povede k implementaci metadatov´e mezivrstvy spravuj´ıc´ı veˇsker´a uloˇzen´a data v datab´azi. Toto ˇreˇsen´ı nav´ıc pˇrinese i n´asleduj´ıc´ı v´ yhody: • nez´avislost na pouˇzit´em datab´azov´em syst´emu umoˇzn ˇuj´ıc´ı jeho jednoduchou zmˇenu (i za datab´azov´ y syst´em nevyuˇz´ıvaj´ıc´ı SQL), • moˇznost vyuˇz´ıt jeho specifick´e funkce (napˇr. podpora transakc´ı), • pˇrehlednost a zjednoduˇsen´ı zdrojov´eho k´odu metadatov´eho serveru.
24
6.2.3
Model pˇ r´ıstupu k soubor˚ um
Souˇcasn´a implementace pˇr´ıstupu k soubor˚ um je zaloˇzena na modelu typu upload/download. Klientsk´e aplikace ve sv´ ych aktu´aln´ıch verz´ıch pracuj´ı se souborem vˇzdy jako s celkem, kter´ y je bˇehem u ´prav dostupn´ y jako doˇcasn´a kopie nebo z lok´aln´ı cache (pokud je na stranˇe klienta implementov´ana). Z tohoto d˚ uvodu pouˇzit´ı upload/download modelu zat´ım nepˇredstavuje ˇz´adn´ y probl´em a naopak jeho jednoduchost je v´ yhodn´a - d´ıky nen´aroˇcnosti na implementaci jak na stranˇe sereru tak na stranˇe klienta. Jiˇz bylo zm´ınˇeno, ˇze kl´ıˇcovou a poˇzadovanou vlastnost´ı KIVFS je podpora mobiln´ıch zaˇr´ızen´ı. Ty jsou limitovan´e pˇredevˇs´ım v maxim´aln´ı velikosti kapacity lok´aln´ı cache, kter´a nikdy nebude dosahovat velikosti kapacity lok´aln´ı cache klientsk´e aplikace urˇcen´e pro desktopovou platformu. Dalˇs´ım omezen´ım je citlivost na objem pˇren´aˇsen´ ych dat. Proto je nutn´e z hlediska zachov´an´ı vysok´e dostupnosti syst´emu, upravit model pˇr´ıstupu k soubor˚ um tak, aby byl vhodn´ y k pouˇzit´ı i na mobiln´ıch platform´ach. ˇ sen´ım je implementace modelu vzd´alen´eho pˇr´ıstupu k soubor˚ Reˇ um, kter´ y vyuˇz´ıv´a napˇr. i OpenAFS. Ta kromˇe celkov´eho zlepˇsen´ı dostupnosti pˇrinese konkr´etnˇe i n´asleduj´ıc´ı v´ yhody: • moˇznost upravovat jen poˇzadovanou ˇca´st souboru (sn´ıˇzen´ı n´arok˚ u na datov´ y pˇrenos), • nevyˇzaduje lok´aln´ı cache na stranˇe klienta. Nev´ yhodou uveden´eho ˇreˇsen´ı je vysok´a reˇzie na serveru v pˇr´ıpadˇe, ˇze klient bude upravovat velk´ y soubor po mal´ ych bloc´ıch a generovat velk´e mnoˇzstv´ı poˇzadavk˚ u, coˇz vede k riziku zahlcen´ı serveru a n´asledn´e omezen´ı sluˇzby. Tomu lze pˇredej´ıt napˇr. implementac´ı mechanismu, kter´ y bude zmˇenˇen´e bloky souboru ukl´adat do vyrovn´avac´ı pamˇeti a zap´ıˇse je aˇz po dos´ahnut´ı urˇcit´e celkov´e velikosti nebo dokonˇcen´ı zmˇen (uzavˇren´ı souboru). Pos´ıl´an´ı souboru po velmi mal´ ych bloc´ıch ovlivˇ nuje v´ yslednou pˇrenosovou rychlost. Vhodnou velikost pos´ılan´ ych blok˚ u dat proto mus´ı ˇreˇsit klient. 6.2.4
Vylouˇ cen´ı soubˇ eˇ zn´ eho pˇ r´ıstupu k souboru
Metadatov´ y server umoˇzn ˇuje d´ıky sv´e stavovosti ˇreˇsit vz´ajemn´e vylouˇcen´ı soubˇeˇzn´eho pˇr´ıstupu k soubor˚ um a konfliktn´ıch operac´ı pomoc´ı jednoduch´ ych z´amk˚ u. Kv˚ uli tomu, ˇze z´amky nejsou odliˇsen´e zvl´aˇst’ pro z´apis a zvl´aˇst’ pro ˇcten´ı, nelze vykon´avat v´ıcen´asobn´e ˇcten´ı ze souboru. ˇ sen´ım probl´emu je implementace z´amk˚ Reˇ u pro ˇcten´ı a z´apis (sekce 4.8.2). 6.2.5
Podpora klientsk´ e lok´ aln´ı cache a offline operac´ı
Lok´aln´ı cache na stranˇe klientsk´ ych aplikac´ı zat´ım nebyla implementov´ana. Z toho d˚ uvodu ji proto v souˇcasn´e verzi KIVFS nijak nepodporuje ani serverov´a ˇc´ast. Vzhledem k tomu, ˇze vyuˇzit´ı lok´aln´ı cache je v budoucnosti pl´anovan´e pro zajiˇstˇen´ı dostupnosti dat i v pˇr´ıpadˇe nemoˇznosti nav´azat z nˇejak´eho d˚ uvodu spojen´ı se serverem, podpora ze strany serveru je nutn´a.
25
Kv˚ uli podpoˇre mobiln´ıch platforem, kter´e jsou ˇcasto omezeny velikost´ı lok´aln´ıho datov´eho u ´loˇziˇstˇe, je nutn´e poˇc´ıtat i s omezenou maxim´aln´ı velikost´ı lok´aln´ı cache. Kv˚ uli tomu nelze uvaˇzovat, ˇze do lok´aln´ı cache bude klient ukl´adat kopie vˇsech soubor˚ u uˇzivatele. Z´akladn´ım pˇredpokladem pro zajiˇstˇen´ı podpory ze strany serveru je, ˇze na stranˇe klienta se: • do lok´aln´ı cache budou ukl´adat jen nejˇcastˇeji pouˇz´ıvan´e soubory, nebo: • z lok´aln´ı cache budou odstraˇ novat nejm´enˇe pouˇz´ıvan´e soubory. S implementac´ı lok´aln´ı cache na stranˇe klienta je nutn´e navrhnout mechanismus, kter´ y zajist´ı konzistentn´ı stav v n´ı uloˇzen´ ych kopi´ı soubor˚ u. M˚ uˇze totiˇz doj´ıt ke konfliktn´ı situaci, kdy klient m´a v lok´aln´ı cache uloˇzenou upravenou kopii souboru, kter´ y byl mezit´ım na stranˇe serveru tak´e upraven. Server proto nepovol´ı klientovi pˇrepsat soubor, dokud nebude konflikt vyˇreˇsen. Coda tento probl´em ˇreˇs´ı verzov´an´ım jednotliv´ ych soubor˚ u (sekce 4.7.1). Verzov´an´ı souboru je realizov´ano ˇc´ıtaˇcem, jehoˇz hodnota odpov´ıd´a poˇctu zmˇen souboru od jeho vytvoˇren´ı. Pˇr´ıpadn´e vyˇreˇsen´ı konflikt˚ u v rozch´azej´ıc´ıch se verz´ıch stejn´eho souboru, kter´ y je uloˇzen jak v lok´aln´ı cache tak i na vzd´alen´em datov´em u ´loˇziˇsti, je pˇrenech´ano uˇzivateli. Tento postup ˇreˇsen´ı pro zajiˇstˇen´ı konzistentn´ıho stavu bude pouˇzit i v KIVFS. 6.2.6
Replikace a konzistence uloˇ zen´ ych dat
Datov´e u ´loˇziˇstˇe v KIVFS podporuje multimaster replikaci s vyuˇzit´ım datacentrick´eho modelu sekvenˇcn´ı kozistence. Vˇsechny repliky soubor˚ u jsou pˇr´ıstupn´e pro ˇcten´ı i z´apis. Souˇcasn´a implementace replikace zp˚ usobuje nedostupnost obsahu souboru po dokonˇcen´ı z´apisu do nˇej. D˚ uvodem je nutnost ˇcekat, dokud nejsou provedeny zmˇeny ve vˇsech replik´ach souboru. Soubor je proto st´ale uzamˇcen a jeho obsah nepˇr´ıstupn´ y, dokud nejsou vˇsechny repliky aktualizov´any a n´aslednˇe nen´ı odemˇcen a jeho obsah zpˇr´ıstupnˇen uˇzivatel˚ um. To pˇrin´aˇs´ı n´asleduj´ıc´ı nev´ yhody ovlivˇ nuj´ıc´ı dostupnost cel´eho KIVFS: • okamˇzit´e zat´ıˇzen´ı vˇsech souborov´ ych server˚ u spravuj´ıc´ıch repliku dan´eho souboru, • dojde-li bˇehem z´apisu k chybˇe, je nutn´e aby byla zpracov´ana vˇsemi souborov´ ymi servery, coˇz m´a za n´asledek dalˇs´ı zv´ yˇsen´ı jejich reˇzie a z´atˇeˇze, • obsah souboru nen´ı pˇr´ıstupn´ y ihned po jeho nahr´an´ı. ˇ sen´ım je zachov´an´ı multimaster replikace a implementace jiˇz zm´ınˇen´eho verReˇ zov´an´ı soubor˚ u, resp. jejich replik. Kv˚ uli zajiˇstˇen´ı st´al´e dostupnosti je nutn´e, aby replikace prob´ıhala automaticky na pozad´ı2 . Z´apis proto bude prov´adˇen pouze 2
Narozd´ıl od OpenAFS (stabiln´ı verze 1.6.1), u kter´eho je replikace, jeˇz je typu master/slave, spouˇstˇena na vyˇz´ ad´ an´ı“ spr´ avcem. ”
26
do jedn´e repliky souboru. Po jeho dokonˇcen´ı dojde ke zv´ yˇsen´ı jej´ı verze a ostatn´ı repliky souboru pˇrejdou do nekonzistentn´ıho stavu. Jejich postupnou aktualizac´ı dojde k jejich navracen´ı do konzistentn´ıho stavu a n´asledn´emu zpˇr´ıstupnˇen´ı jejich obsahu uˇzivatel˚ um. Po aktualizaci vˇsech replik soubor˚ u dojde ke znovuobnoven´ı konzistentn´ıho stavu cel´eho distribuovan´eho u ´loˇziˇstˇe. Sekvenˇcn´ı model konzistence dat z pohledu vyˇsˇs´ıch vrstev z˚ ustane zachov´an d´ıky zajiˇstˇen´ı pˇr´ıstupu pouze k replik´am soubor˚ u s nejvyˇsˇs´ı verz´ı. Navrˇzen´e ˇreˇsen´ı pˇrinese v kombinaci s v´ yˇse zm´ınˇenou implementac´ı v´ yluˇcn´eho pˇr´ıstupu k soubor˚ um pomoc´ı z´amk˚ u pro ˇcten´ı a z´apis (sekce 6.2.4) n´asleduj´ıc´ı v´ yhody: • sn´ıˇzen´ı zat´ıˇzen´ı souborov´ ych server˚ u d´ıky postupn´e synchronizaci zastaral´ ych replik na pozad´ı s jejich aktu´aln´ımi verzemi, • zajiˇstˇen´ı dostupnosti obsahu alespoˇ n jedn´e z replik souboru ihned po jeho nahr´an´ı. 6.2.7
S´ emantika sd´ılen´ı souboru
Sd´ılen´ı soubor˚ u v r´amci KIVFS je implementov´ano dle unixov´e s´emantiky (sekce 4.8.1). Kv˚ uli nutnosti okamˇzitˇe synchronizovat poˇzadavky na z´apis se zvyˇsuje reˇzie a zat´ıˇzen´ı vˇsech server˚ u. To z pohledu klienta vede ke zpoˇzdˇen´ı pˇri ˇcek´an´ı na zpracov´an´ı poˇzadavk˚ u a sniˇzuje propustnost syst´emu. ˇ sen´ım je implementace relaˇcn´ı s´emantiky (sekce 4.8.1), kter´a je umoˇznˇena d´ıky Reˇ stavovosti metadatov´eho serveru, a jiˇz zm´ınˇen´eho v´ yluˇcn´eho pˇr´ıstupu k soubor˚ um pomoc´ı z´amk˚ u pro ˇcten´ı a z´apis (sekce 6.2.4). 6.2.8
Obnova po v´ ypadku
Souˇcasn´a verze KIVFS nem´a implementovan´ y ˇz´adn´ y mechanismus zajiˇst’uj´ıc´ı obnovu dat po v´ ypadku. To m˚ uˇze v´est ke sn´ıˇzen´ı stability cel´eho syst´emu. Proces obnovy dat po v´ ypadku datov´eho u ´loˇziˇstˇe mus´ı m´ıt na starosti synchronizaˇcn´ı vrstva, kter´a je jako jedin´a schopn´a rozpoznat, ˇze k v´ ypadku doˇslo, a m˚ uˇze zah´ajit obnovu dat. Ta z pohledu serveru spoˇc´ıv´a ve zpracov´an´ı nezpracovan´ ych poˇzadavk˚ u, kter´e byly ve zbytku syst´emu (tj. na vˇsech ostatn´ıch serverech) jiˇz zpracov´any. Mechanismus pro obnovu dat po v´ ypadku vyˇzaduje ukl´adat vˇsechny poˇzadavky na zmˇenu dat a m´ıt tak dostupn´ y seznam proveden´ ych operac´ı (poˇzadavk˚ u) v r´amci kaˇzd´eho datov´eho u ´loˇziˇstˇe. To lze v r´amci datov´e vrstvy zajistit implementac´ı podpory pro logov´an´ı poˇzadavk˚ u synchronizaˇcn´ı vrstvou. 6.2.9
Spr´ ava uloˇ zen´ ych dat a jejich deduplikace
Soubory uloˇzen´e na svazc´ıch souborov´ ych server˚ u jsou organizov´an´e dle jiˇz dˇr´ıve navrˇzen´e struktury pro ukl´ad´an´ı dat.[18] Jej´ı sch´ema je zn´azornˇeno na obr´azku ˇc. 11 a spoˇc´ıv´a v rozm´ıstˇen´ı cel´ ych soubor˚ u v urˇcit´em poˇctu do jednotliv´ ych adres´aˇr˚ u, jejichˇz poˇcet nen´ı omezen. Adres´aˇre se dynamicky vytv´aˇrej´ı a zaplˇ nuj´ı v z´avislosti na aktu´aln´ım poˇctu soubor˚ u v nich uloˇzen´ ych. Poˇcet soubor˚ u v adres´aˇri je omezen kv˚ uli moˇznosti optimalizovat strukturu pro ukl´ad´an´ı dat pro pouˇzit´e souborov´e
27
syst´emy, jejichˇz v´ ykonnost je pˇr´ımo ovlivnˇena celkov´ ym poˇctem soubor˚ u v pracovn´ım adres´aˇri. Mapov´an´ı uloˇzen´ ych soubor˚ u v t´eto struktuˇre zajiˇst’uje metadatov´ y server, kter´ y spravuje jmenn´ y prostor a poskytuje souborov´e sluˇzby (tabulka ˇc. 3). V r´amci cel´eho syst´emu lze optimalizac´ı struktury pro ukl´ad´an´ı dat, kter´a spoˇc´ıv´a v rozdˇelov´an´ı uloˇzen´ ych soubor˚ u menˇs´ıch ˇc´ast´ı (d´ale oznaˇcovan´ ych jako podsoubory), znaˇcnˇe ovlivnit jeho: V´ ykonnost. M´ısto replikace cel´eho souboru je moˇzn´e prov´adˇet replikaci jen jeho zmˇenˇen´ ych podsoubor˚ u. Rozˇ siˇ ritelnost. Rozdˇelen´ı soubor˚ u do menˇs´ıch ˇc´ast´ı odstran´ı limit pro maxim´aln´ı velikost souboru a t´ım i dalˇs´ı sn´ıˇzen´ı z´avislost´ı na pouˇzit´ ych technologi´ıch, kter´a se v tomto pˇr´ıpadˇe t´ yk´a vlastnost´ı pouˇzit´eho souborov´eho syst´emu na dan´em svazku souborov´eho serveru.
Obr´azek 11: Sch´ema struktury pro ukl´ad´an´ı dat.
V souvislosti s replikac´ı se nab´ız´ı moˇznost jej´ı optimalizace spoˇc´ıvaj´ıc´ı v synchronizaci pouze zmˇenˇen´ ych podsoubor˚ u dan´e repliky souboru. K tomu je nutn´e navrhnout a implementovat mechanismus, kter´ y rozpozn´a zmˇenˇen´e relevantn´ı podsoubory. Ten m˚ uˇze b´ yt zaloˇzen porovn´av´an´ı kontroln´ıch souˇct˚ u jednotliv´ ych podsoubor˚ u s vyuˇzit´ım algoritm˚ u MD5[14], SHA[15], apod. Na z´akladˇe hled´an´ı shody mezi kontroln´ımi souˇcty lze postavit i experiment´aln´ı deduplikaci uloˇzen´ ych podsoubor˚ u, kter´a se dnes zat´ım u ˇza´dn´eho bˇeˇznˇe pouˇz´ıvan´eho DFS nevyskytuje. Jej´ım c´ılem je odstranˇen´ı redundance uloˇzen´ ych podsoubor˚ u v r´amci datov´eho u ´loˇziˇstˇe jejich n´ahradou za odkazy na jeden zdrojov´ y podsoubor. V pˇr´ıpadˇe, ˇze uˇzivatel chce zapsat do deduplikovan´eho podsouboru (tj. odkazu na zdrojov´ y podsoubor), je nutn´e zajistit jeho zpˇetnou duplikaci jeˇstˇe pˇred proveden´ım samotn´eho z´apisu. Za jednodznaˇcn´e pˇr´ınosy deduplikace lze uvaˇzovat:
28
• optick´e zv´ yˇsen´ı kapacity datov´eho u ´loˇziˇstˇe, • niˇzˇs´ı reˇzie datov´eho u ´loˇziˇstˇe. V r´amci KIVFS lze deduplikaci uloˇzen´ ych podsoubor˚ u ˇreˇsit pouze na u ´rovni jednotliv´ ych svazk˚ u souborov´ ych server˚ u.[18] Deduplikovat uloˇzen´a data v r´amci cel´eho souborov´eho serveru (resp. vˇsech jeho svazk˚ u) pˇrin´aˇs´ı riziko nedostupnosti deduplikovan´ ych dat. To m˚ uˇze nastat bˇehem selh´an´ı svazku obsahuj´ıc´ıcho zdrojov´ y podsoubor, na kter´ y odkazuj´ı deduplikovan´e podsoubory. Teoreticky moˇzn´a je i deduplikace dat v r´amci cel´eho KIVFS. Jej´ı implementace je ale bez´ uˇceln´a, protoˇze by doch´azelo i k deduplikaci replik. 6.2.10
Zabezpeˇ cenost uloˇ zen´ ych dat
V r´amci KIVFS nejsou implementov´any ˇza´dn´e mechanismy ˇreˇs´ıc´ı zabezpeˇcen´ı uloˇzen´ ych dat a jejich sd´ılen´ı. Uˇzivatel˚ um je dispozici priv´atn´ı jmenn´ y prostor a kv˚ uli tomu maj´ı pˇr´ıstup pouze k obsahu souboru, jehoˇz jsou vlastn´ıkem. Nemoˇznost sd´ılet data dalˇs´ım uˇzivatel˚ um pro nˇe znaˇcnˇe sniˇzuje pouˇzitelnost cel´eho syst´emu. Zpˇr´ıstupnˇen´ı vˇsech soubor˚ u a tedy umoˇznˇen´ı jejich sd´ılen´ı mezi vˇsemi uˇzivateli lze doc´ılit pouze implementac´ı glob´aln´ıho jmenn´eho prostoru (sekce 4.3.1). Ten pˇrin´aˇs´ı bezpeˇcnost´ı rizika, mezi kter´a patˇr´ı: • nevyˇz´adan´a zmˇena obsahu souboru, • nechtˇen´e poskytnut´ı obsahu souboru, • smaz´an´ı cel´eho souboru, tˇret´ı stranou. Uveden´a rizika lze odstranit pouze implementac´ı mechanismu, kter´ y bude umoˇzn ˇovat nastavit omezen´ y pˇr´ıstup k soubor˚ um a n´aslednˇe dohl´ıˇzet na jeho respektov´an´ı. V r´amci KIVFS bude omezen´ y pˇr´ıstup k soubor˚ um realizov´an prostˇrednictv´ım seznamu pˇr´ıstupov´ ych pr´av (sekce 4.9), kter´ y vyuˇz´ıvaj´ı i napˇr. OpenAFS ˇci Coda. Dalˇs´ım rizikem, kter´e se t´ yk´a bezpeˇcnosti uloˇzen´ ych dat, je moˇznost fyzick´eho u ´toku na datov´e u ´loˇziˇstˇe. Utoˇcn´ıkov´ ym c´ılem je v tomto pˇr´ıpadˇe z´ısk´an´ı pˇr´ım´eho pˇr´ıstupu k dat˚ um, kter´a jsou uloˇzen´a na svazc´ıch napadan´eho souborov´eho serveru. Pokud uˇzivatel nezaˇsifroval data pˇred jejich nahr´an´ım prostˇredn´ıctv´ım klientsk´e aplikace na napaden´ y souborov´ y server, umoˇznil u ´toˇcn´ıkovi jednoduch´ y pˇr´ıstup. Jedinou u ´ˇcinnou ochranou proti fyzick´emu u ´toku na souborov´ y server a n´asledn´emu zneuˇzit´ı uloˇzen´ ych dat je prevence spoˇc´ıvaj´ıc´ı v implementaci symetrick´eho ˇsifrov´an´ı blok˚ u pˇrijat´ ych dat pˇred jejich samotn´ ym uloˇzen´ım. Asymetrick´e ˇsifrov´an´ı nen´ı moˇzn´e z d˚ uvodu potˇreby uchov´avat r˚ uzn´e kl´ıˇce na souborov´ ych serverech a nutnosti m´ıt ve v´ ysledku na jejich svazc´ıch uloˇzen´a data o stejn´e velikosti. 6.2.11
Kv´ oty virtu´ aln´ıch svazk˚ u
Datov´e u ´loˇziˇstˇe KIVFS neumoˇzn ˇuje nastavit ˇza´dn´e omezen´ı uˇzivatele z hlediska dostupn´e kapacity u ´loˇziˇstˇe. Uˇzivatel´e se proto mohou bez ˇspatn´eho u ´myslu pokouˇset
29
nahr´at soubory, jejichˇz velikost je vˇetˇs´ı neˇz celkov´a kapacita datov´eho u ´loˇziˇstˇe, kter´a je rovna celkov´e kapacitˇe svazk˚ u souborov´ ych server˚ u. V d˚ usledku toho m˚ uˇze na souborov´em serveru teoreticky doj´ıt k n´asleduj´ıc´ım situac´ım, kter´e omezuj´ı dostupnost a spolehlivost cel´eho syst´emu: • nemoˇznost pˇrijmout a uloˇzit soubor, kter´ y se klient pokouˇs´ı nahrav´at, • neoˇcek´avan´ ym chyb´am souborov´eho syst´emu pouˇzit´eho na svazku, pˇripojen´em k souborov´emu serveru, kter´e mohou v´est aˇz ke ztr´atˇe dˇr´ıve uloˇzen´ ych dat. Uveden´ ym situac´ım lze pˇredej´ıt implementac´ı mechanismu, kter´ y umoˇzn´ı nastavit diskovou kv´otu omezuj´ıc´ı dostupnou kapacitu tzv. virtu´aln´ıch svazk˚ u.[18] Ty jsou v r´amci jm´enn´eho prostoru pouˇzit´e jako pˇr´ıpojn´e body adres´aˇr˚ u k jednotliv´ ym svazk˚ um souborov´ ych server˚ u. Pˇr´ıklad jejich pouˇzit´ı a mapov´an´ı na u ´rovni server˚ u je zn´azornˇen na obr´azku ˇc. 12, ve kter´em plat´ı, ˇze: • svazky A a B jsou replikov´any na oba souborov´e servery • koˇrenov´y adres´aˇr a adres´aˇr home jsou pˇripojeny k replikovan´emu svazku volume A • domovsk´ y adres´aˇr user je pˇripojen k replikovan´emu svazku volume B
Obr´azek 12: Virtu´aln´ı svazky a jejich mapov´an´ı na u ´rovni server˚ u.
Uˇzivatele user tak lze z jeho pohledu omezit diskovou kv´otou pˇridˇelenou napˇr. k jeho dom´ac´ımu adres´aˇri, kter´a omez´ı dostupnou kapacitu adres´aˇre.
30
6.2.12
Tunelov´ an´ı pˇ r´ıstupu k soubor˚ um
Klient je vˇzdy bˇehem pˇrenosu souboru pˇripojen k souborov´emu serveru, kter´ y je pro nˇej z hlediska jeho dostupnosti nejvhodnˇejˇs´ı a obsahuje aktu´aln´ı repliku poˇzadovan´eho souboru. I tak ale m˚ uˇze b´ yt nav´azan´e spojen´ı uskuteˇcnˇeno s geograficky vzd´alen´ ym serverem a rychlost pˇrenosu souboru m˚ uˇze b´ yt omezena. Za pˇredpokladu, ˇze servery budou vˇzdy vz´ajemnˇe propojen´e rychlou a stabiln´ı linkou, m˚ uˇze b´ yt tento probl´em vyˇreˇsen vytvoˇren´ım tunelovan´eho spojen´ı mezi nejbliˇzˇs´ım souborov´ ym serverem a dalˇs´ım souborov´ ym serverem, kter´ y spravuje poˇzadovanou repliku souboru. Klient se proto m˚ uˇze st´ale pˇripojovat jen k nejbliˇzˇs´ımu souborov´emu serveru, kter´ y nemus´ı obsahovat poˇzadovanou repliku souboru, ale skrze tunel bude jej´ı obsah transparentnˇe poskytovat z jin´eho souborov´eho serveru. Rychlost pˇrenosu souboru z pohledu klienta tak m˚ uˇze b´ yt znaˇcnˇe zv´ yˇsena. Na obr´azku ˇc. 13 je uveden pˇr´ıklad, ve kter´em uˇzivatel pˇristupuje ke sv´emu svazku nejvyˇsˇs´ı dostupnou rychlost´ı skrze 100Mbit tunel.
Obr´azek 13: Tunelov´an´ı spojen´ı (100MBbit tunel vyznaˇcen ˇcervˇenˇe).
31
7
Sd´ılen´ a knihovna libkivfscore
Bˇehem paralelnˇe prob´ıhaj´ıc´ıho v´ yvoje jednotliv´ ych vrstev serveru byly v jejich zdrojov´ ych k´odech postupnˇe identifikov´any bloky, kter´e zbyteˇcnˇe implementuj´ı podobnou funkcinalitu. Zpoˇca´tku se jednalo o funkce realizuj´ıc´ı s´ıt’ovou komunikaci. K tˇem zanedlouho pˇribyly dalˇs´ı funkce, kter´e ˇreˇsily jednotn´e form´atov´an´ı v´ ypisovan´ ych informac´ı na obrazovku ˇci do souboru, spr´avu vlastn´ıch datov´ ych struktur, apod. Duplicitn´ı ˇca´sti zdrojov´eho k´odu mˇely negativn´ı vliv na jeho pˇrehlednost, kter´a vedla k ˇcastˇejˇs´ımu v´ yskytu program´atorsk´ ych chyb. V r´amci potˇreby odstranit duplicitn´ı funkce, zajistit dodrˇzov´an´ı programovac´ıch konvenc´ı a celkovˇe zpˇrehlednˇenit zdrojov´e k´ody KIVFS vznikla sd´ılen´a knihovna libkivfscore, jej´ımˇz c´ılem hlavn´ım je usnadnit dalˇs´ı v´ yvoj. V pr˚ ubˇehu dalˇs´ıho v´ yvoje se sd´ılen´a knihovna libkivfscore stala z´akladn´ım stavebn´ım kamenem cel´eho KIVFS, kter´ y vyuˇz´ıvaj´ı i klientsk´e aplikace a nebo z nˇej pˇrinejmenˇs´ım vych´azej´ı. Z´akladn´ı funkce3 , kter´e poskytuje, lze rozdˇelit do n´asleduj´ıc´ıch kategori´ı: S´ıt’ov´ a komunikace (core/kivfs-net.h). Funkce slouˇz´ı jako nadstavba s´ıt’ov´e komunikace skrze sokety s vyuˇzit´ım KIVFS protokolu. Umoˇzn ˇuje vytv´aˇret zpr´avy typu poˇzadavek ˇci odpovˇed’ a poskytuje funkce pro jejich spolehlivou v´ ymˇenu. Spr´ ava datov´ ych typ˚ u (core/kivfs-structs.h). Funkce poskytuj´ı jednotnou spr´avu abstraktn´ıch datov´ ych typ˚ u a struktur vˇcetnˇe jejich serializace do pole bajt˚ u (a deserializaci). Spr´ ava vl´ aken (core/kivfs-thread.h). Funkce slouˇz´ı ke spr´avˇe seznamu POSIX vl´aken a rozˇsiˇruj´ı moˇznosti jejich pouˇzit´ı. Logov´ an´ı (core/kivfs-logger.h). Funkce definuj´ı jednotn´ y form´at pro tisknut´ı informac´ı na obrazovku ˇci do souboru a umoˇzn ˇuj´ı vyuˇz´ıvat syst´emov´ y log. Spr´ avu sezen´ı (core/kivfs-session.h). Funkce umoˇzn ˇuj´ı spravovat sezen´ı (tzv. session). Jde pˇredevˇs´ım o spr´avu vˇsech nav´azan´ ych spojen´ı, zajiˇstˇen´ı bezpeˇcn´eho pˇr´ıstupu do prostoru pamˇeti, kter´ y je sd´ılen mezi vˇsemi sezen´ımi. Popis chyb (core/kivfs-constants.h). Funkce zajiˇst’uj´ı popis vˇsech chyb, kter´e se mohou v r´amci syst´emu vyskytnout.
3
Konkr´etn´ı popis funkc´ı lze nal´ezt v dokumentaci, kter´a je dostupn´a na pˇriloˇzen´em CD.
32
8
Optimalizace datov´ eho u ´ loˇ ziˇ stˇ e KIVFS
Bˇehem implementace navrˇzen´ ych optimalizac´ı a rozˇs´ıˇren´ı bylo nutn´e pr˚ ubˇeˇznˇe zasahovat do p˚ uvodn´ıho sch´ematu pouˇzit´e relaˇcn´ı datab´aze. Kv˚ uli zjednoduˇsen´ı vˇsechny d´ale popisovan´e ˇreˇsen´ı poˇc´ıtaj´ı s jiˇz upraven´ ym a pˇripraven´ ym sch´ematem datab´aze. N´asleduje proto jeho ERA model, kter´ y je uveden na obr´azku ˇc. 14, a struˇcn´ y popis zmˇen.
Obr´azek 14: ERA model souˇcasn´e datab´aze.
33
Tabulka entries • vznikla slouˇcen´ım tabulek files a directories, • obsahuje informace o vˇsech souborech, • pˇrid´any atributy umoˇzn ˇuj´ıc´ı nastaven´ı: – z´akl´adn´ıch pˇr´ıstupov´ ych pr´av k souboru (pro vlastn´ıka, skupinu a ostatn´ı), – hodnot ˇc´ıtaˇc˚ u pˇr´ıstup˚ u k souboru (pro ˇcten´ı, z´apis), – hodnot ˇc´ıtaˇc˚ u z´amk˚ u souboru (pro ˇcten´ı, z´apis), – typu souboru (bˇeˇzn´ y soubor, adres´aˇr). Tabulka volumes • obsahuje informace o virtu´aln´ıch svazc´ıch, • pˇrid´any atributy, kter´e umoˇzn ˇuj´ı nastaven´ı: – kapacity svazku, – rezervovan´eho m´ısta. Tabulka replicas • obsahuje informace o replik´ach soubor˚ u, • pˇrid´any atributy, kter´e umoˇzn ˇuj´ı nastaven´ı: – verze repliky, – ˇcasu posledn´ı modifikace repliky, obsahuj´ıc´ı informace o replik´ach soubor˚ u. Tabulka groups • obsahuje informace o vˇsech skupin´ach uˇzivatel˚ u, • pˇrid´any atribut oznaˇcuj´ıc´ı skupinu administr´ator˚ u. Tabulka acl users • pˇrid´ana z d˚ uvodu nutnosti efektivnˇe uchov´avat informace o (jmenn´em) seznamu uˇzivatel˚ u, kteˇr´ı maj´ı pˇridˇelen pˇr´ıstup k souboru. Tabulka acl groups • pˇrid´ana ze stejn´eho d˚ uvodu jako tabulka acl users, ale pro skupiny. Tabulka sources • pˇrid´ana kv˚ uli nutnosti uchov´avat a spravovat informace o deduplikovan´ ych podsouborech.
34
Tabulka parts • pˇrid´ana kv˚ uli nutnosti uchov´avat informace o podsouborech. Tabulka entry descriptors • pˇrid´ana kv˚ uli nutnosti uchov´avat a spravovat informace o otevˇren´ ych souborech. Tabulka message logs • pˇrid´ana kv˚ uli nutnosti uchov´avat a spravovat poˇzadavky, na z´akladˇe kter´ ych lze prov´est obnovu syst´emu. Z potˇreby rychl´eho pˇr´ıstupu k souhrn´ ym informac´ım z v´ıce tabulek byly vytvoˇreny n´asleduj´ıc´ı pohledy: Pohled actual replicas • obsahuje informace o aktu´aln´ıch replik´ach souboru. Pohled storage states • obsahuje informace o aktu´aln´ım stavu vˇsech svazk˚ u. Pohled source candidates • obsahuje seznam vˇsech duplicitn´ıch podsoubor˚ u, ze kter´ ych lze vytvoˇrit zdrojov´e podsoubory. Pohled duplicated parts • obsahuje seznam vˇsech duplicitn´ıch podsoubor˚ u, kter´e jsou urˇcen´e k deduplikaci. Pohled deduplicated parts • obsahuje seznam vˇsech deduplikovan´ ych podsoubor˚ u.
8.1
Metadatov´ a mezivrstva
Implementovan´a metadatov´a mezivrstva slouˇz´ı jako rozhran´ı mezi datab´azov´ ym syst´emem a metadatov´ ym serverem. Jej´ım c´ılem je spravovat a hlavnˇe poskytovat data uloˇzen´a v relaˇcn´ı datab´azi s vyuˇzit´ım abstrakn´ıch datov´ ych typ˚ u a struktur, kter´e jsou definov´any ve sd´ılen´e knihovnˇe libkivfscore, prostˇrednictv´ım tˇechto z´akladn´ıch operac´ı: • v´ ybˇer z´aznam˚ u z datab´aze, • vloˇzen´ı nov´eho z´aznamu do datab´aze,
35
• smaz´an´ı z´aznam˚ u z datab´aze, • u ´prava z´aznam˚ u v datab´azi. Jako pˇr´ıklad lze uv´est operaci pro v´ ybˇer souboru z datab´aze, kter´ y je realizov´an vol´an´ım n´ıˇze uveden´e funkce. Seznam vˇsech funkc´ı pro spr´avu souboru v datab´azi, je uveden v pˇr´ıloze A. /* vybere soubor v adres´ aˇ ri s dan´ ym n´ azvem */ int db_get_file(db_transaction_t *transaction, kivfs_entry_t **p_entry, kivfs_entry_t *parent_entry, char *name);
// // // //
identifik´ ator transakce vybran´ y soubor rodiˇ covsk´ y adres´ aˇ r n´ azev souboru
V tˇelech tˇechto funkc´ı se generuje SQL pˇr´ıkaz, kter´ y se pˇred´av´a vlastn´ımu datab´azov´emu konektoru k vykon´an´ı. Ten v pˇr´ıpadˇe u ´spˇeˇsn´eho vykon´an´ı pˇr´ıkazu vr´at´ı jeho v´ ysledek, kter´ y je d´ale zpracov´an a hodnoty z nˇej uloˇzeny do datov´ ych struktur. 8.1.1
Vlastn´ı datab´ azov´ y konektor
Pro pˇr´ıstup k dat˚ um uloˇzen´ ym v datab´azi se vyuˇz´ıvaj´ı funkce, kter´e jsou poskytov´any konektorem k MySQL. Jeho pouˇzit´ı znaˇcnˇe omezuje chybˇej´ıc´ı podpora sd´ılen´ı nav´azan´eho spojen´ı k datab´azov´emu syst´emu (tzv. poolov´an´ı) mezi v´ıce vl´akny. Tento probl´em je vyˇreˇsen pouˇzit´ım vlastn´ıho konektoru k datab´azov´emu syst´emu, kter´ y v souˇcasn´e verzi implementov´an jako nadstavba MySQL konektoru. Pˇri inicializaci konektoru dojde k nav´azan´ı urˇcit´eho poˇctu spojen´ı k datab´azov´emu syst´emu, kter´ y je d´an parametrem pooling 4 v konfiguraˇcn´ım souboru serveru. Vˇsechna spojen´ı jsou pot´e uloˇzena do spojov´eho seznamu sd´ılen´eho mezi vˇsemi vl´akny. V pˇr´ıpadˇe, ˇze vl´akno potˇrebuje pˇristupovat k dat˚ um uloˇzen´ ym v datab´azi, je vybr´ano spojen´ı, kter´e je pr´avˇe voln´e a nen´ı rezervov´ano ˇz´adn´ ym dalˇs´ım vl´aknem. Toto spojen´ı je n´aslednˇe oznaˇceno jako rezervovan´e a vl´akno m˚ uˇze skrze nˇej zaˇc´ıt vykon´av´at poˇzadovan´e operace s daty. Po dokonˇcen´ı vˇsech operac´ı vl´akno zruˇs´ı rezervaci spojen´ı a to je opˇet oznaˇceno jako voln´e. Poˇzaduje-li vl´akno pˇr´ıstup k dat˚ um uloˇzen´ ym v datab´azi a vˇsechna spojen´ı jsou rezervovan´a, pak zaloguje varovnou zpr´avu: Datababase connection limit has been reached. Please increase the pool limit in cofiguration file.
a n´aslednˇe mus´ı ˇcekat, dokud u nˇekter´eho z nich nebude rezervace zruˇsena a nebude uvolnˇeno. D˚ uvodem pro omezen´ y poˇcet spojen´ı k datab´azov´emu serveru je ochrana proti DDoS u ´toku. Nav´az´an´ı a uknoˇcen´ı spojen´ı lze realizovat prostˇrednictv´ım vol´an´ı n´ıˇze uveden´ ych funkc´ı. Seznam vˇsech dalˇs´ıch funkc´ı, kter´e datab´azov´ y konektor poskytuje, je uveden v pˇr´ıloze B. 4
V´ ychoz´ı hodnota je 100 - tento poˇcet spojen´ı se bˇehem testov´an´ı v´ ykonnosti datov´eho u ´loˇziˇstˇe projevil jako dostaˇcuj´ıc´ı.
36
/* nav´ aˇ ze spojen´ ı s datab´ azov´ ym syst´ emem */ int db_connect(char *host, // uint16 port, // char *user, // char *pass, // char *database, // unsigned int pool_size); //
IP adresa nebo hostname serveru port serveru uˇ zivatesl´ e jm´ eno uˇ zivatelsk´ e heslo n´ azev (sch´ ematu) datab´ aze max. poˇ cet spojen´ ı
/* ukonˇ c´ ı spojen´ ı s datab´ azov´ y syst´ emem */ void db_disconnect();
Pouˇzit´ı vlastn´ıho datab´azov´eho konektoru umoˇzn ˇuje jednoduchou zmˇenu datab´azov´eho syst´emu. T´e lze doc´ılit u ´pravou tˇel v´ yˇse uveden´ ych funkc´ı. Experiment´alnˇe byly implementov´any datab´azov´e konektory pro relaˇcn´ı datab´azov´e syst´emy Oracle a PostgreSql. V jejich v´ yvoji se zat´ım d´ale nepokraˇcuje. 8.1.2
Mapov´ an´ı relac´ı na datov´ e typy
Jednotliv´ ym relac´ım ve sch´ematu datab´aze odpov´ıdaj´ı datov´e struktury, ke kter´ ym jsou k dispozici funkce pro spr´avu. Jako pˇr´ıklad lze uv´est datov´e struktury a funkce odpov´ıdaj´ıc´ı relaci mezi soubory a ACL, kter´ y je kv˚ uli sv´e d´elce v pˇr´ıloze C.
8.2
Vzd´ alen´ y pˇ r´ıstup k soubor˚ um a relaˇ cn´ı s´ emantika jejich sd´ılen´ı
Nejvˇetˇs´ı zmˇena ˇreˇs´ıc´ı optimalizaci datov´eho u ´loˇziˇstˇe byla provedena v r´amci u ´pravy pˇr´ıstupu k soubor˚ um. Model upload/download byl nahrazen modelem vzd´alen´eho pˇr´ıstupu k souboru a byla implementov´ana relaˇcn´ı s´emantika sd´ılen´ı soubor˚ u (zmˇeny v souboru jsou pro ostatn´ı uˇzivatele viditeln´e aˇz po jeho zavˇren´ı). V z´asadˇe ˇslo o pˇrid´an´ı n´asleduj´ıc´ıch moˇznost´ı pro pr´aci se souborem: • otevˇr´ıt soubor v reˇzimu pro: – ˇcten´ı, – z´apis, – z´apis na konec souboru, – ˇcten´ı a z´apis, a vytvoˇrit jeho popisovaˇc (tzv. file descriptor), • moˇznost nastavovat aktu´aln´ı pozici v souboru, • uzavˇr´ıt soubor pomoc´ı jeho popisovaˇce. V´ ysledn´e ˇreˇsen´ı je pops´ano formou jednotliv´ ych krok˚ u, kter´e se odehravaj´ı na stranˇe serveru bˇehem pˇrenosu obsahu souboru mezi n´ım a klientem. Na obr´azku ˇc. 15 jsou pro snaˇzˇs´ı pˇredstavu tyto kroky zn´azornˇeny.
37
Obr´azek 15: Pˇrenos souboru.
8.2.1
Otevˇ ren´ı souboru
Poˇzadavek na otevˇren´ı souboru zpracov´av´a metadatov´ y server. Ten po jeho pˇrijet´ı zjist´ı, kter´ y soubor m´a b´ yt otevˇren a v jak´em reˇzimu. Seznam a popis jednotliv´ ych reˇzim˚ u je uveden v tabulce ˇc. 4. Pot´e ovˇeˇr´ı, zda je moˇzn´e soubor v dan´em reˇzimu otevˇr´ıt ovˇeˇren´ım n´asleduj´ıc´ıch podm´ınek: 1. uˇzivatel m´a k souboru umoˇznˇen´ y pˇr´ıstup s ohledem na dostupn´ y seznam pˇr´ıstupov´ ych pr´av (zp˚ usob ovˇeˇren´ı pˇr´ıstupu k souboru je pops´an v sekci 8.4), 2. soubor je odemˇcen (zp˚ usob ovˇeˇren´ı z´amk˚ u soubor˚ u je pops´an v sekci 8.5). Pokud soubor neexistuje a je otevˇren v reˇzimu pro z´apis, je nutn´e jej vytvoˇrit. Do tabulky entries je vloˇzen nov´ y z´aznam reprezentuj´ıc´ı soubor. V z´avislosti na rodiˇcovsk´em adres´aˇri a k nˇemu pˇripojen´emu virtu´aln´ımu svazku (z´aznamu z tabulky volumes), kter´ y slouˇz´ı jako pˇr´ıpojn´ y bod k jednotliv´ ym svazk˚ um souborov´ ych server˚ u (z´aznamy z tabulky servers), zjist´ı v´ ysledn´e fyzick´e um´ıstˇen´ı replik souboru (z´aznamy z tabulky storages). Pro kaˇzd´ y ze zjiˇstˇen´ ych svazk˚ u souborov´ ych server˚ u, se v tabulce replicas vytvoˇr´ı z´aznamy odpov´ıdaj´ıc´ı zat´ım pr´azdn´ ym replik´am souboru. Jejich verze je nastavena na v´ ychoz´ı hodnotu jedna.
38
Reˇ zim Z´apis Z´apis na konec souboru ˇ ı a z´apis Cten´ ˇ ı Cten´
Popis V pˇr´ıpadˇe, ˇze soubor neexistuje, je vytvoˇren. Obsah existuj´ıc´ıcho souboru je vynulov´an. V pˇr´ıpadˇe, ˇze soubor neexistuje, je vytvoˇren. Aktu´aln´ı pozice v souboru je nastavena na jeho konec. V pˇr´ıpadˇe, ˇze soubor neexistuje, je vytvoˇren. Soubor mus´ı existovat.
Tabulka 4: Reˇzimy pro otevˇren´ı souboru.
Otevˇren´ı souboru je provedeno vloˇzen´ım nov´eho z´aznamu do tabulky file descriptors, po kter´em n´asleduje poˇza´d´an´ı souborov´eho serveru o pˇripraven´ı se na pˇrenos jeho obsahu. Souborov´ y server otevˇre n´ahodn´ y port, kter´ y je urˇcen pouze pro pˇrenos pr´avˇe otevˇren´eho souboru. Na z´avˇer tohoto kroku metadatov´ y server odeˇsle odpovˇed’ klientovi na poˇzadavek otevˇren´ı souboru. Ta obsahuje informace o otevˇren´em souboru, IP adrese souborov´eho serveru pˇripraven´eho na pˇrenos souboru a portu, na kter´em poslouch´a. 8.2.2
Pˇ r´ıprava na pˇ renos obsahu souboru
Pˇrenos obsahu souboru zaˇc´ın´a pˇripojen´ım klienta k souborov´emu serveru. Ten okamˇzitˇe po nav´az´an´ı spojen´ı zjist´ı od metadatov´eho serveru souhrn´e informace o vˇsech aktu´aln´ıch replik´ach souboru z pohledu actual replicas, kter´e jsou dostupn´e, a tak´e souborov´ ych serverech, jeˇz je spravuj´ı. Je-li jedn´ım z nich, pak opˇet od metadatov´eho serveru zjist´ı dostupn´e informace o: • vˇsech podsouborech, kter´e tvoˇr´ı obsah repliky (informace z tabulky parts), • svazku, na kter´em jsou podsoubory uloˇzen´e (informace z tabulky storages), a je pˇripraven na z´ah´ajen´ı pˇrenosu obsahu repliky souboru. V pˇr´ıpadˇe, ˇze repliku souboru s´am nespravuje, mus´ı vytvoˇrit tunel skrze souborov´e servery mezi sebou sam´ ym a t´ım, kter´ y ji spravuje. Pot´e veˇsker´a jeho ˇcinnost sest´av´a z pˇrepos´ıl´an´ı poˇzadavku do vytvoˇren´eho tunelu. Pro souborov´ y server na druh´e stranˇe tunelu se souborov´ y server, ke kter´emu je pˇripojen klient, s´am st´av´a klientem. Vytv´aˇren´ı tunel˚ u je pops´ano v sekci 8.9. 8.2.3
Pˇ renos obsahu souboru
Kv˚ uli zjednoduˇsen´ı je z dalˇs´ıho textu vynech´an popis manipulace s podsoubory repliky, kter´a je zvl´aˇst’ pops´ana v sekci 8.3. Je uvaˇzov´ano, ˇze replika je tvoˇrena jen jedn´ım souborem (podsouborem). Jakmile je souborov´ y server pˇripraven k pˇrenosu obsahu repliky souboru, m˚ uˇze zaˇc´ıt pˇrij´ımat poˇzadavky na ˇcten´ı nebo z´apis klienta. Po kaˇzd´em obdrˇzen´ı poˇzadavku mus´ı z bezpeˇcnostn´ıch d˚ uvod˚ u zjistit, zda je urˇcen pro p˚ uvodnˇe otevˇrenou repliku souboru a tak´e jestli aktu´aln´ı operace odpov´ıd´a jeho reˇzimu otevˇren´ı.
39
Jde-li o poˇzadavek, kter´ y zapisuje do repliky souboru, pak vyhodnot´ı, zda je nutn´e rezervovat m´ısto pro nov´a data a pˇr´ıpadnˇe se o to pokusit. K tomu dojde jen tehdy, je-li zapisov´ano na konec repliky souboru5 . Rezervace m´ısta je pops´an´a v sekci 8.8.1. S pomoc´ı metadov´eho serveru zjist´ı aktu´alnˇe nastavenou pozici v replice souboru. Pokud odpov´ıd´a pozici po posledn´ı proveden´e operaci, m˚ uˇze pokraˇcovat v pr´aci s aktu´alnˇe otevˇrenou replikou souboru. Jestliˇze byla pozice klientem zmˇenˇena nebo zat´ım nebyla otevˇrena ˇza´dn´a replika souboru, pak mus´ı naj´ıt a otevˇr´ıt pˇr´ısluˇsnou repliku souboru. Tento mechanismus zajiˇst’uje minim´aln´ı reˇzii manipulace se soubory, jejichˇz obsah m˚ uˇze b´ yt zaˇsifrov´an (sekce 8.7), a zvyˇsuje tak odolnost serveru v˚ uˇci nadmˇern´emu zat´ıˇzen´ı, ke kter´emu by jinak mohlo doj´ıt v pˇr´ıpadˇe ˇcast´eho prov´adˇen´ı operac´ı ˇcten´ı ˇci z´apisu po mal´ ych bloc´ıch. V tuto chv´ıli zaˇc´ın´a pˇrenos obsahu otevˇren´e repliky souboru. Klient vˇzdy pos´ıl´a poˇzadavek, ve kter´em je uvedeno, kolik dat chce pˇreˇc´ıst ˇci zapsat. V pˇr´ıpadˇe operace pro ˇcten´ı, server jen ˇcte pˇr´ımo z otevˇren´e repliky souboru a pos´ıl´a jeho obsah. V pˇr´ıpadˇe z´apisu je pˇred samotn´ ym otevˇren´ım repliky souboru vytvoˇrena jej´ı doˇcasn´a kopie, do kter´e je n´aslednˇe zapisov´ano. Po u ´spˇeˇsn´em dokonˇcen´ı z´apisu je p˚ uvodn´ı replika souboru nahrazena jej´ı kopi´ı. Tento pˇr´ıstup zajiˇst’uje, ˇze v pˇr´ıpadˇe v´ yskytu jak´ekoliv chyby (napˇr. v´ ypadek serveru) je zajiˇstˇen konzistentn´ı stav p˚ uvodn´ı repliky souboru. Nen´ı-li pˇrenos dokonˇcen, server zopakuje pˇredchoz´ı krokem - zjist´ı posledn´ı nastavenou pozici v replice souboru a pˇriprav´ı se na dalˇs´ı pˇrenos. 8.2.4
Dokonˇ cen´ı pˇ renosu obsahu souboru
Ukonˇcen´ı pˇrenosu obsahu souboru je detekov´ano obdrˇzen´ım informace od metadatov´eho serveru, ˇze soubor byl zavˇren. Doˇslo-li bˇehem pˇrenosu ke zmˇenˇe repliky souboru, pak souborov´ y server zv´ yˇs´ı jej´ı verzi a odeˇsle zpr´avu synchronizaˇcn´ı vrstvˇe obsahuj´ıc´ı: • jednoznaˇcn´ y identifik´ator repliky, • seznam podsoubor˚ u tvoˇr´ıc´ıch obsah repliky, • verze repliky. Synchronizaˇcn´ı vrstva zajist´ı propagaci zpr´avy na vˇsech metadatov´ ych serverech, jeˇz zaregistruj´ı aktualizaci repliky a pˇr´ısluˇsn´ ych podsoubor˚ u upraven´ım odpov´ıdaj´ıc´ıch z´aznam˚ u v tabulk´ach replicas a parts. Z hlediska souborov´eho serveru je v tuto chv´ıli pˇrenos souboru dokonˇcen a zav´ır´a port. 8.2.5
Uzavˇ ren´ı souboru
Poˇzadavek na zavˇren´ı souboru zpracov´av´a opˇet metadatov´ y server. Po jeho pˇrijet´ı zjist´ı z tabulky file descriptors: 5
K rezervaci m´ısta dojde i v pˇr´ıpadˇe zapisov´an´ı do repliky pr´avˇe vytvoˇren´eho souboru.
40
• kter´ y soubor m´a b´ yt zavˇren, • v jak´em reˇzimu byl soubor otevˇren. V z´avislosti na z´ıskan´ ych informac´ıch odstran´ı pˇr´ısluˇsn´ y z´aznam z tabulky u souboru v tabulce entries. N´aslednˇe ozn´am´ı file descriptors a uprav´ı stav z´amk˚ souborov´emu serveru, ˇze soubor byl zavˇren a jeho pˇrenos m´a b´ yt ukonˇcen. Posledn´ım krokem je odesl´an´ı odpovˇedi klientovi, ˇze soubor byl zavˇren. V tuto chv´ıli je cel´ y pˇrenos souboru u ´spˇeˇsnˇe ukonˇcen. Pokud byla bˇehem pˇrenosu souboru zmˇenˇena jeho replika, ostatn´ı jeho repliky jsou v nekonzistentn´ım stavu. N´avrat zpˇet ke konzistentn´ımu stavu prostˇredn´ıctv´ım replikace je pops´an v sekci 8.10.
8.3
Rozdˇ elov´ an´ı souboru do podsoubor˚ u
Souborov´ y server bˇehem z´apisu do repliky souboru pr˚ ubˇeˇznˇe kontroluje jej´ı velikost. V pˇr´ıpadˇe, ˇze dos´ahne urˇcit´e velikosti bloku dat, kter´ y je definov´an v konfiguraˇcn´ım souboru jako hodnota parametru blocksize 6 , pak soubor uzavˇre a zaˇcne zapisovat do dalˇs´ıho souboru. Replika je ve v´ ysledku tvoˇrena z jednoho a v´ıce podsoubor˚ u. Podsoubory jsou organizovan´e dle navrˇzen´e struktury pro ukl´ad´an´ı dat[18]. Poˇcet soubor˚ u v jednom adres´aˇri je definov´an v konfiguraˇcn´ım souboru jako hodnota parametru files count 7 . Souborov´ y server odes´ıl´a po kaˇzd´em z´apisu seznam vˇsech vytvoˇren´ ych podsoubor˚ u tvoˇr´ıc´ıch obsah repliky souboru metadatov´emu serveru, kter´ y je eviduje v tabulce parts.
8.4
Seznam pˇ r´ıstupov´ ych pr´ av
Zabezpeˇcen´ı omezuj´ıc´ı pˇr´ıstup ke sd´ılen´ ym soubor˚ um bylo v r´amci metadatov´eho serveru implementov´ano pomoc´ı ovˇeˇrov´an´ı pˇr´ıstupu v z´avislosti na seznamu pˇr´ıstupov´ ych pr´av (ACL), kter´e vych´az´ı z POSIX standardu.[24] Tabulka ˇc. 5 obsahuje pˇrehled dostupn´ ych pˇr´ıstupov´ ych pr´av. Kaˇzd´ y soubor (adres´aˇr) z tabulky entries m´a pevnˇe definovan´a pr´ava pro: • vlastn´ıka, • vlastnickou skupinu, • ostatn´ı, • masku pr´av8 , 6
V´ ychoz´ı hodnota je 1GB a byla zvolena na z´akladˇe proveden´ ych mˇeˇren´ı v m´e bakal´aˇrsk´e pr´ aci.[18] 7 V´ ychoz´ı hodnota je 5000 soubor˚ u v jednom adres´aˇri a byla zvolena na z´akladˇe proveden´ ych mˇeˇren´ı v m´e bakal´ aˇrsk´e pr´ aci.[18] 8 Maska pr´ av omezuje existuj´ıc´ı pr´ava pro vlastnickou skupinu a ostatn´ı uˇzivatele (narozd´ıl od souborov´e masky).
41
vˇcetnˇe jejich v´ ychoz´ıch variant. Ke kaˇzd´emu souboru je nav´ıc moˇzn´e pˇriˇradit zvl´aˇst’ definovan´a pr´ava pro roli (nebo v´ ychoz´ı roli), kter´a m˚ uˇze b´ yt typu uˇzivatel ˇci skupina. V r´amci datab´aze jsou tyto dodateˇcnˇe nastaven´a pˇr´ıstupov´a pr´ava spravov´ana v tabulk´ach acl users a acl groups. Pr´ava u novˇe vytvoˇren´ ych soubor˚ u ˇci adres´aˇr˚ u jsou urˇcena dle v´ ychoz´ıch pr´av jejich nadˇrazen´eho adres´aˇre. Z pr´av novˇe vytvoˇren´eho souboru je automaticky odebr´ano pr´avo na spouˇstˇen´ı. V´ ychoz´ı pr´ava pro koˇrenov´ y adres´aˇr a vˇsechny v nˇem vytvoˇren´e adres´aˇre jsou 755 a maska 7. U novˇe vytvoˇren´ ych soubor˚ u jsou nastavan´a pr´ava 644 a maska 7. V´ ychoz´ı pr´ava u novˇe vytvoˇren´ ych adres´aˇr˚ u jsou zdˇedˇena od jejich nadˇrazen´eho adres´aˇre. V´ ychoz´ı pr´ava u novˇe vytvoˇren´ ych soubor˚ u se nedˇed´ı. Osmiˇ ckovˇ e 0 1 2 3 4 5 6 7
ˇ apis Cten´ ı Z´ ne ne ne ne ne ano ne ano ano ne ano ne ano ano ano ano
Spuˇ stˇ en´ı ne ano ne ano ne ano ne ano
Tabulka 5: Pˇr´ıstupov´a pr´ava k soubor˚ um
8.4.1
Vyhodnocen´ı omezen´ eho pˇ r´ıstupu k souboru
Metadatov´ y server vyhodnocuje, zda m´a uˇzivatel povolen´ y pˇr´ıstup k souboru v z´avislosti na pˇriˇrazen´ ych ACL z´aznamech dle algoritmu zn´azornˇen´eho pomoc´ı v´ yvojov´eho diagramu na obr´azku ˇc. 16.
42
Obr´azek 16: Vyhodnocen´ı povolen´ı pˇr´ıstupu k souboru s vyuˇzit´ım ACL.
43
8.4.2
Spr´ ava seznamu pˇ r´ıstupov´ ych pr´ av
Je-li uˇzivatel vlastn´ık souboru nebo je zaˇclenˇen do skupiny admistr´ator˚ u, m´a moˇznost pomoc´ı pˇr´ıkaz˚ u (poˇzadavk˚ u), kter´e jsou uvedeny v tabulce ˇc. 6, mˇenit atributy souboru, jeˇz se t´ ykaj´ı pˇr´ıstupov´ ych pr´av k nˇemu. Pˇ r´ıkaz KIVFS chown chgroup chmod
dchmod
setfacl
getfacl
Parametry K´ od Form´ at dat uˇzivatel 45 %s soubor %s skupin 46 %s soubor %s maska 47 %d pr´ava %d%d%d soubor %s maska 48 %d pr´ava %d%d%d soubor %s typ 49 %d role %d pr´ava %d soubor %s soubor 50 %s
Popis Nastav´ı vlastn´ıka. Nastav´ı vlastnickou skupinu. Nastav´ı pˇr´ıstupov´a pr´ava (vlastn´ıka, vlastnick´e skupiny, ostatn´ıch) a jejich masku. Nastav´ı v´ ychoz´ı pˇr´ıstupov´a pr´ava (vlastn´ıka, vlastnick´e skupiny, ostatn´ıch) a jejich masku. Nastav´ı pˇr´ıstupov´a pr´ava pro danou roli (vytvoˇr´ı ˇci uprav´ y jmenn´ y z´aznam). Z´ısk´a ACL pˇriˇrazen´e k souboru.
Tabulka 6: Pˇr´ıkazy (poˇzadavky) pro spr´avu pˇr´ıstupov´a pr´av soubor˚ u
8.5
´ Uprava vz´ ajemn´ eho vylouˇ cen´ı pˇ r´ıstupu k soubor˚ um
Kaˇzd´ y soubor lze zamknout pro ˇcten´ı nebo z´apis. Z´amky jsou implementovan´e jako ˇc´ıtaˇce, jejichˇz hodnota odpov´ıd´a jejich aktu´aln´ımu stavu. Kv˚ uli zajiˇstˇen´ı stavovosti serveru jsou hodnoty z´amku ukl´ad´any do tabulky entries a to konkr´etnˇe do hodnot sloupc˚ u read locks a write locks. Pˇri kaˇzd´em pˇr´ıstupu k obsahu souboru je ovˇeˇren stav jeho z´amk˚ u. Dle reˇzimu, ve kter´em je potˇreba soubor otevˇr´ıt, se dle n´asleduj´ıc´ıch pravidel vyhodnot´ı, zda je moˇzn´e soubor zamknout: Pro ˇ cten´ı. Soubor lze otevˇr´ıt pro ˇcten´ı, je-li hodnota ˇc´ıtaˇce z´amk˚ u pro z´apis nulov´a. Pokus o zamknut´ı souboru pro ˇcten´ı odpov´ıd´a n´asleduj´ıc´ımu zjednoduˇsen´emu pseudok´odu: kivfs_entry_t entry; ... /* inicializace promˇ enn´ e entry pomoc´ ı * hodnot z´ ıskan´ ych z datab´ aze */
44
if (entry.write_locks) { /* soubor je zamˇ cen pro z´ apis, * nen´ ı moˇ zn´ e jej zamknout pro ˇ cten´ ı */ } else { entry.write_locks++; /* soubor je moˇ zn´ e * zamknout pro z´ apis */ ... /* uloˇ zen´ ı hodnot z entry do datab´ aze */ }
Pro z´ apis. Soubor lze otevˇr´ıt pro z´apis, je-li hodnota ˇc´ıtaˇce z´amk˚ u pro ˇcten´ı i z´apis nulov´a. Pokus o zamknut´ı souboru pro z´apis odpov´ıd´a n´asleduj´ıc´ımu zjednoduˇsen´emu pseudok´odu: kivfs_entry_t entry; ... /* inicializace promˇ enn´ e entry pomoc´ ı * hodnot z´ ıskan´ ych z datab´ aze */ if ((entry.read_locks + entry.write_locks)) { ... /* soubor je zamˇ cen pro ˇ cten´ ı nebo z´ apis, * nen´ ı moˇ zn´ e jej zamknout pro z´ apis */ } else { entry.write_locks++; /* soubor je moˇ zn´ e * zamknout pro z´ apis */ ... /* uloˇ zen´ ı hodnot z entry do datab´ aze */ }
8.6
Podpora klientsk´ e lok´ aln´ı cache
Klientsk´e aplikace na z´akladˇe ˇcetnosti pˇr´ıstupu k soubor˚ um vyhodnocuj´ı statistiky pouˇz´ıv´an´ı souboru. Z´ıskan´e hodnoty pak pouˇz´ıvaj´ı k rozhodnut´ı, zda soubor maj´ı vyˇradit z lok´aln´ı cache. Metadatov´ y server ˇcetnost pˇr´ıstup˚ u zajiˇst’uje pomoc´ı spr´avy tˇr´ı ˇc´ıtaˇc˚ u: ˇ ıtaˇ C´ c pˇ r´ıstup˚ u pro z´ apis. Jeho hodnota se zvyˇsuje pˇri: • vytvoˇren´ı souboru nebo adres´aˇre, • otevˇren´ı souboru v nˇekter´em z reˇzim˚ u pro z´apis, • zmˇenˇe atribut˚ u souboru nebo adres´aˇre. ˇ ıtaˇ C´ c pˇ r´ıstup˚ u pro ˇ cten´ı. Jeho hodnota se zvyˇsuje pˇri: • otevˇren´ı souboru v reˇzimu pro ˇcten´ı, • vylistov´an´ı obsahu adres´aˇre, • pˇreˇcten´ı atribut˚ u souboru nebo adres´aˇre. ˇ ıtaˇ C´ c glob´ aln´ıch pˇ r´ıstup˚ u. Jeho hodnota je rovna souˇctu hodnot ˇc´ıtaˇc˚ u pro ˇcten´ı a pro z´apis vˇsech soubor˚ u.
45
Hodnoty ˇc´ıtaˇc˚ u pˇr´ıstup˚ u pro ˇcten´ı a z´apis jsou ukl´ad´any do tabulky entries, ve kter´e se konkr´etnˇe se jedn´a o sloupce read hits a write hits. Jejich hodnoty jsou po v´ ybˇeru z datab´aze dostupn´e srkze poloˇzky read hits a write hits v datov´e sturktuˇre kivfs file t (pˇr´ıloha C). Klient proto hodnoty obdrˇz´ı pˇri kaˇzd´em poˇzadavku na: • v´ ypis obsahu adres´aˇre (poˇzadavek KIVFS READDIR), kdy server pos´ıl´a informace o souborech v podobˇe spojov´eho seznamu, jehoˇz poloˇzky jsou pr´avˇe typu kivfs file t, • poskytnut´ı informac´ı o souboru (poˇzadavek KIVFS FILE INFO). Hodnotu glob´aln´ıho ˇc´ıtaˇce pˇr´ıstup˚ u k soubor˚ um metadatov´ y server klientovi poskytuje na vyˇza´d´an´ı (v odpovˇedi na poˇzadavek KIVFS GLOBAL HITS).
8.7
Transparentn´ı pˇ r´ıstup k ˇ sifrovan´ ym dat˚ um
Souborov´ y server zabezpeˇcuje a kontroluje uloˇzen´a data pomoc´ı funkc´ı pro: • symetrick´e ˇsifrov´an´ı, • spoˇc´ıt´an´ı kontroln´ıch souˇct˚ u, dostupn´ ych z knihovny Libgcrypt, kter´a je poskytov´ana pod licenc´ı GNU/GPL.[16] 8.7.1
Pouˇ zit´ e algoritmy
K symetrick´emu blokov´emu ˇsifrov´an´ı obsahu souboru souborov´ y server pouˇz´ıv´a algoritmus Advanced Encryption Standard s d´elkou kl´ıˇce 256 bit˚ u (AES-256). Kl´ıˇc je uveden v konfiguraˇcn´ım souboru (hodnota parametru encryption key) kaˇzd´eho serveru. Pro vytv´aˇren´ı kontroln´ıch souˇct˚ u obsahu souboru vyuˇz´ıv´a souborov´ y server algoritmus Secure Hash Algorithm s d´elkou v´ ysledn´eho ˇretˇezce 512 bit˚ u (SHA-512). D˚ uvodem pouˇzit´ı tak sloˇzit´eho algoritmu pro kontroln´ı souˇcty je snaha o eliminaci pˇr´ıpadn´ ych koliz´ı, ke kter´ ym dojde pˇri shodn´em kontroln´ım souˇctu dvou r˚ uzn´ ych soubor˚ u. Ta je v tomto pˇr´ıpadˇe naprosto minim´aln´ı. V pˇr´ıpadˇe nutnosti lze pouˇzit´e algoritmy jednoduˇse zamˇenit za jin´e, kter´e jsou knihovnou Libgcrypt podporov´any.[17] 8.7.2
Transparentn´ı pˇ r´ıstup k ˇ sifrovan´ ym soubor˚ um
Pro zajiˇstˇen´ı transparentn´ıho pˇr´ıstupu k ˇsifrovan´ ym soubor˚ um bylo vytvoˇreno rozhran´ı, kter´e poskytuje potˇrebn´e funkce. Ty jsou uvedeny v pˇr´ıloze B. Pomoc´ı tohoto rozhran´ı souborov´ y server m˚ uˇze: Otevˇ r´ıt ˇ sifrovan´ y soubor ˇ cten´ı a z´ apis. Vytv´aˇr´ı se doˇcasn´ y soubor, kter´ y obsahuje nezaˇsifrovan´ y obsah p˚ uvodn´ıho souboru. D´ıky tomu lze v doˇcasn´em souboru napˇr. libovolnˇe nastavovat aktu´aln´ı pozici v souboru a pˇrepisovat data na n´ı, aniˇz by bylo nutn´e se nˇejak starat o ˇsifrov´an´ı.
46
Otevˇ r´ıt ˇ sifrovan´ y soubor z´ apis. Ze stejn´eho d˚ uvodu jako v pˇredchoz´ım bodˇe se vytv´aˇr´ı doˇcasn´ y soubor o nulov´e velikosti. Nen´ı tˇreba kop´ırovat obsah p˚ uvodn´ıho souboru, nebot’ pˇri otevˇren´ı souboru v reˇzimu jen pro z´apis je jeho p˚ uvodn´ı obsah vynulov´an. ˇ Otevˇ r´ıt ˇ sifrovan´ y soubor ˇ cten´ı. Sifrovan´ y soubor se otev´ır´a pˇr´ımo. Zapisovat do ˇ sifrovan´ eho souboru. Z´apis je prov´adˇen do nezaˇsifrovan´eho doˇcasn´eho souboru. ˇ ı je prov´adˇeno pˇr´ımo ze zaˇsifrovan´eho souˇ ıst ze ˇ C´ siforvan´ eho souboru. Cten´ boru. Zavˇ r´ıt ˇ sifrovan´ y soubor. Je-li soubor otevˇren reˇzimu pro z´apis, pak existuje doˇcasn´ y soubor, do kter´eho mohlo b´ yt zapisov´ano. Jestliˇze se jeho obsah liˇs´ı od obsahu p˚ uvodn´ıho souboru, pak jej mus´ı nahradit. Nahrazen´ı p˚ uvodn´ıho souboru prob´ıh´a kop´ırov´an´ım doˇcasn´eho souboru na jeho m´ısto. Bˇehem kop´ırov´an´ı se zapisovan´a data pˇreˇcten´a z doˇcasn´eho souboru pr˚ ubˇeˇznˇe ˇsifruj´ı. Z´aroveˇ n se poˇc´ıt´a kontroln´ı souˇcet souboru. Po dokonˇcen´ı nahrazov´an´ı je doˇcasn´ y soubor smaz´an. Jestliˇze je soubor otevˇren v reˇzimu pro ˇcten´ı, pak jej staˇc´ı zavˇr´ıt bˇeˇzn´ ym zp˚ usobem, nebot’ se jeho obsah nezmˇenil a nen´ı tedy potˇreba pˇrepoˇc´ıt´avat kontroln´ı souˇcet jeho obsahu. Souborov´ y server kv˚ uli doˇcasn´ ym soubor˚ um, se kter´ ymi transparentnˇe pracuje, nikdy nezapisuje bˇehem pˇrenosu souboru pˇr´ımo do c´ılov´ ych podsoubor˚ u repliky soubor˚ u (replik). Znaˇcnˇe se tak sniˇzuje pravdˇepodobnost, ˇze j´ım spravovan´a data budou poˇskozena vlivem v´ yskytu chyby bˇehem pˇrenosu souboru.
8.8
Kv´ oty virtu´ aln´ıch svazk˚ u
V tabulce volumes obsahuj´ıc´ı informace o virtu´aln´ıch svazc´ıch je ve sloupci capacity nastavov´ana hodnota ud´avaj´ıc´ı jejich kapacitu. Jej´ı hodnotu urˇcuje spr´avce KIVFS, kter´ y mus´ı br´at na vˇedom´ı fakt, ˇze je d´ana nejmenˇs´ı kapacitou jednoho z k nˇemu pˇripojen´ ych svazk˚ u souborov´ ych server˚ u. Pomoc´ı kapacity virtu´aln´ıch svazk˚ u lze omezit kv´oty jednotliv´ ych adres´aˇr˚ u z tabulky entries, se kter´ ymi uˇzivatel´e pracuj´ı a ukl´adaj´ı do nich soubory. U novˇe vytvoˇren´eho adres´aˇre plat´ı stejn´a kv´ota, kter´a je nastaven´a u rodiˇcovsk´eho adres´aˇre. Spr´avce syst´emu m˚ uˇze v datab´azi definovat, ˇze napˇr. koˇrenov´ y adres´aˇr m´a kapacitu 10GB a domovsk´e adres´aˇre uˇzivatel˚ u maj´ı kapacitu 30GB. Pˇr´ıklad je uveden v tabulk´ach ˇc. 7 a 9. Virtu´ aln´ı svazek Svazek A Svazek B
Kapacita 10GB 30GB
Tabulka 7: Kapacita virtu´aln´ıch svazk˚ u
47
Adres´ aˇ r / /home
Pˇ ripojen´ y virtu´ aln´ı svazek svazek a svazek B
V´ ysledn´ a kv´ ota 10GB 30GB
Tabulka 8: Kv´oty adres´aˇr˚ u
Aktu´alnˇe dostupn´a kapacita virtu´aln´ıho svazku, resp. k nˇemu pˇripojen´ ych svazk˚ u souborov´ ych server˚ u, je d´ana rozd´ılem jeho kapacity a celkov´ ym souˇctem vˇsech soubor˚ u, kter´e jsou na nˇem uloˇzen´e. Kv˚ uli potˇrebˇe rychl´eho pˇr´ıstupu k tˇemto inforych mac´ım byl vytvoˇren pohled storage states popisuj´ıc´ı aktu´aln´ı stavy jednotliv´ svazk˚ u. Kv˚ uli relaˇcn´ı s´emantice sd´ılen´ı soubor˚ u je nutn´e ˇreˇsit probl´em zajiˇstˇen´ı respektov´an´ı kv´ot i v pˇr´ıpadˇe, kdy doch´az´ı k z´apisu do dvou soubor˚ u najednou. Protoˇze zmˇeny jsou viditeln´e aˇz po uzavˇren´ı souboru, je nutn´e zajistit dodrˇzen´ı kv´ot. To je zajiˇstˇeno prostˇredn´ıctv´ım rezervace m´ısta na virtu´aln´ım svazku a jeho uvaˇzov´an´ım pˇri poˇc´ıt´an´ı aktu´alnˇe dostupn´e kapacity. 8.8.1
Rezervace m´ısta
Rezervovan´e m´ısto je dalˇs´ı vlastnost virtu´aln´ıch svazk˚ u uveden´ ych v tabulce volumes. Odpov´ıd´a hodnotˇe ve sloupci reserved a ud´av´a, kolik bajt˚ u bylo zaps´ano bˇehem pˇrenosu souboru na server, ale zat´ım nebylo uloˇzeno. Pˇred zpracov´an´ım kaˇzd´eho poˇzadavku od klienta na z´apis do repliky souboru souborov´ y server poˇc´ıt´a, kolik bajt˚ u je nutno rezervovat. Je-li tato hodnota nenulov´a, odeˇsle poˇzadavek k rezervaci m´ısta synchronizaˇcn´ı vrstvˇe, kter´a zajist´ı jeho propagaci na vˇsech metadatov´ ych serverech. V pˇr´ıpadˇe, ˇze je poˇzadavek u ´spˇeˇsnˇe vyˇr´ızen, zapoˇc´ıt´a rezervovan´e m´ısto do celkov´eho poˇctu rezervovan´ ych bajt˚ u. Pokud je poˇzadavek vyˇr´ızen ne´ uspˇeˇsnˇe, pak doˇslo k zaplnˇen´ı voln´eho m´ısta a informuje o tom klienta. Souborov´ y server po dokonˇcen´ı z´apisu do souboru a jeho zavˇren´ı odeˇsle celkov´ y poˇcet rezerevovan´ ych bajt˚ u v r´amci poˇzadavku na zruˇsen´ı jejich rezervace (soubor jiˇz je nahr´an) synchronizaˇcn´ı vrstvˇe. Ta opˇet zajist´ı propagaci poˇzadavku na vˇsech metadatov´ ych serverech a rezervace m´ısta je zruˇsena. 8.8.2
Spr´ ava kv´ ot
Je-li uˇzivatel zaˇclenˇen do skupiny admistr´ator˚ u, pak m´a moˇznost pomoc´ı pˇr´ıkaz˚ u (poˇzadavk˚ u), kter´e jsou uvedeny v tabulce ˇc. 9, nastavovat kv´oty jednotliv´ ych virtu´aln´ıch svazk˚ u.
8.9
Tunelov´ an´ı pˇ renosu souboru
Je-li klient pˇripojen k souborov´emu serveru a poˇzaduje po nˇem pˇrenos repliky souboru, kterou nespravuje, pak souborov´ y server mus´ı zprostˇredkovat transparetn´ı spojen´ı s jin´ ym souborov´ ym serverem, kter´ y ji spravuje. Aby mohl vytvoˇrit spojen´ı, v r´amci kter´eho bude zajiˇstˇena nejlepˇs´ı pˇrenosov´a rychlost, potˇrebuje zn´at informace
48
Pˇ r´ıkaz KIVFS df
Parametry
K´ od Form´ at dat 544
quota
n´azev virt.svazku kv´ota
545
%s %llu
Popis Z´ısk´a informace o kv´ot´ach virtu´aln´ıch svazk˚ u. Nastav´ı kv´otu pro virtu´aln´ı svazek s dan´ ym n´azvem.
Tabulka 9: Pˇr´ıkazy (poˇzadavky) pro spr´avu kv´ot virtu´aln´ıch svazk˚ u
o aktu´alnˇe nejvhodnˇejˇs´ım souborov´em serveru, ke kter´emu se m´a pˇripojit. Ty mu dod´av´a synchronizaˇcn´ı vrstva. Kv˚ uli moˇznosti v´ yskytu latenc´ı u jednotliv´ ych linek mezi servery, m˚ uˇze b´ yt m´ısto pˇr´ım´eho spojen´ı s c´ılov´ ym souborov´ ym serverem vhodnˇejˇs´ı nav´azat s n´ım spojen´ı pˇres dalˇs´ı souborov´ y server. Proto informace o aktu´alnˇe nejvhodnˇejˇs´ım souborov´em serveru obsahuje i seznam souborov´ ych server˚ u, pˇres kter´e je nutn´e spojen´ı realizovat. Toto spojen´ı je d´ale oznaˇcovan´e jako tunel. 8.9.1
Vytvoˇ ren´ı tunelu
Synchronizaˇcn´ı vrstva pr˚ ubˇeˇznˇe pos´ıl´a souborov´ ym server˚ um informace v podobˇe smˇerovac´ı tabulky obsahuj´ıc´ı informace o aktu´alnˇe nejlepˇs´ıch cest´ach pro realizaci spojen´ı mezi jednotliv´ ymi servery (poˇzadavek KIVFS ROUTE PUSH). U kaˇzd´e cesty je uvedeno i jej´ı ocenˇen´ı. Smˇerovac´ı tabulka je realizov´ana spojov´ ym seznamem, jej´ıˇz poloˇzky jsou n´ıˇze uveden´e datov´e struktury, a kaˇzd´ y souborov´ y server si j´ı po pˇrijet´ı uchov´av´a v pamˇeti (obr´azek ˇc. 17). typedef struct { uint64 id; int ip; char *ip_text; } kivfs_route_node_t;
// // // //
ID uzlu (serveru) IP adresa uzlu IP adresa uzlu v~textov´ e formˇ e uzel
typedef struct { kivfs_route_node_t *dst_node; int32 cost; kivfs_list_t *nodes; } kivfs_route_t;
// // // //
c´ ılov´ y uzel ocenˇ en´ ı cesty seznam uzl˚ u v cestˇ e cesta (poloˇ zka v routovac´ ı tabulce)
Klient vyhodnocuje dostupnost vˇsech zn´am´ ych server˚ u a vˇzdy navazuje spojen´ı k ze sv´eho pohledu nejdostupnˇejˇs´ımu serveru. Pˇrijde-li souborov´emu serveru, ke kter´emu je klient pr´avˇe pˇripojen, poˇzadavek na pˇrenos repliky souboru, kterou nespravuje, vybere na z´akladˇe porovn´an´ı ocenˇen´ı jednotliv´ ych cest ze sv´e smˇerovac´ı tabulky nejvhodnˇejˇs´ı souborov´ y server, jeˇz ji spravuje a tak´e cestu, pˇres kter´e uzly (souborov´e servery) je moˇzn´e se k nˇemu pˇripojit. Pot´e nav´aˇze spojen´ı s prvn´ım uzlem z cesty, kter´emu odeˇsle poˇzadavek na vytvoˇren´ı tunelu (KIVFS CREATE TUNNEL) obsahuj´ıc´ı seznam uzl˚ u. Ten z tohoto seznamu odebere s´am sebe a pokud nen´ı posledn´ım c´ılov´ ym uzlem, pak jej pˇrepoˇsle d´al. Postupnˇe tak dojde k realizaci tunelu.
49
Obr´azek 17: Smˇerovac´ı tabulka v pamˇeti souborov´eho serveru.
Pokud dojde k situaci, kdy souborov´ y server nenajde ˇz´adnou vhodnou cestu, pokus´ı se realizovat pˇr´ım´e spojen´ı s jedn´ım ze server˚ u, kter´ y repliku spravuje. Souborov´ y server, ke kter´emu je klient pˇripojen, pˇrepos´ıl´a poˇzadavky na pˇrenos repliky souboru c´ılov´emu souborov´emu serveru pˇres vytvoˇren´ y tunel, skrze kter´ y n´aslednˇe prob´ıh´a i pˇrenos obsahu souboru. Klient m´a d´ıky tomu zaruˇcenou dostupnost repliky souboru z kaˇzd´eho serveru a z´aroveˇ n nejvyˇsˇs´ı moˇznou rychlost pro pˇrenos jeho obsahu.
8.10
Replikace
Klient zapisuje bˇehem pˇrenosu souboru vˇzdy do jeho repliky s aktu´aln´ı (nejvyˇsˇs´ı) verz´ı. Souborov´ y server spravuj´ıc´ı tuto repliku souboru po dokonˇcen´ı pˇrenosu zv´ yˇs´ı jej´ı verzi a skrze synchronizaˇcn´ı vrstvu odeˇsle poˇzavek na zmˇenu stavu repliky ym server˚ um. Repliky (poˇzadavek KIVFS UPDATE REPLICA) vˇsem metadatov´ s niˇzˇs´ı verz´ı jsou v tuto chv´ıli v nekonzistentn´ım stavu (zastaral´e). Po u ´spˇeˇsn´e zmˇenˇe stavu repliky ozn´am´ı souborov´ y server ostatn´ım souborov´ ym server˚ um, ˇze mohou zah´ajit replikaci (poˇzadavek KIVFS RUN REPLICATION). Ostatn´ı souborov´e servery n´aslednˇe synchronizuj´ı vˇsechny jimi spravovan´e zastaral´e repliky souboru s jeho aktu´aln´ı replikou. Postupnˇe tak dojde znovunavr´acen´ı vˇsech replik souboru do konzistentn´ıho stavu. Replikaci na kaˇzd´em souborov´em serveru zajiˇst’uje na pozad´ı bˇeˇz´ıc´ı vl´akno, kter´e slouˇz´ı jako replikaˇcn´ı manaˇzer. Proces replikace pops´an v n´asleduj´ıc´ıch podsekc´ıch popisuj´ıc´ıch jednotliv´e kroky, kter´e replikaˇcn´ı manaˇzer vykon´av´a. 8.10.1
Zjiˇ stˇ en´ı zastaral´ ych replik
Replikaˇcn´ı manaˇzer se po pˇrijet´ı informace, ˇze m˚ uˇze zah´ajit replikaci (poˇzadavek KIVFS RUN REPLICATION), dot´aˇze metadatov´eho serveru, kter´e zastaral´e
50
repliky soubor˚ u spravuje. N´aslednˇe zah´aj´ı jejich postupnou aktualizaci a obnovu jejich konzistentn´ıho stavu. Aby byla zajiˇstˇena replikace i po pˇredch´azej´ıc´ım ne´ uspˇeˇsn´em pokusu o replikaci zp˚ usoben´em napˇr. neˇcekan´ ym v´ ypadkem souborov´eho serveru, replikaˇcn´ı manaˇzer se pr˚ ubˇeˇznˇe v dan´ ych ˇcasov´ ych intervalech, kter´e jsou definov´any v konfiguraˇcn´ım ychoz´ı hodnota je 5 souboru serveru jako hodnota parametru replication interval (v´ minut), dotazuje metadatov´eho serveru, zda nespravuje repliky souboru se zastaralou verz´ı. Pokud ne, pak jsou vˇsechny repliky, kter´e spravuje, v konzistetn´ım stavu a m˚ uˇze ˇcekat, neˇz dostane dalˇs´ı ozn´amen´ı o tom, ˇze m˚ uˇze zah´ajit replikaci (poˇzadavek y interval pro replikaci. KIVFS RUN REPLICATION), nebo neˇz vyprˇs´ı dalˇs´ı ˇcasov´ V opaˇcn´em pˇr´ıpadˇe mus´ı zah´ajit jejich jiˇz zm´ınˇenou postupnou aktualizaci a obnovu konzistentn´ıho stavu. 8.10.2
Zjiˇ stˇ en´ı aktu´ aln´ıch replik
Po vyhodnocen´ı, ˇze spravuje zastaralou repliku souboru, kter´a je v nekonzistentn´ım stavu, mus´ı zjistit, z jak´ ych zdroj˚ u lze st´ahnout jej´ı aktu´aln´ı verzi. Dotazuje se proto metadatov´eho serveru na seznam aktu´aln´ıch replik souboru vˇcetnˇe informac´ı, kter´e souborov´e servery je spravuj´ı. N´aslednˇe vybere prvn´ı souborov´ y server, kter´ y aktu´aln´ı repliku souboru spravuje a poˇza´d´a skrze synchronizaˇcn´ı vrstvu o zamˇcen´ı souboru pro ˇcten´ı. Pot´e opˇet od metadatov´eho serveru zjist´ı informace o podsouborech sv´e zastaral´e repliky souboru a tak´e o podsouborech aktu´aln´ı repliky souboru spravovan´e jin´ ym serverem. D´ıky tomu, ˇze informace o podsouboru repliky obsahuje i kontroln´ı souˇcet jeho obsahu, m˚ uˇze zastaral´e a aktu´aln´ı podsoubory dle nich mezi sebou porovnat. T´ım z´ısk´a seznam podsoubor˚ u, kter´e byly v aktu´aln´ı replice souborou zmˇenˇeny a je potˇreba je v zastaral´e replice souboru aktualizovat. Replikaˇcn´ı manaˇzer tak efektivnˇe ˇsetˇr´ı datov´e pˇrenosy. 8.10.3
Aktualizace zastaral´ e repliky souboru
Replikaˇcn´ı manaˇzer spravuj´ıc´ı zastaralou repliku souboru nav´aˇze spojen´ı s vybran´ ym souborov´ ym serverem, kter´ y spravuje aktu´aln´ı repliku souboru, a poˇsle mu poˇzadavek (KIVFS PROVIDE REPLICA) na poskytnut´ı obsahu seznamu poˇzadovan´ ych podsoubor˚ u. Po jejich st´ahnut´ı a uloˇzen´ı maj´ı podsoubory zastaral´e repliky souboru stejn´ y obsah jako podsoubory aktu´aln´ı repliky souboru. Nastaven´ım aktu´aln´ı verze zastaral´e replice souboru se z n´ı st´av´a dalˇs´ı aktu´aln´ı replika souboru. 8.10.4
Dokonˇ cen´ı aktualizace zastaral´ e repliky souboru
Podobnˇe jako po dokonˇcen´em pˇrenosu souboru z klienta na souborov´ y server, replikaˇcn´ı manaˇzer odeˇsle skrze synchronizaˇcn´ı vrstvu informace o jeho aktualizaci a poˇzadavek na odemˇcen´ı souboru pro ˇcten´ı. V tuto chv´ıli replikaˇcn´ı manaˇzer u ´spˇeˇsnˇe dokonˇcil replikaci dan´eho souboru. Pokud spravuje dalˇs´ı zastaral´e repliky, cel´ y proces zopakuje. V opaˇcn´em pˇr´ıpadˇe ˇcek´a na dalˇs´ı vyprˇsen´ı ˇcasov´eho intervalu k replikaci.
51
8.11
Deduplikace
Experiment´alnˇe implementovanou funkc´ı je deduplikace uloˇzen´ ych podsoubor˚ u. Ta je na kaˇzd´em souborov´em serveru realizov´ana v r´amci deduplikaˇcn´ıho vl´akna, kter´e pr˚ ubˇeˇznˇe ovˇeˇruje, zda nemaj´ı stejn´ y obsah nˇejak´e podsoubory uloˇzen´e na stejn´em svazku souborov´eho serveru. Deduplikovan´ y podsoubor je podsoubor, ke kter´emu odpov´ıd´a z´aznam v tabulce sources. Deduplikaˇcn´ı vl´akno se pokouˇs´ı o deduplikaci podsoubor˚ u na jednotliv´ ych svazc´ıch souborov´eho serveru v dan´ ych ˇcasov´ ych intervalech, kter´e jsou definov´any v konfiguraˇcn´ım souboru serveru jako hodnota parametru deduplication interval a jehoˇz v´ ychoz´ı hodnota je 90 minut. D˚ uvodem pro pouˇzit´ı velk´eho intervalu je ˇcasov´a a procesorov´a n´aroˇcnost deduplikace podsoubor˚ u, kter´a nen´ı vyˇzadov´ana jako nutn´a funkˇcnost syst´emu a v souˇcasn´e verzi KIVFS jde o experiment´aln´ı funkci9 . Pr˚ ubˇeh deduplikace podsoubor˚ u je pops´an v n´asleduj´ıc´ıch podsekc´ıch. 8.11.1
Zjiˇ stˇ en´ı zdrojov´ ych kandid´ at˚ u
V relaˇcn´ı datab´azi spravovan´e metadatov´ ym serverem je uloˇzen´ y pohled source candidates, s jehoˇz pomoc´ı jsou z´ısk´av´any informace o kandid´atech pouˇziteln´ ych jako zdrojov´e podsoubory. Ty jsou vyb´ır´ani z podsoubor˚ u z tabulky parts um´ıstˇen´ ych na stejn´ ych svazc´ıch souborov´eho serveru (tabulka storages) a maj´ı n´asleduj´ıc´ı specifick´e vlastnosti: • shodn´ y kontroln´ı souˇcet obsahu s jin´ ym podsouborem, kter´ y ale nesm´ı b´ yt shodn´ y s kontroln´ım souˇctem jiˇz existuj´ıc´ıho zdrojov´eho podsouboru (pokud by se kontroln´ı souˇcty shodovaly, jednalo by se o dalˇs´ı nalezen´ y duplicitn´ı podsoubor), • mus´ı m´ıt nenulovou velikost. Deduplikaˇcn´ı vl´akno se v prvn´ım kroku dotazuje metadatov´eho serveru, zda nezjistil nˇejak´e podsoubory, kteˇr´e mohou slouˇzit jako deduplikaˇcn´ı kandid´aty. Pokud ano, obdrˇz´ı jejich seznam a pro kaˇzd´ y z nich provede n´asleduj´ıc´ı operace: 1. poˇza´d´a metadatov´ y server o zamˇcen´ı odpov´ıdaj´ıc´ıho souboru pro ˇcten´ı, 2. v adres´aˇri, ve kter´em se podsoubor (deduplikaˇcn´ı kandid´at) nach´az´ı, vytvoˇr´ı adres´aˇr sources, 3. v adres´aˇri sources vytvoˇr´ı kopii podsouboru s n´azvem, kter´ y odpov´ıd´a jeho kontroln´ımu souˇctu vyhodnocen´emu pomoc´ı SHA-512, 4. odeˇsle informace o vytvoˇren´em zdrojov´em podsouboru metadatov´emu serveru, kter´ y vytvoˇr´ı nov´ y z´aznam v tabulce source parts, 5. poˇza´d´a metadatov´ y server o odemˇcen´ı odpov´ıdaj´ıc´ıho souboru pro ˇcten´ı. 9 Ide´ aln´ı napl´ anov´ an´ı spuˇstˇen´ı deduplikace podsoubor˚ u by se mohlo odv´ıjet napˇr. od aktu´aln´ıho zat´ıˇzen´ı syst´emu.
52
8.11.2
Deduplikace podsoubor˚ u
Dalˇs´ım pohledem v relaˇcn´ı datab´azi spravovan´e metadatov´ ym serverem je dupliu z tabulky cated parts. pomoc´ı kter´eho lze z´ıskat seznam duplicitn´ıch podsoubor˚ parts. Duplicitn´ı podsoubory jsou identifikov´any dle shody jejich kontroln´ıho souˇctu s kontroln´ım souˇctem zdrojov´eho podsouboru z tabulky sources. V druh´em kroce se deduplikaˇcn´ı vl´akno dotazuje metadatov´eho serveru, zda existuj´ı duplicitn´ı podsoubory. Pokud ano, obdrˇz´ı jejich seznam a pro kaˇzd´ y z nich provede: 1. poˇza´d´a metadatov´ y server o uzamˇcen´ı odpov´ıdaj´ıc´ıho souboru pro z´apis, 2. zjist´ı zdrojov´ y podsoubor se stejn´ ym kontroln´ım souˇctem, 3. deduplikuje obsah podsouboru (vynuluje jej), 4. odeˇsle informace o novˇe deduplikovan´em souboru obsahuj´ıc´ı informace o zdrojov´em souboru, 5. poˇza´d´a metadatov´ y server o odemˇcen´ı odpov´ıdaj´ıc´ıho souboru pro z´apis. 8.11.3
Odstranˇ en´ı nepouˇ zit´ ych zdrojov´ ych soubor˚ u
V posledn´ım kroku se deduplikaˇcn´ı vl´akno dotazuje metadatov´eho serveru, zda neexistuje nˇejak´ y nepouˇzit´ y zdrojov´ y soubor, kter´ y je moˇzn´e smazat. Metadatov´ y server proveden´ım dotazu do datab´aze zjist´ı vˇsechny zdrojov´e podsoubory, na kter´e se neodkazuj´ı ˇz´adn´e deduplikovan´e podsoubory a odeˇsle jejich seznam zpˇet deduplikaˇcn´ımu vl´aknu. To pak postupnˇe smaˇze vˇsehnny zbyteˇcn´e zdrojov´e podsoubory a informuje o tom metadatov´ y server, kter´ y je tak´e smaˇze a uvoln´ı tak m´ısto pro dalˇs´ı soubory uˇzivatel˚ u. 8.11.4
Otevˇ ren´ı deduplikovan´ eho podsouboru
Souborov´ y server pˇred otevˇren´ım podsouboru pozn´a dle pˇr´ıznaku10 , zda se jedn´a o deduplikovan´ y podsoubor ˇci nikoliv. Pokud se jedn´a o deduplikovan´ y podsoubor, pak mus´ı s pomoc´ı metadatov´eho serveru zjistit, kter´emu zdrojov´emu podsouboru odpov´ıd´a a v pˇr´ıpadˇe, ˇze jej chce otevˇr´ıt: • pro ˇcten´ı, mus´ı nahrad´ı cestu k deduplikovan´emu souboru cestou ke zdrojov´emu souboru, • pro z´apis, mus´ı zkop´ırovat obsah zdrojov´eho souboru do deduplikovan´eho souboru (tzn. duplikovat jeho obsah). Teprv´e pot´e m˚ uˇze deduplikovan´ y podsoubor otevˇr´ıt a pracovat s n´ım jako s bˇeˇzn´ ym podsouborem. 10
Nenulov´e ˇc´ıslo odpov´ıdaj´ıc´ı jednoznaˇcn´emu identifik´atoru zdrojov´eho souboru.
53
8.12
Implementace logov´ an´ı poˇ zadavk˚ u
Metadatov´ y server podporuje logov´an´ı poˇzadavk˚ u na poˇz´ad´an´ı a jejich obsah ukl´ad´a do tabulky message logs. Prostˇrednictv´ım poskytov´an´ı n´asleduj´ıc´ıch operac´ı: • zalogov´an´ı zpr´avy s pˇr´ısluˇsnou ˇcasovou zn´amkou (logick´ y ˇcas), • zjiˇstˇen´ı zalogovan´ ych zpr´av, jejichˇz ˇcasov´a zn´amka patˇr´ı do dan´eho ˇcasov´eho intervalu, • smaz´an´ı zalogovan´ ych zpr´av, jejichˇz ˇcasov´a zn´amka patˇr´ı do dan´eho ˇcasov´eho intervalu, zprostˇredkov´av´a spr´avu vˇsech zalogovan´ ych poˇzadavk˚ u. Implementace funkce logov´an´ı poˇzadavk˚ u je stˇeˇzejn´ı funkce pro synchronizaˇcn´ı vrstvu, kter´a potˇrebuje na vˇsech serverech shodnˇe logovat poˇzadavky na zmˇenu uloˇzen´ ych dat kv˚ uli pˇr´ıpadn´e obnovˇe po v´ ypadku serveru.[20]
54
9
Implementace vlastn´ıho klienta
Bˇehem v´ yvoje vznikla potˇreba okamˇzitˇe testovat ˇcerstvˇe implementovan´e sluˇzby poskytovan´e datov´ ym u ´loˇziˇstˇem. Z toho d˚ uvodu byl implementov´an konzolov´ y klient. Klient je naprogramov´an v jazyce C a plnˇe vyuˇz´ıv´a funkce dostupn´e z knihovny libkivfscore (sekce 7). D´ıky tomu z´aroveˇ n slouˇz´ı i jako referenˇcn´ı klient, ze kter´eho vych´azej´ı vˇsechny ostan´ı implementace klientsk´ ych aplikac´ı. Pro uˇzivatele klient poskytuje rozhran´ı podobn´e unixov´emu shellu (obr´azek ˇc. 18). V pˇr´ıloze E jsou pops´any vˇsechny funkce datov´eho u ´loˇziˇstˇe, kter´e lze pomoc´ı jednotlivˇe zad´avan´ ych pˇr´ıkaz˚ u testovat.
Obr´azek 18: Screenshot testovac´ıho klienta.
55
10
V´ ykonnostn´ı testy
V´ ykonnostn´ı testy datov´eho u ´loˇziˇstˇe byly provedeny na sestav´ach uveden´ ych v tabulk´ach ˇc. 10 a 11, kter´e jsou vz´ajemnˇe propojen´e v r´amci lok´aln´ı s´ıtˇe, kter´a podporuje pˇrenosovou rychlost aˇz 100Mbps. Vˇsechny mˇeˇren´ı byly 5-kr´at opakov´any. V´ ysledn´e hodnoty byly odvozeny z aritmetick´eho pr˚ umˇeru namˇeˇren´ ych hodnot.
Procesor Pamˇet’ Operaˇcn´ı syst´em Pevn´ y disk Souborov´ y syst´em
1. Server 2x AMD Athlon(tm) 64 X2 Dual Core Processor 5200+ 4063MB Debian GNU/Linux wheezy/sid (Linux 3.1.0-1-amd64, x86 64) ATA ST3500418AS (kapacita 465.76 GiB) EXT4
Tabulka 10: Testovac´ı sestava (server ˇc. 1).
Procesor Pamˇet’ Operaˇcn´ı syst´em Pevn´ y disk Souborov´ y syst´em
2. Server a klient AMD Sempron(tm) 140 Processor 1021MB Ubuntu 11.10 (Linux 3.0.0-12-generic, x86 64) ATA ST3160812A (kapacita 465.76 GiB) EXT4
Tabulka 11: Testovac´ı sestava (server ˇc. 2 a klient).
10.1
Pˇ renosov´ a rychlost
V n´asleduj´ıc´ıch tabulk´ach ˇc. 12 aˇz 15 a grafech na obr´azc´ıch ˇc. 19 aˇz 22 je uvedena namˇeˇren´a pˇrenosov´a rychlost pro upload a download soubor˚ u o velikosti 1MB, 10MB, 100MB a 1000MB, kter´e byly nahr´av´any po bloc´ıch o velikosti 512KB, 1MB, 5MB a hodnotˇe odpov´ıdaj´ıc´ı velikosti souboru. Maxim´aln´ı velikost podsouboru na souborov´em serveru je 50MB. Obsah uloˇzen´ ych podsoubor˚ u na stranˇe server˚ u byl ˇsifrov´an a byl poˇc´ıt´an jeho kontroln´ı souˇcet. V testech je uvaˇzov´ano, ˇze nedoch´az´ı ke zpoˇzdˇen´ı bˇehem synchronizace poˇzadavk˚ u (ˇcinnost synchronizaˇcn´ı vrstvy). Klient se proto bˇehem testov´an´ı pˇripojuje pˇr´ımo k VFS serveru, kter´ y pracuje v lok´aln´ım reˇzimu a nepˇrepos´ıl´a poˇzadavky synchronizaˇcn´ı vrstvˇe.
56
Velikost pos´ılan´ eho bloku souboru [MB] 1 5 1 0.5
Celkov´ a rychlost nahr´ av´ an´ı souboru [MB/s] 0.887747015 0.904248754 0.971702584 0.698697038
Rychlost z´ apisu do souboru [MB/s] 2.9062992725 2.660259068 2.631718 1.59468757
Celkov´ a rychlost stahov´ an´ı souboru [MB/s] 1.437954944 1.4083439 1.462267564 1.164263898
Rychlost ˇ cten´ı ze souboru [MB/s] 3.377882388 3.4037157 3.513297758 2.621665376
Tabulka 12: V´ ysledn´e hodnoty z testu rychlosti pˇrenosu 1MB souboru.
Obr´azek 19: Graf v´ ysledn´ ych hodnot z testu rychlosti pˇrenosu 1MB souboru.
57
Velikost pos´ılan´ eho bloku souboru [MB] 10 5 1 0.5
Celkov´ a rychlost nahr´ av´ an´ı souboru [MB/s] 4.4840738 4.119802154 2.514638234 1.69238595
Rychlost z´ apisu do souboru [MB/s] 8.6068502625 7.26841559 3.34596074 2.051173272
Celkov´ a rychlost stahov´ an´ı souboru [MB/s] 6.744330042 6.446967838 4.239209834 2.936255234
Rychlost ˇ cten´ı ze souboru [MB/s] 9.648663236 8.789014548 5.35813186 3.576186538
Tabulka 13: V´ ysledn´e hodnoty z testu rychlosti pˇrenosu 10MB souboru.
Obr´azek 20: Graf v´ ysledn´ ych hodnot z testu rychlosti pˇrenosu 10MB souboru.
58
Velikost pos´ılan´ eho bloku souboru [MB] 100 5 1 0.5
Celkov´ a rychlost nahr´ av´ an´ı souboru [MB/s] 7.5314847575 6.000374074 3.082575668 1.943263464
Rychlost z´ apisu do souboru [MB/s] 9.7319884475 6.915313066 3.33845288 2.03209783
Celkov´ a rychlost stahov´ an´ı souboru [MB/s] 10.345426018 8.94912158 5.312595516 3.808282672
Rychlost ˇ cten´ı ze souboru [MB/s] 11.47335619 10.007779552 5.848996442 4.243690288
Tabulka 14: V´ ysledn´e hodnoty z testu pˇrenosov´e rychlosti 100MB souboru.
Obr´azek 21: Graf v´ ysledn´ ych hodnot z testu rychlosti pˇrenosu 100MB souboru.
59
Velikost pos´ılan´ eho bloku souboru [MB] 1000 5 1 0.5
Celkov´ a rychlost nahr´ av´ an´ı souboru [MB/s] 8.5721332175 6.401708514 3.16741776 1.927694508
Rychlost z´ apisu do souboru [MB/s] 9.9304823075 7.115745844 3.330332544 1.987188194
Celkov´ a rychlost stahov´ an´ı souboru [MB/s] 11.048273664 9.255489466 5.801544962 4.022577836
Rychlost ˇ cten´ı ze souboru [MB/s] 11.610580092 9.907652352 6.291125362 4.428343744
Tabulka 15: V´ ysledn´e hodnoty z testu rychlosti pˇrenosu 1GB souboru.
Obr´azek 22: Graf v´ ysledn´ ych hodnot z testu rychlosti pˇrenosu 1GB souboru.
10.1.1
Vyhodnocen´ı v´ ysledk˚ u
Z graf˚ u je patrn´e, ˇze pˇrenos je ovlivnˇen reˇzi´ı bˇehem otev´ır´an´ı a zav´ır´an´ı souboru a tak´e velikost´ı blok˚ u, po kter´ ych klient nahr´av´a nebo stahuje soubor. Vzhledem k tomu, ˇze klient v´ı, kolik bajt˚ u ze souboru chce pˇresnˇe pˇren´est11 a tedy i jakou m´a 11
Pracuje vˇzdy s konkr´etn´ı ˇc´ ast´ı souboru, kter´a m˚ uˇze tvoˇrit i cel´ y jeho obsah.
60
pos´ılat velikost bloku, lze konstatovat, ˇze pˇri operaci z´apis ˇci ˇcten´ı dos´ahne vˇzdy nejvyˇsˇs´ı moˇzn´e pˇrenosov´e rychlosti a oproti p˚ uvodn´ı verzi KIVFS je jeho pˇr´ıstup k soubor˚ um efektivnˇejˇs´ı d´ıky moˇznosti pˇristupovat k pouze poˇzadovan´e ˇca´sti obsahu souboru.
10.2
Tunelovan´ e spojen´ı
Na obr´azku ˇc. 23 je zn´azornˇen´e sch´ema lok´aln´ı s´ıtˇe, v r´amci kter´e bylo testov´ano tunelovan´e spojen´ı. Klient m´a pˇr´ım´e spojen´ı ke dvˇema server˚ um. Jeho data spravuje server, ke kter´emu m´a pˇr´ıstup skrze 54Mbit linku (bezdr´atov´a s´ıt’). Ke druh´emu serveru, kter´ y nastaven tak, ˇze pr´avˇe nespravuje ˇz´adn´a data uˇzivatel˚ u, m´a klient pˇr´ıstup skrze 100Mbit linku. Je-li klient pˇripojen k prvn´ımu serveru, pak transparentnˇe pˇristupuje k dat˚ um skrze pˇr´ım´e spojen´ı. Pˇripoj´ı-li se klient druh´emu serveru, pak je jeho transparentn´ı pˇr´ıstup k dat˚ um tunelov´an skrze spojen´ı mezi servery.
Obr´azek 23: Sch´ema tunelov´an´ı spojen´ı (100Mbit tunel vyznaˇcen ˇcervenˇe).
V n´asleduj´ıc´ı tabulce ˇc. 16 a grafu ˇc. 23 jsou uvedeny hodnoty, kter´e byly z´ısk´any bˇehem mˇeˇren´ı pˇri pˇrenosu soubor˚ u skrze pˇr´ım´e spojen´ı a n´aslednˇe skrze tunelovan´e spojen´ı mezi klientem a c´ılov´ ym serverem. Klient pˇren´aˇs´ı soubor o velikosti 100MB po bloc´ıch odpov´ıdaj´ıc´ıch hodnotˇe velikosti souboru. Maxim´aln´ı velikost podsouboru na souborov´em serveru je 50MB. Obsah uloˇzen´ ych podsoubor˚ u na stranˇe server˚ u byl ˇsifrov´an a byl poˇc´ıt´an jeho kontroln´ı souˇcet.
61
Typ spojen´ı
Tunelovan´e Pˇr´ım´e
Celkov´ a rychlost nahr´ av´ an´ı souboru [MB/s] 0.74859 8.52791
Rychlost z´ apisu do souboru [MB/s] 0.7506725 8.605848
Celkov´ a rychlost stahov´ an´ı souboru [MB/s] 1.220116 8.801564
Rychlost ˇ cten´ı ze souboru [MB/s] 1.224684 8.927628
Tabulka 16: V´ ysledn´e hodnoty z testu rychlosti pˇrenosu 100MB souboru srkze pˇr´ım´e a tunelovan´e spojen´ı.
Obr´azek 24: Graf v´ ysledn´ ych hodnot z testu rychlosti pˇrenosu 100MB souboru srkze pˇr´ım´e a tunelovan´e spojen´ı.
10.2.1
Vyhodnocen´ı v´ ysledk˚ u
Z grafu je patrn´e, ˇze rychlost pˇrenosu souboru skrze tunelovan´e spojen´ı je znaˇcnˇe vyˇsˇs´ı. Rychlost pˇrenosu skrze pˇr´ım´e spojen´ı odpov´ıd´a nejvyˇsˇs´ı moˇzn´e pˇrenosov´e rychlosti, kter´eho bylo moˇzn´e dos´ahnout pˇred implementac´ı mechanismu tunelov´an´ı spojen´ı. Lze konstatovat, ˇze celkov´a propustnost syst´emu je oproti p˚ uvodn´ı verzi KIVFS mnohem vˇetˇs´ı.
62
11
Organizace zdrojov´ ych k´ od˚ u a jejich pˇ reklad
Zdrojov´e k´ody knihovny libkivfscore a datov´eho u ´loˇziˇstˇe KIVFS jsou organizov´any v samostatn´ ych adres´aˇr´ıch a distribuov´any spoleˇcnˇe v archivu KIVFS-VFS.tar.gz, kter´ y je k dispozici na pˇriloˇzen´em CD. Jeho obsah lze extrahovat pomoc´ı pˇr´ıkazu: tar -xvvzf KIVFS-VFS.tar.gz
Po jehoˇz vykon´an´ı v aktu´aln´ım pracovn´ım adres´aˇri pˇribyly: • adres´aˇre obsahuj´ıc´ı zdrojov´e k´ody VFS (./vfs/ ), metadatov´eho (./db/ ) a souborov´eho serveru (./fs/ ), • adres´aˇr obsahuj´ıc´ı zdrojov´e k´ody knihovny libkivfscore (./core/ ), • adres´aˇr obsahuj´ıc´ı zdrojov´e k´ody testovac´ıho klienta (./client/ ), • soubor obsahuj´ıc´ı vzorov´ y SQL dump datab´aze (./kivfs db.sql ), • vzorov´ y konfiguraˇcn´ı soubor(./kivfs.conf ), • instalaˇcn´ı bal´ıˇcky (kivfs-vfs.deb a kivfs-core.deb), • instalaˇcn´ı skript(./install.sh). Kaˇzd´ y adres´aˇr se zdrojov´ ymi k´ody serveru obsahuje: • zdrojov´e soubory, • adres´aˇr include, kter´ y obsahuje hlaviˇckov´e soubory, • soubor Makefile, pomoc´ı kter´eho lze pˇreloˇzit zdrojov´e k´ody. Pˇr´ıklad zdrojov´ ych k´od˚ u vfs serveru: vfs |-| | |-|-|-‘--
include |-- kivfs-vfs-forward.h ‘-- kivfs-vfs-thread.h kivfs-vfs-forward.c kivfs-vfs-server.c kivfs-vfs-thread.c Makefile
11.1
Pˇ reklad a instalace
Pro u ´spˇeˇsn´ y pˇreklad a n´asledn´e spuˇstˇen´ı je nutn´e m´ıt v syst´emu nainstalov´an n´asleduj´ıc´ı software: • pˇrekladaˇc gcc, • program make, • datab´azov´ y server MySQL,
63
• knihovnu libgcrypt, • knihovnu libmysqlclient, • knihovnu libssl, kter´e lze v r´amci operaˇcn´ıho syst´emu GNU/Linux (distribuce Debian) nainstalovat prostˇrednictv´ım n´asleduj´ıc´ıho pˇr´ıkazu spuˇstˇen´eho: apt-get install gcc make mysql-server libgcrypt11-dev libmysqlcliet-dev \ libssl-dev
Datov´e u ´loˇziˇstˇe KIVFS lze nainstalovat z bal´ıˇck˚ u prostˇrednictv´ım spuˇstˇen´ı pˇr´ıkazu: dpkg -i kivfs-core.deb kivfs-vfs.deb
nebo prostˇrednictv´ım instalaˇcn´ıho skriptu, kter´ y zajist´ı pˇreklad zdrojov´ ych soubor˚ u na spustiteln´e soubory a zajist´ı jejich instalaci do syst´emu. Instalaˇcn´ı skript lze spusit pomoc´ı pˇr´ıkazu: sh ./install.sh
Po u ´spˇeˇsn´e instalaci, bˇehem kter´e byla automaticky vytvoˇrena i datab´aze KIVFS: • knihovna libkivfscore je nainstalov´ana v syst´emu (v adres´aˇri /usr/lib), • spustiteln´e soubory /opt/kivfs/bin,
jednotliv´ ych
server˚ u jsou
um´ıstˇen´e
v
adres´aˇri
• vzorov´ y konfiguraˇcn´ı soubor je dostupn´ y v adres´aˇri /opt/kivfs/etc.
11.2
Spuˇ stˇ en´ı
Jednotliv´e servery lze spustit nez´avisle na vyˇsˇs´ıch vrstv´ach KIVFS pomoc´ı n´asleduj´ıc´ıch pˇr´ıkaz˚ u: /opt/kivfs/bin/kivfs-vfs-server /opt/kivfs/etc/kivfs.conf /opt/kivfs/bin/kivfs-db-server /opt/kivfs/etc/kivfs.conf /opt/kivfs/bin/kivfs-fs-server /opt/kivfs/etc/kivfs.conf
Pˇr´ıklad konfiguraˇcn´ıho souboru je uveden v pˇriloze F. Testovac´ıho klienta lze spustit pomoc´ı n´asleduj´ıc´ıho pˇr´ıkazu: /opt/kivfs/bin/test-client
<port VFS serveru>
Servery pr˚ ubˇeˇznˇe informuj´ı o sv´e ˇcinnosti prostˇrednictv´ım ukl´ad´an´ı zpr´av do syst´emov´eho logu.
64
12
Z´ avˇ er
C´ılem pr´ace bylo navrhnout a implementovat ˇreˇsen´ı vedouc´ı k odstranˇen´ı slab´ ych str´anek KIVFS z hlediska poˇzadavk˚ u na rozs´ahl´a datov´a u ´loˇziˇstˇe, kter´e br´anily dalˇs´ımu rozˇs´ıˇren´ı a byly u ´zk´ ym hrdlem syst´emu. Z hlediska datov´eho u ´loˇziˇstˇe KIVFS a j´ım poskytovan´ ych sluˇzeb byla zv´ yˇsena podpora mobiln´ıch platforem, pro kter´e bylo pˇrizp˚ usobeno pˇristupov´an´ı k soubor˚ um (pr´ace se souborem po ˇca´stech), pˇrid´ana podpora ACL a lok´aln´ı cache ze strany serveru pomoc´ı uchov´av´an´ı hodnot pro statisku pˇr´ıstup˚ u k soubor˚ um, atd. Na stranˇe serveru byla zv´ yˇsena bezpeˇcnost uloˇzen´ ych dat uˇzivatel˚ u prostˇrednictv´ım ˇsifrov´an´ı obsahu svazk˚ u souborov´ ych server˚ u, pˇribyla moˇznost pˇridˇelovat kv´oty k jednotliv´ ym virtu´aln´ım svazk˚ um a k nim pˇripojen´ ym adres´aˇr˚ um umoˇzn ˇuj´ıc´ı omezit uˇzivatele. D´ale pak pˇribyla moˇznost rozdˇelovat soubory do menˇs´ıch ˇc´ast´ı, bˇehem pˇrenosu soubor˚ u tunelovat spojen´ı mezi souborov´ ymi servery, logovat zpr´avy pro pˇr´ıpadnou obnovu serveru po jeho v´ ypadku. Sluˇzby poskytovan´e datov´ ym u ´loˇziˇstˇem byly rozˇs´ıˇreny o moˇznost napˇr. zjistit rozˇs´ıˇren´e atributy souboru (pr´ava, statistika, atd.), upravit nastaven´ı kv´ot, apod. Souˇcasn´a verze datov´eho ˚ uloˇziˇstˇe je optimalizov´ana z hlediska multimaster online replikace, spr´avy uloˇzen´ ych dat v datab´azi a nav´ıc byla pˇrid´ana experiment´aln´ı funkce pro deduplikaci uloˇzen´ ych soubor˚ u, kter´a se zat´ım u ˇza´dn´eho jin´eho bˇeˇznˇe pouˇz´ıvan´eho DFS nevyskytuje. Pr˚ ubˇeˇzn´e z´atˇeˇzov´e testy ovˇeˇrily stabilitu u ´loˇziˇstˇe a v´ ysledky v´ ykonnostn´ıch test˚ u prok´az´aly jeho v´ ykonnost i pˇri ˇsifrov´an´ı obsahu souborov´ ych svazk˚ u server˚ u. Pr´ace splˇ nuje vˇsechny p˚ uvodnˇe kladen´e poˇzadavky a nad jej´ı r´amec byl implementov´an testovac´ı klient KIVFS, kter´ y nyn´ı slouˇz´ı i jako referenˇcn´ı aplikace pro dalˇs´ı v´ yvoj ostatn´ıch klient˚ u ˇci n´astroj˚ u pro spr´avu syst´emu. D´ale byla vytvoˇrena knihovna libkivfscore, kter´a usnadˇ nuje a urychluje rozvoj cel´eho KIVFS. Z hlediska dalˇs´ıho v´ yvoje projektu KIVFS lze pokraˇcovat v souvislosti s datov´ ym u ´loˇziˇstˇem v jeho optimalizaci a dalˇs´ım rozˇsiˇrov´an´ı poskytovan´ ych funkc´ı. Ty se mohou t´ ykat napˇr. komprese pˇren´aˇsen´ ych dat a to jak mezi klientem a serverem, tak i servery samotn´ ymi, pl´anov´an´ı spouˇstˇen´ı deduplikace, kter´e bude z´avisl´e na vyhodnocen´ı aktu´aln´ı z´atˇeˇze syst´emu, atd. Jejich realizace m˚ uˇze b´ yt provedena v r´amci dalˇs´ıch semestr´aln´ıch, bak´al´aˇrsk´ ych a diplomov´ ych prac´ı.
65
13
Pˇ rehled zkratek a pouˇ zit´ eho znaˇ cen´ı
Pˇ rehled zkratek a pouˇ zit´ eho znaˇ cen´ı Zkratka FS VFS DFS ACL GPL BSD ERA SQL TCP NAT IP LVM RAID DDoS FUSE
Cel´ y n´ azev File system Virtual file system Distributed file system Access control list General public license Berkeley software distribution Entity relationship attribute diagram Structured query language Transmission control protocol Network address translation Internet protocol Logical volume management (LVM) Redundant array of inexpensive disks Distributed denial of service Filesystem in userspace
Tabulka 17: Pˇrehled zkratek a pouˇzit´eho znaˇcen´ı.
66
Literatura [1] OpenAFS: OpenAFS Administration Guide [online] URL: [cit. 2012-05-17] [2] BRAAM, Peter J.: The Coda Distributed File System [online] URL: [cit. 2012-05-17] [3] Center for Information Technology Integration: NFS Version 4 Open Source Reference Implementation [online] URL: [cit. 2012-05-17] [4] Network Working Group: Internet Small Computer Systems Interface (iSCSI) [online] URL: [cit. 2012-05-17] [5] Hellman, Brian, HAAS, Florian, REISNER, Philipp, ELLENBERG, Lars: The DRBD User’s Guide [online] URL: [cit. 2012-05-17] [6] MEGGYESI, Zolt´an: Fibre Channel Overview [online] URL: [cit. 2012-05-17] [7] TANENBAUM, Andrew S.: Distributed systems: principles and paradigms. 2nd ed. Upper Saddle River: Prentice Hall, 2006. 686 s. ISBN 0-13-239227-5. [8] COULOURIS, George, DOLLIMORE, Jean a KINDBERG, Tim: Distributed systems: concepts and design. 3rd ed. Harlow: Addison-Wesley, 2001. xiii, 772 s. ISBN 0-201-61918-0 [9] CHOW, Randy a JOHNSON, Theodore: Distributed operating systems and algorithms. [1st ed.] Reading: Addison-Wesley, 1998. xx, 569 s. ISBN 0-201-49838-3 [10] MULLENDER, Sape: Distributed systems. 2nd ed. Addison-Wesley: Wokingham, 1995. xvi, 601 s. ISBN 0-201-62427-3 [11] CAMPBELL, Richard: Managing AFS: the Andrew File System [1st ed.] New Jersey: Prentice-Hall, 1998. xvi, 479 s. ISBN 0-13-802729-3 ˇ [12] SVAMBERG, Michal: OpenAFS [online] URL: [cit. 2012-05-17]
67
´ ˇ ˇ CKA, ˇ ˇ [13] JUNAK, M., MATEJKA, L., PESI L., PIVNICKA, M., SKUPA, J., ˇ ˇ ´ STREJC, R., STEINER, V., SAFARIK, J.: KIV-DFS-Experimental Distributed File System In Informatics 2009. Koˇsice: Technical University, 2009. s. 45-50. ISBN: 978-808086-126-1 [14] Network Working Group: The MD5 Message-Digest Algorithm [online] URL: [cit. 2012-05-17] [15] Network Working Group: US Secure Hash Algorithms (SHA and HMAC-SHA) [online] URL: [cit. 2012-05-17] [16] GnuPG: Libgcrypt [online] URL: [cit. 2012-05-17] [17] Free Software Foundation, Inc.: The Libgcrypt Reference Manual [online] URL: [cit. 2012-05-17] [18] STREJC, Radek: KIVFS - Souborov´ y a datab´ azov´ y server Plzeˇ n, 2009. Bakal´aˇrsk´a pr´ace. Z´apadoˇcesk´a univerzita, Fakulta aplikovan´ ych vˇed. Vedouc´ı pr´ace Luboˇs Matˇejka. ˇ [19] PIVNICKA, Marek: KIVFS - Zabezpeˇ cen´ı, ˇ sifrov´ an´ı a ovˇ eˇ ren´ı identity Plzeˇ n, 2009. Bakal´aˇrsk´a pr´ace. Z´apadoˇcesk´a univerzita, Fakulta aplikovan´ ych vˇed. Vedouc´ı pr´ace Luboˇs Matˇejka. [20] SKUPA, Jindˇrich: KIVFS - Synchronizace a trasov´ an´ı poˇ zadavk˚ u Plzeˇ n, 2012. Diplomov´a pr´ace. Z´apadoˇcesk´a univerzita, Fakulta aplikovan´ ych vˇed. Vedouc´ı pr´ace Luboˇs Matˇejka. ˇ Jan: KIVFS - Klient pro GNU/Linux s pomoc´ı jadern´ [21] FAZEKAS, eho modulu Plzeˇ n, 2010. Bakal´aˇrsk´a pr´ace. Z´apadoˇcesk´a univerzita, Fakulta aplikovan´ ych vˇed. Vedouc´ı pr´ace Luboˇs Matˇejka. ˇ Pˇremysl: KIVFS - Klient pro GNU/LINUX s pouˇ [22] JAROS, zit´ım FUSE Plzeˇ n, 2012. Diplomov´a pr´ace. Z´apadoˇcesk´a univerzita, Fakulta aplikovan´ ych vˇed. Vedouc´ı pr´ace Luboˇs Matˇejka. [23] STEINER, V´aclav: KIVFS - File Manager pro MS Windows Plzeˇ n, 2012. Bakal´aˇrsk´a pr´ace. Z´apadoˇcesk´a univerzita, Fakulta aplikovan´ ych vˇed. Vedouc´ı pr´ace Luboˇs Matˇejka.
68
[24] Portable Applications Standards Committee of the IEEE Computer Society: Draft Standard for Information Technology - Portable Operating System Interface (POSIX) - Part 1: System Application Program Interface (API) - Amendment #: Protection, Audit and Control Interfaces [C Language] IEEE 1003.1e. Draft 17 [online] URL: <www.suse.de/ agruen/acl/posix/Posix 1003.1e-990310.pdf> [cit. 2012-05-17]
69
14
Pˇ r´ılohy
Pˇ r´ıloha A - Funkce pro spr´ avu souboru v datab´ azi /* vybere adres´ aˇ r v adres´ aˇ ri s dan´ ym n´ azvem */ int db_get_directory(db_transaction_t *transaction, kivfs_entry_t **p_entry, kivfs_entry_t *parent_entry, char *name);
// // // //
id. transakce vybran´ y adres´ aˇ r rodiˇ covsk´ y adres´ aˇ r n´ azev adres´ aˇ re
/* vybere soubor/adres´ aˇ r s dan´ ym ID */ int db_get_file_with_id(db_transaction_t *transaction, // id. transakce kivfs_entry_t **p_entry, // vybran´ y soubor uint64 entry_id); // ID souboru /* vybere seznam soubor˚ u obsaˇ zen´ ych v adres´ aˇ ri */ int db_get_list_directory(db_transaction_t *transaction, // id. transakce kivfs_list_t **p_files, // vybran´ y seznam // soubor˚ u kivfs_entry_t *parent_entry); // rodiˇ covsk´ y adres´ aˇ r /* smaˇ ze soubor (adres´ aˇ r) s dan´ ym ID */ int db_delete_entry(db_transaction_t *transaction, // id. transakce uint64 *p_affected_rows, // poˇ cet smazan´ ych soubor˚ u uint64 entry_id); // ID souboru /* vloˇ z´ ı nov´ y soubor (adres´ aˇ r) a vr´ at´ ı jeho ID */ int db_insert_entry(db_transaction_t *transaction, uint64 *p_entry_id, kivfs_file_type_t type, char *name, uint64 ctime, uint64 user_id, kivfs_entry_t *parent_entry);
// // // // // // //
id. transakce ID nov´ eho souboru typ souboru n´ azev souboru cas vytvoˇ ˇ ren´ ı ID vlastn´ ıka rodiˇ covsk´ y adres´ aˇ r
/* uprav´ ı adres´ aˇ r */ int db_update_directory(db_transaction_t *transaction, // id. transakce uint64 *p_affected_rows, // poˇ cet upraven´ ych // adres´ aˇ r˚ u uint64 user_id, // ID vlastn´ ıka uint64 directory_id, // ID adres´ aˇ re uint64 parent_id, // ID rodiˇ covsk´ eho // adres´ aˇ re char *name, // n´ azev adres´ aˇ re uint64 mtime, // ˇ cas zmˇ eny uint64 atime) // ˇ cas pˇ r´ ıstupu
70
Pˇ r´ıloha B - Funkce poskytovan´ e datab´ azov´ ym konektorem /* vykon´ a SQL dotaz a vr´ at´ ı jeho v´ ysledek */ int db_select(db_transaction_t *transaction, void **p_result, char *format, ...);
// // // //
/* vloˇ z´ ı z´ aznam do datab´ aze a vr´ at´ ı jeho ID */ int db_insert(db_transaction_t *transaction, // uint64 *p_inserted_id, // char *format, // ...); // /* vykon´ a pˇ r´ ıkaz */ int db_execute(db_transaction_t *transaction, uint64 *p_affected_rows, char *format, ...);
identifik´ ator transakce v´ ysledek dotazu form´ at SQL dotazu parametry SQL dotazu
id. transakce ID vloˇ zen´ eho z´ aznamu form´ at SQL pˇ r´ ıkazu parametry SQL pˇ r´ ıkazu
// // // //
id. transakce poˇ cet ovlivnˇ en´ ych z´ aznam˚ u form´ at SQL pˇ r´ ıkazu parametry SQL pˇ r´ ıkazu
/* vloˇ z´ ı z´ aznam do datab´ aze a vr´ at´ ı jeho ID */ int db_real_insert(db_transaction_t *transaction, uint64 *p_inserted_id, char *query, uint64 length);
// // // //
id. transakce ID vloˇ zen´ eho z´ aznamu pˇ r´ ıkaz d´ elka pˇ r´ ıkazu
/* uvoln´ ı v´ ysledek */ void db_free_result(void *result); // v´ ysledek /* vr´ at´ ı dalˇ s´ ı ˇ r´ adek z v´ ysledku */ char **db_fetch_row(void *result); // v´ ysledek /* vr´ at´ ı pole d´ elek z aktu´ aln´ ıho ˇ r´ adku v´ ysledku */ unsigned long *db_fetch_lengths(void *result); // v´ ysledek /* vr´ at´ ı poˇ cet ˇ r´ adk˚ u z v´ ysledku */ uint64 db_num_rows(void *result); // v´ ysledek /* oˇ setˇ r´ ı vstupn´ ı ˇ retˇ ezec */ int db_escape(db_transaction_t *transaction, // id transakce char **p_dst, // zdrojov´ y ˇ retˇ ezec char *src, // c´ ılov´ y ˇ retˇ ezec uint64 length); // d´ elka zdojov´ eho ˇ retˇ ezce /* zah´ aj´ ı transakci */ int db_start_transaction(db_transaction_t **p_transaction); // id. zah´ ajen´ e // transakce /* zruˇ s´ ı zmˇ eny proveden´ e v transakci */ int db_rollback_transaction(db_transaction_t **p_transaction); // id. transakce /* potvrd´ ı zmˇ eny proveden´ e v transakci */ int db_commit_transaction(db_transaction_t **p_transaction); // id. transakce
71
Pˇ r´ıloha C - Relace mezi souborem a ACL /* typ souboru */ typedef enum { FILE_TYPE_ANY FILE_TYPE_DIRECTORY FILE_TYPE_REGULAR_FILE } kivfs_file_type_t;
= 0, = 1, = 2,
/* bity reprezentuj´ ıc´ ı jednotliv´ a pr´ ava na ˇ cten´ ı, z´ apis a spuˇ stˇ en´ ı */ typedef enum { NONE_BIT = 0, EXECUTE_BIT = 1, WRITE_BIT = 2, READ_BIT = 3 } kivfs_permission_bit_t;
/* pr´ ava */ typedef enum { NONE_PERMISSION EXECUTE_PERMISSION WRITE_PERMISSION EXECUTE_WRITE_PERMISSION READ_PERMISSION READ_EXECUTE_PERMISSION READ_WRITE_PERMISSION READ_WRITE_EXECUTE_PERMISSION } kivfs_permission_t;
= = = = = = = =
0, 1, 2, 3, 4, 5, 6, 7
/* typy jmenn´ ych z´ aznam˚ u */ typedef enum { NAMED_USER = 1, NAMED_GROUP = 2, DEFAULT_NAMED_USER = 3, DEFAULT_NAMED_GROUP = 4, } kivfs_named_acl_type_t;
/* datov´ y typ role */ typedef struct { uint64 id; char *name; } kivfs_role_t; /* funkce pro spr´ avu role */ kivfs_role_t *kivfs_role(uint64 id, char *name); void kivfs_print_role(kivfs_t *role); void kivfs_free_role(kivfs_t *role);
72
/* datov´ y typ jmenn´ y z´ aznam */ typedef struct { kivfs_named_acl_type_t type; kivfs_permission_t permission; kivfs_role_t *role; } kivfs_named_acl_t; /* funkce pro spr´ avu jmenn´ eho z´ aznamu */ kivfs_named_acl_t *kivfs_named_acl(kivfs_named_acl_type_t type, kivfs_permission_t permission, kivfs_role_t *role); void kivfs_print_named_acl(kivfs_t *named_acl); void kivfs_free_named_acl(kivfs_t *named_acl);
/* datov´ y typ ACL */ typedef struct { kivfs_permission_t owner; kivfs_permission_t group; kivfs_permission_t other; kivfs_permission_t mask; kivfs_list_t kivfs_list_t
*named_users; *named_groups;
kivfs_permission_t kivfs_permission_t kivfs_permission_t kivfs_permission_t
default_owner; default_group; default_other; default_mask;
kivfs_list_t kivfs_list_t } kivfs_acl_t;
*default_named_users; *default_named_groups;
/* funkce pro spr´ avu ACL */ kivfs_acl_t *kivfs_acl(kivfs_permission_t owner, kivfs_permission_t group, kivfs_permission_t other, kivfs_permission_t mask, kivfs_list_t *named_users, kivfs_list_t *named_groups, kivfs_permission_t default_owner, kivfs_permission_t default_group, kivfs_permission_t default_other, kivfs_permission_t default_mask, kivfs_list_t *default_named_users, kivfs_list_t *default_named_groups); void kivfs_print_acl(kivfs_t *acl); void kivfs_free_acl(kivfs_t *acl);
/* datov´ y typ soubor */ typedef struct { kivfs_file_type_t type; char *name;
73
char *owner; char *group; uint64 uint64 uint64 uint64 uint64 uint64
size; mtime; atime; version; read_hits; write_hits;
kivfs_acl_t *acl; } kivfs_file_t; /* funkce pro spr´ avu souboru */ kivfs_file_t *kivfs_file(kivfs_file_type_t type, char *name, uint64 size, uint64 mtime, uint64 atime, uint64 version, uint64 read_hits, uint64 write_hits, char *owner, char *group, kivfs_acl_t *acl); void kivfs_print_file(kivfs_t *file); void kivfs_free_file(kivfs_t *file); /* datov´ y typ obecn´ y souborov´ y z´ aznam */ typedef struct entry_st { uint64 id; uint64 owner_id; uint64 group_id; uint64 volume_id; uint64 read_locks; uint64 write_locks; struct entry_st *parent; kivfs_file_t *file; } kivfs_entry_t; /* funkce pro spr´ avu souborov´ eho z´ aznamu */ kivfs_entry_t *kivfs_entry(uint64 id, uint64 owner_id, uint64 group_id, uint64 volume_id, uint64 read_locks, uint64 write_locks, kivfs_entry_t *parent, kivfs_file_t *file); void kivfs_print_entry(kivfs_t *entry); void kivfs_free_entry(kivfs_t *entry);
74
Pˇ r´ıloha D - Spr´ ava ˇ sifrovan´ ych soubor˚ u typedef struct { gcry_cipher_hd_t kivfs_boolean_t FILE uint64 } encrypted_part_t;
cipher_handler; editable, changed; *file; writed;
// // // // //
cipher handler soubor otevˇ ren pro editaci obsah souboru byl zmˇ enˇ en souborov´ y proud poˇ cet zapsan´ ych bajt˚ u
/* zapisuje data do ˇ sifrovan´ eho podsouboru */ int write_to_part(encrypted_part_t *encrypted_part, void *buffer, uint64 length); /* ˇ cte data ze ˇ siforvan´ eho podsouboru */ int read_from_part(encrypted_part_t *encrypted_part, void *buffer, uint64 length); /* otev´ ır´ a ˇ sifrovan´ y podsoubor (pro ˇ cten´ ı, z´ apis, ˇ cten´ ı/z´ apis) */ int open_part(encrypted_part_t **p_encrypted_part, kivfs_replica_t *replica, kivfs_part_t *part, uint64 offset, kivfs_file_mode_t mode); /* zav´ ır´ a ˇ sifrovan´ y podsoubor */ int close_part(encrypted_part_t **p_encrypted_part, kivfs_replica_t *replica, kivfs_part_t *part);
75
Pˇ r´ıloha E - Seznam pˇ r´ıkaz˚ u klienta Pˇ r´ıkaz ls mkdir rmdir rm mv info hits
Parametry <path> <path> <path> <path> <path><path> <path> -
touch chmod dchmod chown chgrp setfacl
<path> <7777><path> <7777><path> <path> <path> <path> <path> <user> <user> <user> <user> <user>
getfacl id su groupadd groupdel useradd userdel engroup ungroup begin commit rollback maxtime logs df quota get put rewrite append
Popis testovan´ e funkce vyp´ıˇse obsah adres´aˇre vytvoˇr´ı adres´aˇr smaˇze adres´aˇr smaˇze soubor pˇresune soubor zjist´ı informace o souboru zjist´ı hodnotu ˇc´ıtaˇc˚ u pˇr´ıstup˚ u k souboru zmˇen´ı ˇcasov´e zn´amky souboru zmˇen´ı pr´ava souboru zmˇen´ı v´ ychoz´ı pr´ava souboru zmˇen´ı vlastn´ıka souboru zmˇen´ı vlastnickou skupinu souboru nastav´ı ACL souboru
<size>
76
zjist´ı ACL souboru zjist´ı informace o uˇzivateli pˇrepne uˇzivatele pˇrid´a skupinu smaˇze skupinu pˇrid´a uˇzivatele odebere uˇzivatele pˇrid´a uˇzivatele do skupiny odebere uˇzivatele ze skupiny zah´aj´ı transakc´ı potvrd´ı zmˇeny proveden´e v transakci zahod´ı zmˇeny proveden´e v transakci zjist´ı maxim´aln´ı logickou ˇcasovou zn´amku v logu vyp´ıˇse vˇsechny logy vyp´ıˇse stav svazk˚ u nastav´ı kv´otu svazku st´ahne soubor nahraje soubor pˇrep´ıˇse soubor pˇrid´a soubor na konec souboru
Pˇ r´ıloha F - Konfiguraˇ cn´ı soubor [kivfs_global] server_name=fs-1 log_directory=/tmp debug=yes max_clients=5000 max_queue=500 local_mode=yes [sync] port=30002 ip=127.0.0.1 [vfs_server] ip=127.0.0.1 port=30003 [db_server] ip=127.0.0.1 port=30004 [fs_server] ip=127.0.0.1 port=30005 [database] name=kivfs_db user=kivfs password=***** host=localhost port=3306 pooling=100 [storage] root_directory=/mnt/kivfs temporary_directory=/mnt/kivfs/temp encryption_key=5b2d2840662c333b6e773a682b2a355739722d4d26534c3272665f5b3d encrypt_storage=yes hash_files=yes blocksize=52428800 files_count=1000 deduplication_interval=324000 replication_interval=300 removing_interval=180
77