Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Diplomov´ a pr´ ace V´ıcebodov´ a synchronizace dat protokolem WebDAV
Plzeˇ n 2012
Jiˇr´ı Praus
Prohl´ aˇ sen´ı 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 13. kvˇetna 2012 Jiˇr´ı Praus
Multipoint synchronization using WebDAV protocol Abstract The goal of this thesis is to verify whether the WebDAV communication protocol and its implementation by Kerio Connect email server is a suitable tool for data synchronization between more Kerio Connect servers in a distributed environment and to design fault-tolerant synchronization algorithm, which would use the WebDAV communication interface to transfer data between Kerio Connect servers. The work describes in detail the communication protocol WebDAV and various algorithms and technologies for maintaining data consistency in a distributed environment. Based on learned facts the algorithm is designed to efficiently synchronize data between servers in a distributed environment, deal with possible conflict situations and resolve possible error conditions. Behavior of the algorithm is extensively tested both in terms of functionality and reliability as well as performance and efficiency.
Obsah ´ 1 Uvod
6
2 Protokol HTTP a WebDav 2.1 HTTP . . . . . . . . . . . . . . . . . 2.1.1 Vybran´e vlastnosti . . . . . . 2.1.2 D˚ uleˇzit´e metody . . . . . . . 2.1.3 N´avratov´e k´ody . . . . . . . . 2.2 Protokol WebDAV . . . . . . . . . . 2.2.1 Slovn´ık pojm˚ u. . . . . . . . . 2.2.2 Odpovˇed’ 207 Multi-Status . . 2.3 Exchange Store WebDAV . . . . . . 2.3.1 Metoda PROPFIND . . . . . 2.3.2 Metoda PROPPATCH . . . . 2.3.3 Metoda MKCOL . . . . . . . 2.3.4 Metoda SEARCH . . . . . . . 2.3.5 Metoda LOCK a UNLOCK . 2.3.6 Metoda SUBSCRIBE a POLL 2.4 D˚ uvody pro pouˇzit´ı WebDAV . . . . 3 Replikace 3.1 Konzistence . . . . . . . . . . 3.2 Pesimistick´a replikace . . . . . 3.3 Optimistick´a replikace . . . . 3.3.1 Single-master . . . . . 3.3.2 Multi-master . . . . . 3.4 Soubˇeˇznost operac´ı . . . . . . 3.4.1 Syntaktick´e pl´anovaˇce 3.4.2 S´emantick´e pl´anovaˇce . 3.5 Zpracov´an´ı konflikt˚ u . . . . . 3.6 Synchronizace replik . . . . . 3.6.1 Pomal´a synchronizace 3.6.2 Zmˇenov´a synchronizace 3.6.3 Aktivn´ı synchronizace 3.7 Replikace a WebDAV . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
7 7 7 8 9 10 10 11 12 12 13 13 13 14 14 15
. . . . . . . . . . . . . .
16 16 16 17 17 17 18 18 19 21 22 22 22 24 24
OBSAH
OBSAH
4 N´ avrh modelu synchronizace 4.1 Poˇzadavky a pˇredpoklady . . . . 4.2 C´ıle synchronizace . . . . . . . . 4.3 Architektura . . . . . . . . . . . . 4.4 Konzistence . . . . . . . . . . . . 4.5 Pravdivostn´ı datab´aze . . . . . . 4.5.1 Lokace . . . . . . . . . . . 4.5.2 Objekt . . . . . . . . . . . 4.5.3 Kopie . . . . . . . . . . . 4.6 Synchronizace . . . . . . . . . . . 4.6.1 Synchronizace kolekce . . 4.6.2 Pomal´a synchronizace . . 4.6.3 Zmˇenov´a synchronizace . . 4.6.4 Aktivn´ı synchronizace . . 4.7 Nedostupnost server˚ u . . . . . . . 4.8 Detekce zmˇen . . . . . . . . . . . 4.8.1 Nov´a kolekce . . . . . . . 4.8.2 Nov´ y dokument . . . . . . 4.8.3 Zmˇenˇen´a kolekce . . . . . 4.8.4 Zmˇenˇen´ y dokument . . . . 4.8.5 Smazan´ y zdroj . . . . . . 4.8.6 Detekce faleˇsn´ ych zmˇen . 4.9 P´arov´an´ı zdroj˚ u . . . . . . . . . . 4.9.1 Konflikt tˇr´ıd kolekc´ı . . . 4.10 Poˇrad´ı operac´ı . . . . . . . . . . . 4.11 Aktualizace . . . . . . . . . . . . 4.11.1 Operace smaz´an´ı . . . . . 4.11.2 Aktualizace zdroje . . . . 4.11.3 Detekce konflikt˚ u . . . . . 4.11.4 Zpracov´an´ı konflikt˚ u . . . 4.12 Pl´anovaˇc . . . . . . . . . . . . . . 4.12.1 Heuristick´a synchronizace 4.12.2 Rychlost propagace zmˇen
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25 25 26 28 29 30 31 31 31 31 31 32 33 33 34 34 35 35 36 36 37 38 38 39 40 42 42 42 43 44 46 47 47
5 Implementace 5.1 Programov´e prostˇredky . . . 5.2 Knihovny . . . . . . . . . . 5.3 Architektura . . . . . . . . . 5.3.1 WebDAV klient . . . 5.3.2 Objektov´ y model . . 5.3.3 Reprezentace zdroj˚ u 5.3.4 Synchronizace . . . . 5.4 Testov´an´ı . . . . . . . . . . 5.5 Z´atˇeˇzov´ y test . . . . . . . . 5.6 Urychlen´ı . . . . . . . . . . 5.7 Dlouhodob´ y test . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
48 48 48 50 50 51 51 52 53 54 55 57
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
4
OBSAH
OBSAH
6 Z´ avˇ er
59
A Uˇ zivatelsk´ a pˇ r´ıruˇ cka A.1 Instalace . . . . . . . A.1.1 UNIX/Linux A.1.2 Windows . . . A.1.3 MAC OS . . A.2 Nastaven´ı . . . . . . A.3 Spuˇstˇen´ı . . . . . . .
63 63 63 63 64 64 65
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
5
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
´ 1 Uvod V modern´ı dobˇe jsou pro n´as data uloˇzen´a v poˇc´ıtaˇci to nejcennˇejˇs´ı, ˇc´ım n´aˇs poˇc´ıtaˇc disponuje, bez nich je poˇc´ıtaˇc bezcenn´ y. Sv´a data chceme ˇcasto sd´ılet s ostatn´ımi uˇzivateli a publikovat na veˇrejn´ ych prostorech. Emailov´ y server Kerio Connect od spoleˇcnosti Kerio Technologies s.r.o. tuto moˇznost nab´ız´ı a dovoluje uˇzivatel˚ um sd´ılet d˚ uleˇzit´a data nebo ud´alosti mezi sebou. Uˇzivatel´e mohou takto sd´ılen´a data libovolnˇe upravovat a mˇenit. Probl´em ovˇsem nast´av´a v distribuovan´e dom´enˇe, kde jsou uˇzivatel´e stejn´e dom´eny distribuov´ani mezi v´ıce Kerio Connect server˚ u. Uˇzivatel´e mohou veˇrejn´a data nad´ale sd´ılet mezi sebou, ale pouze v r´amci jednoho serveru. Motivac´ı pro tuto pr´aci je pr´avˇe potˇreba sd´ılen´a data distribuovat mezi vˇsechny servery dom´eny tak, aby kaˇzd´ y z uˇzivatel˚ u distribuovan´e dom´eny mohl pˇristupovat ke stejn´ ym veˇrejn´ ym dat˚ um na libovoln´em serveru. Ide´aln´ım rozhran´ım pro takovou v´ ymˇenu dat mezi servery je pˇritom otestovan´e a funkˇcn´ı komunikaˇcn´ı rozhran´ı WebDAV pouˇz´ıvan´e pro pˇripojen´ı Entourage emailov´eho klienta ke Kerio Connect serveru. Distribuce dat s sebou ovˇsem pˇrin´aˇs´ı nemal´e probl´emy. Data jsou replikov´ana mezi servery a jsou uloˇzena ve v´ıcen´asobn´ ych kopi´ıch. Uˇzivatel´e mohou stejn´e soubory mˇenit na libovoln´em serveru a vyvolat t´ım nutnost pˇren´aˇset zmˇeny do ostatn´ıch kopi´ı tak, aby vˇsichni uˇzivatel´e vidˇeli stejn´a data. Situace se d´ale komplikuje, pokud je zmˇena stejn´eho souboru provedena na v´ıce serverech souˇcasnˇe. Vznik´a tak konflikt, kter´ y je potˇreba uspokojivˇe vyˇreˇsit. Distribuovan´e syst´emy d´ale trp´ı ˇcast´ ymi v´ ypadky a nest´alost´ı s´ıtˇe, ˇc´ımˇz doch´az´ı k doˇcasn´e nedostupnosti jednotliv´ ych uzl˚ u syst´emu. C´ılem pr´ace je v´ yˇse zm´ınˇen´e probl´emy vyˇreˇsit v prostˇred´ı distribuovan´e dom´eny Kerio Connect server˚ u s pouˇzit´ım komunikaˇcn´ıho protokolu WebDAV. Druh´a kapitola pr´ace se podrobnˇe zab´ yv´a ovˇeˇren´ım moˇznost´ı WebDAV komunikaˇcn´ıho rozhran´ı implementovan´eho v Kerio Connect serveru a jeho vhodnost´ı pro replikaci dat mezi servery. Ve tˇret´ı kapitole je pˇredstaven pojem replikace a detailnˇe pops´any r˚ uzn´e zp˚ usoby udrˇzen´ı dat na v´ıce replik´ach v konzistentn´ım stavu. Z´ıskan´e poznatky jsou ve ˇctvrt´e kapitole vyuˇzity pro n´avrh vhodn´eho synchronizaˇcn´ıho algoritmu, kter´ y bude spolehlivˇe udrˇzovat repliky v konzistentn´ım stavu a vhodnˇe ˇreˇsit vznikl´e konflikty. Navrˇzen´ y algoritmus je v z´avˇereˇcn´e p´at´e kapitole provˇeˇren jak z hlediska funkˇcnosti a spolehlivosti, tak i v´ ykonnosti a efektivity.
6
2 Protokol HTTP a WebDav HTTP (HyperText Transfer Protocol) je jednoduch´ y aplikaˇcn´ı protokol, kter´ y se d´a vyuˇz´ıt nejen k pˇrenosu hypertextov´ ych dokument˚ u a obr´azk˚ u, ale m´a i mnoho zaj´ımav´ ych rozˇs´ıˇren´ı a vlastnost´ı. A pr´avˇe jeho v´ yznamn´e rozˇs´ıˇren´ı WebDAV, kter´e umoˇzn ˇuje mimo klasick´eho stahov´an´ı obsahu i jeho spr´avu, je pouˇzito v t´eto pr´aci jako komunikaˇcn´ı prostˇredek pro pˇrenos dokument˚ u. V t´eto kapitole budou uvedeny z´aklady protokolu HTTP a d˚ uleˇzit´e vlastnosti WebDAV, kter´e byly v dalˇs´ım textu pr´ace pouˇzity.
2.1
HTTP
Hypertext Transfer Protokol poch´az´ı z roku 1996 (respektive HTTP 1.1 z roku 1999) a byl pouˇz´ıv´an pro pˇrenos dat pˇres internet. V dneˇsn´ı dobˇe je pouˇz´ıv´an zejm´ena pro WWW. HTTP je aplikaˇcn´ı protokol nad transportn´ım protokolem TCP a je zaloˇzen na principu poˇzadavek/odpovˇed’. Klient vˇzdy inicializuje spojen´ı odesl´an´ım poˇzadavku a server mu patˇriˇcnˇe odpov´ı. Dotaz se vˇzdy skl´ad´a z poˇzadovan´e metody, cesty k souboru (URL), verze protokolu a hlaviˇcek. V nˇekter´ ych pˇr´ıpadech n´asleduje po hlaviˇck´ach i tˇelo dotazu oddˇelen´e jedn´ım pr´azdn´ ym ˇra´dkem. Vˇse je pˇren´aˇseno v textov´e podobˇe, je tedy moˇzn´e poˇzadavky jednoduˇse vytv´aˇret nebo ˇc´ıst: 1 GET / HTTP/1.1 2 Host: www.example.com
Server poˇzadavek vyˇr´ıd´ı a vr´at´ı odpovˇed’, kter´a m˚ uˇze vypadat napˇr´ıklad takto: 1 2 3 4 5 6 7 8
HTTP/1.1 200 OK Date: Sat, 10 Dec 2011 20:22:25 GMT Server: Apache Content−Length: 27072 Connection: Keep−Alive Content−Type: text/html;charset=UTF−8 ...
Odpovˇed’ obsahuje verzi protokolu, n´avratov´ y k´od, hlaviˇcky a tˇelo odpovˇedi. Opˇet je veˇsker´ y pˇrenos prov´adˇen pouze v textov´e podobˇe. Jak je moˇzn´e z pˇredchoz´ıho pozorovat, protokol HTTP je velice jednoduch´ y a proto tak´e velmi obl´ıben´ y a pouˇz´ıvan´ y. D´ale se budeme zab´ yvat pouze nejnovˇejˇs´ı verz´ı protokolu HTTP 1.1.
2.1.1
Vybran´ e vlastnosti
Perzistentn´ı spojen´ı Server podporuj´ıc´ı protokol 1.0 po vr´acen´ı odpovˇedi ihned naˇ v´azan´e spojen´ı uzavˇre. Casto je toto protokolu vyˇc´ıt´ano, protoˇze otevˇren´ı TCP spojen´ı pro kaˇzd´ y p´ar poˇzadavek/odpovˇed’ je pomˇernˇe drah´e. Protokol 1.1 pˇrich´az´ı s perzistentn´ım spojen´ım, kdy server spojen´ı neuzavˇre ihned, ale ˇcek´a na dalˇs´ı poˇzadavky. Klient m˚ uˇze pokraˇcovat v dotazov´an´ı a spojen´ı ukonˇcit s´am. 7
Protokol HTTP a WebDav
HTTP
Bezstavovost Poˇzaduje-li opakovanˇe klient stejn´a data, zaˇsle nov´ y poˇzadavek a server vygeneruje novou odpovˇed’. Pˇr´ıpadn´e uchov´an´ı nˇekter´ ych informac´ı o komunikaci mezi klientem a serverem je zcela v reˇzii klienta. Protokol si informace o jiˇz proveden´ ych spojen´ıch neudrˇzuje, je to protokol bezstavov´ y. MIME typ (form´ at) Pomoc´ı hlaviˇcky Accept m˚ uˇze klient poˇzadovat urˇcit´ y MIME typ. Takˇze pˇri poˇzadavku na stejn´e URL, ale s jinou hlaviˇckou m˚ uˇze dostat v pˇr´ıpadˇe Accept: text/plain str´anku pˇrevedenou na prost´ y text, zat´ımco v pˇr´ıpadˇe Accept: application/xhtml+xml dostane hypertext. Stejnˇe tak pomoc´ı t´eto hlaviˇcky m˚ uˇzeme vyjednat se serverem vhodn´ y form´at napˇr´ıklad obr´azk˚ u [RFC2616]. Bezpeˇ cnost Poˇzadavky i odpovˇedi jsou pˇren´aˇseny ˇcistˇe v textov´e podobˇe, coˇz m˚ uˇze znamenat znaˇcn´a bezpeˇcnostn´ı rizika, a proto je moˇzn´e pˇridat TLS vrstvu a vytvoˇrit tak zabezpeˇcen´ y protokol naz´ yvan´ y HTTPS [RFC2818].
2.1.2
D˚ uleˇ zit´ e metody
Pouˇzitou metodu HTTP protokolu specifikuje klient v poˇzadavku a oznamuje tak serveru, jakou operaci chce prov´est. S metodami jsou sv´az´any hlaviˇcky a kaˇzd´a metoda se m˚ uˇze chovat trochu jinak pˇri pouˇzit´ı rozd´ıln´ ych hlaviˇcek, podrobnosti je moˇzn´e nal´ezt v ofici´aln´ı specifikaci [RFC1945]. Metoda GET pˇredstavuje poˇzadavek na zasl´an´ı dokumentu urˇcen´eho pomoc´ı URL, ˇcili napˇr´ıklad staˇzen´ı HTML str´anky nebo obr´azk˚ u z webov´eho serveru. Metoda HEAD je shodn´a s metodou GET, ale v odpovˇedi serveru jsou uvedeny pouze hlaviˇcky vyˇza´dan´eho dokumentu bez tˇela obsahuj´ıc´ı samotn´ y dokument. Tato metoda se pouˇz´ıv´a pro zjiˇstˇen´ı existence dokumentu nebo jeho vlastnost´ı. Metoda POST se pouˇz´ıv´a v pˇr´ıpadˇe, kdy m´a c´ılov´ y server pˇrijmout data z poˇzadavku. Skuteˇcn´a funkce metody z´avis´ı na implementaci a urˇcen´e URL. M˚ uˇze se jednat o zasl´an´ı emailu, pˇred´an´ı dat do procesu a podobnˇe. U klasick´ ych webov´ ych server˚ u se jedn´a pˇredevˇs´ım o odesl´an´ı formul´aˇre. Metoda PUT pˇredstavuje poˇzadavek na uloˇzen´ı pos´ılan´ ych dat pod specifikovan´e URL na server. Takto uloˇzen´a data budou dostupn´a napˇr. n´asledn´ ymi dotazy GET. Webov´e servery toto samozˇrejmˇe nepodporuj´ı, klient nem´a moˇznost mˇenit obsah na vzd´alen´em serveru. Metoda DELETE je poˇzadavkem na zruˇsen´ı dokumentu na serveru. Ruˇsen´ y dokument je specifikov´an v URL. Stejnˇe jako u metody PUT ji klasick´e webov´e servery nepodporuj´ı.
8
Protokol HTTP a WebDav
2.1.3
HTTP
N´ avratov´ e k´ ody
Na kaˇzd´ y poˇzadavek server odpov´ı jednou odpovˇed´ı, tato odpovˇed’ vˇzdy obsahuje tˇr´ıcifern´ y n´avratov´ y k´od vˇcetnˇe popisuj´ıc´ıho textu, kter´ y oznamuje stav poˇzadavku. N´avratov´ y k´od se dˇel´ı podle prvn´ı cifry na pˇet tˇr´ıd [RFC1945]: • 1 - informativn´ı Poˇzadavek byl v poˇra´dku obdrˇzen, ale nen´ı doposud kompletnˇe zpracov´an. • 2 - u ´ spˇ ech Dotaz byl serverem pochopen, akceptov´an a pˇr´ıpadn´a data jsou v odpovˇedi. Nejˇcastˇejˇs´ı odpovˇed´ı je zn´am´a 200 OK. • 3 - pˇ resmˇ erov´ an´ı Poˇzadovan´ y c´ıl existuje, ale byl pˇresunut, klient mus´ı prov´est dalˇs´ı akce pro jeho z´ısk´an´ı (zaslat nov´ y poˇzadavek). Napˇr´ıklad zn´am´e pˇresmˇerov´an´ı 301 Moved Permanently. • 4 - chybn´ y poˇ zadavek Klient poloˇzil chybn´ y dotaz nebo nem´a dostateˇcn´a opr´avnˇen´ı z´ıskat poˇzadovan´ y c´ıl. Opˇet m˚ uˇzeme uv´est pˇr´ıklad typick´e n´avratov´e hodnoty 404 Not Found. • 5 - chyba serveru Server nen´ı z nˇejak´eho d˚ uvodu schopen obslouˇzit poˇzadavek. ˇ Casto nepˇr´ıjemn´a odpovˇed’ 500 Internal Server Error.
9
Protokol HTTP a WebDav
2.2
Protokol WebDAV
Protokol WebDAV
Web Distributed Authoring and Versioning - WebDAV - je mnoˇzina rozˇs´ıˇren´ı HTTP protokolu, kter´a poskytuje moˇznost vzd´alen´e spr´avy soubor˚ u, adres´aˇr˚ u a vlastnost´ı na datov´em serveru. Protokol tak ˇcin´ı ze vzd´alen´eho serveru zapisovateln´e m´edium. Vytv´aˇr´ı prostˇred´ı, ve kter´em mohou klienti vytv´aˇret, mˇenit, pˇresouvat a mazat soubory a adres´aˇre. Prostˇred´ı organizuje soubory do standardn´ı stromov´e adres´aˇrov´e struktury [RFC2818] WebDAV spojuje dvˇe jiˇz propracovan´e technologie HTTP a XML (Extensible Markup Language) [W3C]. Protokol HTTP je pouˇz´ıv´an pro zajiˇstˇen´ı zp˚ usobu komunikace. Kromˇe standardn´ıch metod vyuˇz´ıvan´ ych v r´amci protokolu HTTP (GET, POST, PUT . . . ) zav´ad´ı WebDAV pro sv´e potˇreby nov´e metody a hlaviˇcky. XML naopak WebDAV vyuˇz´ıv´a jako nositele strukturovan´ ych informac´ı, kter´e upˇresˇ nuj´ı jak dotaz klienta, tak i v´ ysledek zas´ılan´ y serverem. V XML ˇc´asti komunikace jsou odes´ıl´any v´ ysledky zpracov´an´ı pˇr´ıkaz˚ u pro jednotliv´e soubory, informace o souborech, adres´aˇr´ıch a jin´e. Nejlepˇs´ı bude uk´azat WebDAV poˇzadavek a odpovˇed’ na jednoduch´e uk´azce vytvoˇren´ı nov´e kolekce. Odpovˇ ed’
Poˇ zadavek 1 2 3 4 5 6 7 8 9 10 11 12
1 HTTP/1.1 201 Created
MKCOL /folder/ HTTP/1.1 Host: www.example.com Content−Type: text/xml
Folder
V podstatˇe se nejedn´a o nic nov´eho, poˇzadavek je shodn´ y s poˇzadavkem v HTTP protokolu, s t´ım rozd´ılem, ˇze tˇelo obsahuje XML dokument s podrobnostmi o poˇzadavku, kter´ ym se v tomto pˇr´ıpadˇe nastav´ı vlastnost kolekce displayname na hodnotu Folder“. ”
2.2.1
Slovn´ık pojm˚ u
WebDAV protokol definuje nˇekolik nov´ ych pojm˚ u, kter´e jsou v n´asleduj´ıc´ım textu objasnˇeny, a tyto pojmy budou i v dalˇs´ım textu t´eto pr´ace pouˇzity. Zdroj - libovoln´a entita, se kterou je moˇzn´e pracovat. Je identifikov´an jedineˇcnou URL nebo URI adresou. Neform´alnˇe ˇreˇceno se jedn´a o soubory, kolekce a vlastnosti (z angl. Resource [RFC4918]). Vlastnost - p´ar jm´eno/hodnota obsahuj´ıc´ı popisn´e informace o zdroji - typ zdroje, velikost, autor . . . (z angl. Property [RFC4918]).
10
Protokol HTTP a WebDav
Protokol WebDAV
Kolekce - zdroj, kter´ y se souˇcasnˇe chov´a jako kontejner referenc´ı na dalˇs´ı zdroje. V podstatˇe se jedn´a o analogii adres´aˇre v klasick´em souborov´em syst´emu. Kolekce sm´ı obsahovat vlastnosti a dalˇs´ı zdroje, at’ uˇz kolekce nebo dokumenty (z angl. Collection [RFC4918]). Dokument - zdroj, kter´ y nen´ı kolekc´ı. Dokumenty jsou analogi´ı soubor˚ u v klasick´em souborov´em syst´emu (z angl. Document). Vnitˇ rn´ı ˇ clen kolekce - zdroj, kter´ y je pˇr´ım´ ym potomkem dan´e kolekce, ˇcili kolekce obsahuje referenci na tento zdroj (z angl. Internal Member of a Collection [RFC4918]). ˇ Clen kolekce - zdroj, kter´ y je potomek dan´e kolekce neboli je vnitˇrn´ı ˇclen dan´e kolekce nebo vnitˇrn´ı ˇclen libovoln´e vnoˇren´e kolekce (z angl. Member of a Collection [RFC4918]). Aktivn´ı vlastnost - vlastnost, jej´ıˇz s´emantika a syntaxe je vynucen´a serverem. Pˇr´ıkladem takov´e aktivn´ı vlastnosti m˚ uˇze b´ yt DAV:getcontentlength, jej´ıˇz hodnota, vr´acen´a v poˇzadavku GET, je automaticky spoˇc´ıt´ana na stranˇe serveru z aktu´aln´ıho stavu zdroje (z angl. Live Property [RFC4918]). Pasivn´ı vlastnost - vlastnost jej´ıˇz s´emantika a syntaxe nen´ı vynucen´a serverem. Server pouze hodnotu ukl´ad´a a za u ´drˇzbu konzistence a spr´avnosti s´emantiky a syntaxe hodnoty je odpovˇedn´ y klient. Pˇr´ıkladem t´eto vlastnosti m˚ uˇze b´ yt jm´eno autora zdroje (z angl. Dead Property [RFC4918]).
2.2.2
Odpovˇ ed’ 207 Multi-Status
WebDAV mimo klasick´ ych dotaz˚ u a odpovˇed´ı nad jedn´ım konkr´etn´ım zdrojem, zav´ad´ı i hromadn´e (z angl. batch) operace, napˇr´ıklad pro smaz´an´ı nebo nastaven´ı vlastnost´ı zdroje. V tomto pˇr´ıpadˇe je ovˇsem nutn´e obdrˇzet od serveru odpovˇed’ se stavem pro kaˇzd´ y d´ılˇc´ı c´ıl hromadn´e akce. WebDAV proto zav´ad´ı odpovˇed’ 207 Multi-Status, ˇc´ımˇz oznamuje, ˇze stav proveden´ ych operac´ı je k nalezen´ı v XML tˇele odpovˇedi pro kaˇzd´ y jednotliv´ y zdroj samostatnˇe.
11
Protokol HTTP a WebDav
2.3
Exchange Store WebDAV
Exchange Store WebDAV
Cel´a specifikace protokolu WebDAV je k nalezen´ı v ofici´aln´ım [RFC2818]. V t´eto pr´aci je ovˇsem nutn´e se zamˇeˇrit na specifickou ˇca´st cel´eho dokumentu, kterou podporuje server Kerio Connect. Kerio Connect je emailov´ y server vyv´ıjen´ y spoleˇcnost´ı Kerio, kter´ y mimo jin´e poskytuje i komunikaˇcn´ı rozhran´ı se sluˇzbami WebDAV [Connect]. Motivac´ı pro implementaci WebDAV komunikaˇcn´ıho rozhran´ı byla nutnost podporovat emailov´eho klienta Entourage vyv´ıjen´eho spoleˇcnost´ı Microsoft pro operaˇcn´ı syst´em OS X. Microsoft Entourage byl souˇc´ast´ı bal´ıku Microsoft Office pro MAC a jednalo se o sourozence zn´am´eho emailov´eho klienta Microsoft Outlook. Tento klient umˇel komunikovat se serverem Microsoft Exchange a to pr´avˇe pomoc´ı protokolu WebDAV. Jak jiˇz to ˇcasto b´ yv´a a zvl´aˇstˇe u spoleˇcnosti Microsoft, komerˇcn´ı spoleˇcnost pˇrevezme ofici´aln´ı specifikaci a uprav´ı ji podle sv´ ych konkr´etn´ıch potˇreb a poˇzadavk˚ u. Tak tomu je i v pˇr´ıpadˇe implementace WebDAV produktem Microsoft Exchange. Spoleˇcnost Microsoft m´a svoji vlastn´ı ofici´aln´ı specifikaci protokolu WebDAV, kter´a p˚ uvodn´ı [RFC2818] rozˇsiˇruje o nov´e vlastnosti. Podstata protokolu z˚ ust´av´a st´ale stejn´a, ale d´ıky drobn´ ym odliˇsnostem mus´ıme vych´azet pr´avˇe z t´eto Microsoft Exchange specifikace [MSDN]. Do jist´e m´ıry limituj´ıc´ım faktorem je to, ˇze cel´a implementace komunikaˇcn´ıho rozhran´ı WebDAV produktem Kerio Connect se omezuje pouze na potˇreby emailov´eho klienta Microsoft Entourage, kter´ y vyuˇz´ıv´a jen nˇekter´e z moˇznost´ı WebDAV protokolu. Nebylo tud´ıˇz nutn´e implementovat celou specifikaci protokolu, ale pouze ty metody a vlastnosti, kter´e emailov´ y klient opravdu pouˇz´ıv´a. Komunikaˇcn´ı rozhran´ı se tedy omezuje jen na urˇcitou podmnoˇzinu a tato podmnoˇzina je v n´asleduj´ıc´ıch ˇr´adc´ıch uvedena. Vˇsechny tyto vlastnosti byly zjiˇstˇeny pˇr´ım´ ym testov´an´ım komunikaˇcn´ıho rozhran´ı produktu Kerio Connect.
2.3.1
Metoda PROPFIND
Pouˇz´ıv´a se pro z´ısk´an´ı vlastnost´ı zdroje specifikovan´eho podle URI. Vlastnosti, kter´e chceme z´ıskat, m˚ uˇzeme uv´est v XML tˇele poˇzadavku nebo uv´est z´astupnou vlastnost DAV:allprop, kter´a donut´ı server v odpovˇedi vr´atit veˇsker´e dostupn´e vlastnosti. Server vrac´ı odpovˇed’ 207, kter´a obsahuje ˇca´steˇcn´e odpovˇedi 200 pro vlastnosti existuj´ıc´ı a dostupn´e a 403 pro vlastnosti neexistuj´ıc´ı. Pouˇzit´ım hlaviˇcky Brief je moˇzn´e serveru ˇr´ıci, at’ neexistuj´ıc´ı vlastnosti vynech´a a vrac´ı pouze existuj´ıc´ı. Nav´ıc existuje speci´aln´ı vlastnost descriptor, kter´a vrac´ı tzv. security descriptor neboli bezpeˇcnostn´ı popis zdroje. Tato vlastnost je specifick´a pro kolekce a obsahuje definici pr´av, kter´ ymi skupina uˇzivatel˚ u nebo uˇzivatel disponuj´ı vzhledem k c´ılov´e kolekci [MSDN]. Hlaviˇ cka Depth Uveden´ım hlaviˇcky Depth m˚ uˇzeme vyˇza´dat kromˇe vlastnost´ı zdroje uveden´eho v URL i vlastnosti vˇsech jeho ˇclen˚ u (samozˇrejmˇe relevantn´ı pouze pro kolekce). Implicitn´ı hodnota hlaviˇcky Depth je 0“, coˇz je pouze dotazovan´ y zdroj. Explicitn´ım uveden´ım hodnoty 1“ ” ” z´ısk´ame vlastnosti veˇsker´ ych vnitˇrn´ıch ˇclen˚ u kolekce a hodnotou infinity“ vlastnosti vˇsech ” ˇclen˚ u kolekce [MSDN].
12
Protokol HTTP a WebDav
2.3.2
Exchange Store WebDAV
Metoda PROPPATCH
Metoda PROPPATCH umoˇzn ˇuje nastavit nebo odstranit vlastnosti c´ılov´eho zdroje specifikovan´eho podle URI. Vˇsechny vlastnosti jsou uvedeny v XML tˇele poˇzadavku a maj´ı pˇr´ıznak DAV:set pro nastaven´ı nebo DAV:remove pro odebr´an´ı vlastnosti z mnoˇziny vlastnost´ı. Server stejnˇe jako v pˇr´ıpadˇe PROPFIND vrac´ı odpovˇed’ 207 s ˇca´steˇcn´ ymi odpovˇedi 200 pro vlastnosti u ´spˇeˇsnˇe nastaven´e a 403 pro vlastnosti nenastaven´e (vlastnost neexistuje nebo se jedn´a o aktivn´ı vlastnost).
2.3.3
Metoda MKCOL
Metoda MKCOL vytv´aˇr´ı novou kolekci um´ıstˇenou do stromov´e struktury podle URI poˇzadavku. Server vrac´ı odpovˇed’ 207 s ˇca´steˇcnou odpovˇed´ı 200 pro u ´spˇeˇsnˇe vytvoˇrenou kolekci a 403 pro kolekci, kterou se nepodaˇrilo vytvoˇrit. Cesta ke kaˇzd´e kolekci, kterou chceme vytvoˇrit, mus´ı jiˇz existovat v dobˇe vytv´aˇren´ı. WebDAV cestu rekurzivnˇe nevytv´aˇr´ı. Pˇri vytv´aˇren´ı kolekce je vˇzdy nutn´e uv´est tˇr´ıdu kolekce, kter´a se m´a vytvoˇrit. Tˇr´ıda kolekce urˇcuje s´emantiku, s jakou se m´a s kolekc´ı v prostˇred´ı e-mailov´eho serveru a klienta pracovat. Urˇcuje napˇr´ıklad jej´ı vzhled a moˇzn´ y obsah. Kolekce se dˇel´ı celkem do pˇeti tˇr´ıd: • • • • •
IPF.Note sloˇzka e-mailov´ ych zpr´av, IPF.Contact sloˇzka obsahuj´ıc´ı kontakty, IPF.Appointment kalend´aˇr s ud´alostmi, IPF.Task sloˇzka u ´kol˚ ua IPF.StickyNote sloˇzka pozn´amek.
2.3.4
Metoda SEARCH
SEARCH je v´ yznamnou metodou zav´adˇej´ıc´ı moˇznost vyhled´avat ve zdroj´ıch dotazovac´ım jazykem SQL. Je moˇzn´e tedy napˇr´ıklad vyhledat vˇsechny kolekce nebo vˇsechny zdroje urˇcit´eho typu nebo velikosti. Metoda umoˇzn ˇuje pouˇz´ıt 2 typy vyhled´av´an´ı: • Hierarchical stromov´e vyhled´av´an´ı hled´a ve ˇclensk´ ych kolekc´ıch a • Shallow mˇelk´e vyhled´av´an´ı hled´a ve vˇsech vnitˇrn´ıch ˇclenech kolekce. Kromˇe velice efektivn´ıho zp˚ usobu vyhled´av´an´ı, je moˇzn´e z´ıskat v odpovˇedi Manifest of a Collection, coˇz je seznam zmˇen v hledan´e kolekci [MSDN]. Kaˇzd´ y nalezen´ y zdroj je oznaˇcen jedn´ım ze tˇr´ı moˇzn´ ych stav˚ u: • new zdroj byl novˇe pˇrid´an, • change vlastnost nebo obsah zdroje byly zmˇenˇeny nebo • delete zdroj byl smaz´an. K oznaˇcen´ı verze kolekce je pouˇzita nepr˚ uhledn´a textov´a zn´amka collblob. Tato zn´amka je vˇzdy obsaˇzena v odpovˇedi na metodu SEARCH a oznaˇcuje novou verzi kolekce, kterou jsme pr´avˇe odpovˇed´ı obdrˇzeli. Tuto zn´amku m˚ uˇzeme pouˇz´ıt pˇri dalˇs´ım hled´an´ı metodou SEARCH a dostaneme seznam veˇsker´ ych zmˇen, kter´e nastaly od verze oznaˇcen´e zn´amkou. Pokud pouˇzijeme zn´amku pr´azdnou, vrac´ı server vˇsechny zdroje se stavem new. 13
Protokol HTTP a WebDav
2.3.5
Exchange Store WebDAV
Metoda LOCK a UNLOCK
K e-mailov´emu serveru m˚ uˇze najednou pˇristupovat konkurenˇcnˇe v´ıce klient˚ u a proto je nutn´e pˇri vytv´aˇren´ı nebo u ´pravˇe zdroje tento zdroj explicitnˇe zamknout pomoc´ı metody LOCK a vytvoˇrit tak novou transakci. Metoda LOCK umoˇzn ˇuje zamknout i neexistuj´ıc´ı zdroj a to pro pˇr´ıpad, kdy potˇrebujeme nov´ y zdroj vytvoˇrit. Transakce se vytv´aˇr´ı pouze pro nahr´av´an´ı dokument˚ u metodou PUT a PROPPATCH, kdy pˇrenos trv´a ˇr´adovˇe d´ele neˇz u jin´ ych operac´ı jako DELETE nebo MKCOL. Transakce je vˇzdy vytvoˇrena na dobu jedn´e hodiny a po t´eto dobˇe se automaticky zruˇs´ı. Server vrac´ı odpovˇed’ 200, pokud je transakce u ´spˇeˇsnˇe vytvoˇrena, nebo 403, pokud transakci nelze vytvoˇrit nebo jin´ y z´amek je jiˇz aktivn´ı nad stejn´ ym zdrojem. V odpovˇedi je tak´e uvedena nepr˚ uhledn´a zn´amka Lock-Token identifikuj´ıc´ı transakci, kter´a se pouˇzije v hlaviˇcce If pro vˇsechny metody transakce. Transakci je moˇzn´e ukonˇcit explicitnˇe metodou UNLOCK. V XML tˇele poˇzadavku se uv´ad´ı, zda byla transakce u ´spˇeˇsnˇe provedena a zmˇeny se maj´ı zapsat (element DAV:commit) nebo transakce nebyla u ´spˇeˇsn´a a zmˇeny se maj´ı zruˇsit (element DAV:abort). Po ukonˇcen´ı transakce je z´amek uvolnˇen a jin´ y klient m˚ uˇze pˇristupovat ke stejn´emu zdroji.
2.3.6
Metoda SUBSCRIBE a POLL
Metodou SUBSCRIBE je moˇzn´e pˇrihl´asit se ke sledov´an´ı zmˇen nad kolekc´ı specifikovanou v URI poˇzadavku. T´ımto zp˚ usobem je moˇzn´e z´ıskat informace o zmˇenˇe v re´aln´em ˇcase hned, jakmile nastane. Pˇrihl´aˇsen´ı je identifikov´ano celoˇc´ıseln´ ym Subscription-ID, kter´e server vrac´ı pˇri u ´spˇeˇsn´e odpovˇedi 200. Pˇrihl´aˇsen´ı je moˇzn´e prov´est pouze na kolekce, pokud se pokus´ıme vytvoˇrit pˇrihl´aˇsen´ı na jin´ y zdroj, server odpov´ı 501. Pˇrihl´aˇsen´ı trv´a implicitnˇe jednu hodinu a pˇred uplynut´ım t´eto doby je moˇzn´e jej obnovit opˇetovn´ ym vol´an´ım metody SUBSCRIBE, ale tentokr´at s hlaviˇckou Subscription-ID obsahuj´ıc´ı identifik´ator pˇrihl´aˇsen´ı. Klient m˚ uˇze b´ yt o zmˇen´ach informov´an dvˇema zp˚ usoby: • Metodou NOTIFY Klient ozn´am´ı serveru, na kter´e URL bude ˇcekat na ozn´amen´ı zmˇeny, hlaviˇckou Call-Back, pouˇz´ıvaj´ıc´ı protokol HTTPU. Na tuto URL n´aslednˇe server pˇri kaˇzd´e zmˇenˇe zavol´a metodu NOTIFY, takˇze klient je informov´an o zmˇenˇe ihned, jakmile na stranˇe serveru nastane. Nev´ yhodou je nutnost implementace HTTP serveru na stranˇe klienta pro podporu naslouch´an´ı HTTP vol´an´ı [MSDN]. • Metodou POLL Klient se periodicky pt´a serveru metodou POLL s hlaviˇckou Subscription-ID, zda nastala zmˇena nad dan´ ym pˇrihl´aˇsen´ım. Pˇri vol´an´ı metody POLL je moˇzn´e uv´est v´ıce identifik´ator˚ u pˇrihl´aˇsen´ı. Server v u ´spˇeˇsn´e odpovˇedi 207 rozdˇel´ı identifik´atory do tˇr´ı skupin: 200 pro existuj´ıc´ı pˇrihl´aˇsen´ı se zmˇenou, 204 pro existuj´ıc´ı pˇrihl´aˇsen´ı beze zmˇeny a 403 pro neexistuj´ıc´ı pˇrihl´aˇsen´ı. Nev´ yhodou je, ˇze ozn´amen´ı o zmˇenˇe klient dostane, aˇz ve chv´ıli kdy se zept´a. To samozˇrejme m˚ uˇze b´ yt i v´ yhodou, protoˇze pr´avˇe m´a ˇcas zmˇeny obslouˇzit. Znaˇcnou v´ yhodou je jednoduchost klienta, nen´ı nutn´e implementovat HTTP server [MSDN]. Pˇrihl´aˇsen´ı je zruˇseno automaticky po uplynut´ı ˇcasov´eho limitu, pˇri zruˇsen´ı kolekce nebo je moˇzn´e jej zruˇsit explicitnˇe vol´an´ım metody UNSUBSCRIBE s hlaviˇckou SubscriptionID obsahuj´ıc´ı identifik´ator pˇrihl´aˇsen´ı. 14
Protokol HTTP a WebDav
D˚ uvody pro pouˇzit´ı WebDAV
Typy pˇ rihl´ aˇ sen´ı Metodou SUBSCRIBE je moˇzn´e pˇrihl´asit se k odbˇeru r˚ uzn´ ych typ˚ u ud´alost´ı do r˚ uzn´e hloubky pomoc´ı hlaviˇcek Depth a Notification-Type: • Hlaviˇ cka Depth stejnˇe jako v pˇr´ıpadˇe metody PROPFIND (2.3.1) umoˇzn ˇuje odeb´ırat zmˇeny pouze pro vnitˇrn´ı ˇcleny kolekce nebo pro vˇsechny ˇcleny kolekce. • Hlaviˇ cka Notification-Type specifikuje sledovanou ud´alost. E-mailov´ y server Kerio Connect podporuje celkem dva typy ud´alost´ı. Hodnotou update“ sledujeme ” zmˇeny obsahu nebo vlastnost´ı zdroj˚ u. Hodnotou delete“ sledujeme ud´alost sma” z´an´ı zdroje. Je nutn´e poznamenat, ˇze ud´alost update“ sleduje v implementaci i ud´a” lost smaz´an´ı, takˇze druh´a hodnota nen´ı potˇreba, pokud nechceme sledovat pouze odstranˇen´ı zdroje.
2.4
D˚ uvody pro pouˇ zit´ı WebDAV
• Standard WebDAV je velice dobˇre popsan´ y a jednoznaˇcn´ y standard provˇeˇren´ y mnoha pouˇzit´ımi. Je to jedna z v´ yhod pro pouˇzit´ı protokolu WebDAV. Jak´ ykoliv jin´ y emailov´ y server bude moˇzn´e synchronizovat pomoc´ı protokolu WebDAV, pokud bude server toto komunikaˇcn´ı rozhran´ı implementovat. A i kdyˇz se jedn´a o pouˇzit´ı standardu od spoleˇcnosti Microsoft, st´ale se jedn´a pouze o nadmnoˇzinu ofici´aln´ıho standardu RFC 4918. • Pouˇ zit´ı HTTP Bez protokolu HTTP se ˇza´dn´ y dneˇsn´ı standardn´ı poˇc´ıtaˇc nem˚ uˇze obej´ıt, jelikoˇz by ˇz´adn´ y z uˇzivatel˚ u nemohl prohl´ıˇzet webov´e str´anky. Proto je tento protokol zaveden jako standardn´ı ve veˇsker´ ych firewallech, port 80 nen´ı blokov´an a nen´ı nutn´e pro nˇej nastavovat specifick´a pravidla. • Bezpeˇ cnost Protokol HTTP umoˇzn ˇuje ˇsifrovanou komunikaci pˇrid´an´ım SSL vrstvy s v´ ymˇenou certifik´at˚ u, ˇc´ımˇz vznikne jeho zabezpeˇcen´a varianta HTTPS. Je proto moˇzn´e m´ısto standardn´ıho textov´eho form´atu pos´ılat data zaˇsifrovanˇe bez jak´ekoliv nutnosti zmˇenit komunikaˇcn´ı protokol. Nav´ıc se opˇet jedn´a o standardn´ı protokol na portu 443, kter´ y nen´ı blokov´an. • Komprimace Protokol HTTP umoˇzn ˇuje pˇren´aˇsen komprimovan´a data, ˇc´ımˇz je moˇzn´e znaˇcnˇe ulehˇcit komunikaˇcn´ımu m´ediu pˇri pˇrenosu dat. • Podpora replikace Jak bude uvedeno d´ale, rozˇs´ıˇren´ı WebDAV od spoleˇcnosti Microsoft v sobˇe pˇr´ımo zahrnuje podporu replikace dat mezi servery. Takˇze kromˇe Manifest of a Collection jsou k dispozici dalˇs´ı data pom´ahaj´ıc´ı pˇri replikaci. • Kerio Connect Nejvˇetˇs´ım d˚ uvodem pro pouˇzit´ı WebDAV je ovˇsem existence otestovan´eho a funkˇcn´ıho komunikaˇcn´ıho rozhran´ı v produktu Kerio Connect. Nen´ı tedy nutn´e pro synchronizaci emailov´ ych server˚ u mˇenit produkt Kerio Connect, ale pouze pouˇz´ıt toto rozhran´ı.
15
3 Replikace Replikace dat udrˇzuje v´ıcen´asobn´e kopie dat, naz´ yvan´e repliky, na oddˇelen´ ych poˇc´ıtaˇc´ıch. Tato velice d˚ uleˇzit´a technologie umoˇzn ˇuje existenci distribuovan´ ych sluˇzeb. Replikace zvyˇsuje dostupnost a propustnost, jelikoˇz data jsou uloˇzena ve v´ıcen´asobn´ ych kopi´ıch, ke kter´ ym lze pˇristupovat najednou a oddˇelenˇe [Saito].
3.1
Konzistence
Hlavn´ım c´ılem vˇsech replikaˇcn´ıch technik a algoritm˚ u je udrˇzovat konzistenci dat [Saito]. Konzistence jsou pravidla, kter´a mus´ı replikaˇcn´ı algoritmus dodrˇzovat pro udrˇzen´ı vˇsech replik v konzistentn´ım stavu. Model konzistence definuje, za jak dlouho budou zmˇeny dostupn´e na ostatn´ıch replik´ach nebo v jak´em poˇrad´ı se prov´ad´ı operace. Model˚ u konzistence existuje cel´a ˇrada, liˇs´ı se pˇredevˇs´ım ve striktnosti pravidel. N´asleduj´ıc´ı text uv´ad´ı pro pˇredstavu dva v´ yraznˇe odliˇsn´e modely: • Striktn´ı konzistence znamen´a, ˇze aby mohla b´ yt libovoln´a zmˇena na jedn´e z replik u ´spˇeˇsn´a, je nutn´e, aby tato zmˇena byla okamˇzitˇe zreplikov´ana na vˇsech ostatn´ıch replik´ach. Jakmile je obdrˇzeno potvrzen´ı o u ´spˇeˇsn´em proveden´ı na vˇsech replik´ach, je i volaj´ıc´ı operace u ´spˇeˇsn´a. Jedin´ ym moˇzn´ ym zp˚ usobem jak t´eto konzistence dos´ahnout je pouˇzit´ı z´amk˚ u a vˇsechny repliky v dobˇe aktualizace uzamknout, coˇz m´a samozˇrejmˇe fat´aln´ı dopad na propustnost syst´emu. • Eventual consistency neform´alnˇe znamen´a, ˇze vˇsechny repliky nakonec (z angl. eventually) dos´ahnou koneˇcn´eho stejn´eho stavu, pokud uˇzivatel pˇrestane vytv´aˇret nov´e operace [Saito]. Tento model striktnˇe nepˇredepisuje, kdy maj´ı repliky dos´ahnout stejn´eho stavu, jen ˇr´ık´a, ˇze ho nakonec mus´ı dos´ahnout. V dneˇsn´ı dobˇe se jedn´a o velmi popul´arn´ı koncept u syst´em˚ u s optimistickou replikac´ı (viz sekce 3.3), syst´emy jsou jednoduˇsˇs´ı a l´epe ˇsk´alovateln´e. Tento koncept pouˇz´ıv´a napˇr´ıklad Google File System [Ghemawat].
3.2
Pesimistick´ a replikace
Tradiˇcn´ı technikou replikace je udrˇzov´an´ı jedn´e prim´arn´ı kopie na prim´arn´ım serveru v distribuovan´em syst´emu. Prim´arn´ı replika zpracov´av´a veˇsker´e poˇzadavky na zmˇenu dat. Jakmile je zmˇena provedena, je asynchronnˇe zreplikov´ana na ostatn´ı, sekund´arn´ı repliky. V dobˇe, kdy jsou data na sekund´arn´ıch replik´ach neaktu´aln´ı, je pˇr´ıstup k nim blokov´an. Pokud prim´arn´ı kopie vypadne, ostatn´ı repliky si zvol´ı novou prim´arn´ı kopii a syst´em funguje d´ale. Tato technika se naz´ yv´a pesimistick´a replikace“ [Saito]. ” Pesimistick´a technika je jednoduch´a a nemus´ı ˇreˇsit ˇza´dn´e konflikty, jelikoˇz veˇsker´e aktualizace se prov´ad´ı vˇzdy nad aktu´aln´ımi daty. Tato technika funguje dobˇre na lok´aln´ıch s´ıt´ıch, kde latence mezi replikami je mal´a a v´ ypadky nepravdˇepodobn´e. Nem˚ uˇzeme od n´ı ovˇsem oˇcek´avat dobr´e v´ ykony v prostˇred´ı internetu, s vysokou latenc´ı, malou propustnost´ı a ˇcast´ ymi v´ ypadky. Propagace zmˇen na sekund´arn´ı repliky je pomal´a a propustnost v´ yznamnˇe kles´a, d´ıky blokov´an´ı neaktu´aln´ıch dat. Nav´ıc je zde velk´a pravdˇepodobnost ztr´aty 16
Replikace
Optimistick´a replikace
dat pˇri v´ ypadku prim´arn´ı kopie, pokud se zmˇeny nestaˇc´ı zreplikovat na sekund´arn´ı repliky. Je velice tˇeˇzk´e vytvoˇrit syst´em s pesimistickou replikac´ı v prostˇred´ı internetu s ˇcastou potˇrebou z´apis˚ u, jelikoˇz jeho propustnost dramaticky kles´a s nar˚ ustaj´ıc´ım poˇctem uˇzivatel˚ u. V tomto prostˇred´ı nalezne vyuˇzit´ı replikace optimistick´a [Saito].
3.3
Optimistick´ a replikace
Kl´ıˇcovou myˇslenkou pro optimistickou replikaci je povolit pˇr´ıstup pro z´apis na libovoln´e replice bez dˇr´ıvˇejˇs´ı synchronizace a optimisticky pˇredpokl´adat, ˇze konflikt v´ıce z´apis˚ u do jednoho objektu nastane velice vz´acnˇe, pokud v˚ ubec kdy nastane. Vˇsechny proveden´e zmˇeny jsou propagov´any na pozad´ı, a pokud v´ıcen´asobn´ y z´apis do jednoho objektu nastane, je konflikt vyˇreˇsen bˇehem synchronizace [Saito]. Optimistick´a replikace nab´ız´ı mnoho v´ yhod. Dostupnost dat se zv´ yˇs´ı a data jsou zpracov´av´ana i pˇri v´ ypadku libovoln´e repliky. Umoˇzn ˇuje asynchronn´ı spolupr´aci mezi v´ıce uˇzivateli. Repliky z˚ ust´avaj´ı st´ale autonomn´ı a nez´avisl´e na prim´arn´ı replice [Saito]. Oproti pesimistick´e replikaci je vˇsak nutn´e ˇreˇsit konflikty. Tam kde pesimistick´a replikace ˇcek´a na aktu´aln´ı data, optimistick´a replikace mus´ı h´adat jak vyˇreˇsit konflikt mezi konkurentn´ımi operacemi. Takˇze je pouˇziteln´a pouze pro syst´emy, kter´e toleruj´ı obˇcasn´e konflikty a nekonzistentn´ı data. Optimistickou replikaci pouˇz´ıvaj´ı napˇr´ıklad syst´emy DNS, CVS a SVN.
3.3.1
Single-master
V distribuovan´em prostˇred´ı je ˇcasto mnohem sloˇzitˇejˇs´ı probl´em distribuovan´eho algoritmu pˇreveden na jednoduˇsˇs´ı algoritmus centralizovan´ y napˇr´ıklad proveden´ım distribuovan´eho v´ ybˇeru 1 z N pro zvolen´ı centr´aln´ıho prvku. Stejnˇe je tomu i v pˇr´ıpadˇe architektury singlemaster. Syst´em st´ale dovoluje z´apis do vˇsech replik, ale za pl´anov´an´ı poˇrad´ı operac´ı a ˇreˇsen´ı konflikt˚ u je zodpovˇedn´ y pouze jedin´ y uzel, tzv. master“. Master pˇrij´ım´a operace ” od ostatn´ıch replik a po vhodn´em napl´anov´an´ı odeˇsle operace ostatn´ım replik´am. Syst´em je podstatnˇe jednoduˇs´ı, jelikoˇz konflikty jsou ˇreˇseny centralizovanˇe a poˇrad´ı urˇcuje pouze jeden uzel. Pokud tento uzel vypadne, je zvolen nov´ y uzel opˇet pouˇzit´ım algoritmu v´ ybˇeru 1 z N. Nev´ yhodou je samozˇrejmˇe omezen´a propustnost pˇri velk´em poˇctu operac´ı, ale syst´em nen´ı blokov´an jako u pesimistick´e replikace.
3.3.2
Multi-master
Naproti tomu existuj´ı syst´emy multi-master, kde nˇekolik nebo vˇsechny repliky syst´emu rozhoduj´ı o poˇrad´ı operac´ı. Replika odeˇsle operaci, kter´a na n´ı byla vykon´ana, ostatn´ım replik´am. Pokud se na tˇechto replik´ach neprov´adˇela ve stejnou dobu konfliktn´ı operace, je operace u ´spˇeˇsnˇe provedena. Pokud ovˇsem konfliktn´ı operace probˇehla, je nutn´e napl´anovat na vˇsech replik´ach spr´avn´e a hlavnˇe stejn´e poˇrad´ı operac´ı, aby byla udrˇzena konzistence. Syst´em mus´ı tedy disponovat algoritmem shody (z angl. commitment protocol), kter´ ym se repliky shodnou na spoleˇcn´em v´ ysledku prov´adˇen´ı operac´ı [Saito]. To s sebou ovˇsem pˇrin´aˇs´ı velkou reˇzii pˇri vysok´em poˇctu konfliktn´ıch operac´ı. Na druhou stranu, pokud syst´em nepˇredpokl´ad´a vysok´ y poˇcet konflikt˚ u, je tato architektura mnohem v´ ykonnˇejˇs´ı a ˇsk´alova-
17
Replikace
Soubˇeˇznost operac´ı
teln´a, d´ıky chybˇej´ıc´ımu u ´zk´emu m´ıstu jako v architektuˇre single-master. Pro optimalizaci reˇzie je tak´e moˇzn´e zvolit r˚ uzn´ y poˇcet master˚ u.
3.4
Soubˇ eˇ znost operac´ı
Optimistick´a replikace pˇrin´aˇs´ı jiˇz zm´ınˇenou komplikaci v podobˇe nutnosti detekovat a ˇreˇsit ´ konflikty vznikl´e z´apisem do stejn´eho objektu na r˚ uzn´ ych replik´ach. Ukolem syst´emu je napl´anov´an´ı, seˇrazen´ı a detekce konflikt˚ u tˇechto operac´ı tak, aby v´ ysledkem byl opˇet konzistentn´ı stav. Syst´em ovˇsem nen´ı schopn´ y spr´avnˇe seˇradit a napl´anovat operace, pokud nezn´a jejich vz´ajemn´e poˇrad´ı, tzv. happened-before relaci [Lamport]. Bohuˇzel v distribuovan´em prostˇred´ı, ve kter´em komunikaˇcn´ı zpoˇzdˇen´ı je nepˇredv´ıdateln´e, nem˚ uˇzeme jednoduˇse urˇcit poˇrad´ı ud´alost´ı podle poˇrad´ı pˇr´ıchodu, jako je tomu u bˇeˇzn´ ych aplikac´ı. Pˇredstavme si dvˇe operace α a β, kter´e mohli vzniknout na jedn´e z replik i nebo j. Operace α nastala pˇred operac´ı β (α happened before β), pr´avˇe kdyˇz: • i = j a operace α nastala pˇred operac´ı β (operace se ud´aly na stejn´e replice v jin´ y ˇcasov´ y okamˇzik) nebo • i 6= j a β nastala aˇz pot´e, co j obdrˇzela a vykonala operaci α, nebo • existuje jin´a operace γ, kdy α pˇredch´az´ı γ a γ pˇredch´az´ı β. Pokud ani jedna z tˇechto podm´ınek nen´ı splnˇena, nen´ı moˇzn´e jednoduˇse urˇcit happenedbefore relaci a obˇe operace jsou povaˇzov´any za soubˇ eˇ zn´ e [Lamport]. Existuj´ı dvˇe z´akladn´ı skupiny technik k urˇcen´ı poˇrad´ı a pl´anov´an´ı operac´ı, a to syntaktick´e a s´emantick´e. Syntaktick´e pl´anov´an´ı urˇcuje v´ ysledn´e poˇrad´ı operac´ı z ˇcasu a m´ısta vzniku dan´e operace. Naproti tomu s´emantick´e pl´anov´an´ı vyuˇz´ıv´a s´emantiku operac´ı.
3.4.1
Syntaktick´ e pl´ anovaˇ ce
Syntaktick´ y pl´anovaˇc urˇcuje poˇrad´ı operac´ı pouze na z´akladˇe informace kdy, kde a k´ ym byla operace vytvoˇrena [Saito]. Syntaktick´e pl´anovaˇce jsou jednoduch´e a obecn´e, ale mohou vyvolat zbyteˇcn´e konflikty. Uvaˇzujme napˇr´ıklad syst´em pro rezervaci dataprojektor˚ u, kde n´asleduj´ıc´ı tˇri operace vzniknou soubˇeˇznˇe: uˇzivatel A si vyp˚ ujˇc´ı projektor (1), uˇzivatel B si vyp˚ ujˇc´ı projektor (2) a uˇzivatel C vr´at´ı projektor (3). Syntaktick´ y pl´anovaˇc tyto operace napl´anuje v poˇrad´ı vzniku, tedy 1,2 a 3, coˇz znamen´a, ˇze operace 2 se nezdaˇr´ı, jelikoˇz projektor je jiˇz vyp˚ ujˇcen. Typick´ ym pˇr´ıkladem syntaktick´eho pl´anovaˇce jsou ˇcasov´e znaˇcky. Re´ aln´ e hodiny Nejjednoduˇsˇs´ı technikou pro urˇcen´ı happened-before relace je pouˇzit´ı hodin re´aln´eho ˇcasu. Kaˇzd´a z replik t´ımto ˇcasem disponuje a jednoduˇse ho uvede v operaci. Porovn´an´ı tˇechto ˇcas˚ u mezi replikami je ovˇsem smˇerodatn´e pouze pokud jsou hodiny na vˇsech replik´ach spr´avnˇe synchronizov´any. Kupˇr´ıkladu mˇejme dvˇe operace, α na replice i a β na replice j.
18
Replikace
Soubˇeˇznost operac´ı
ˇ operace β m˚ Cas uˇze st´ale pˇredch´azet ˇcas operace α, i kdyˇz j jiˇz d´avno operaci α pˇrijalo, jelikoˇz hodiny j m˚ uˇzou b´ yt o hodnˇe pozadu oproti i. Tento probl´em ovˇsem nen´ı neˇreˇsiteln´ y. V dneˇsn´ı dobˇe je velkou snahou pr´avˇe spr´avn´a synchronizace ˇcas˚ u v distribuovan´em prostˇred´ı. Existuje napˇr´ıklad modern´ı algoritmus NTP (Network Time Protocol), kter´ y dok´aˇze udrˇzet synchronizaci hodin s pˇresnost´ı ˇ na des´ıtky milisekund s t´emˇeˇr zanedbateln´ ymi n´aklady [Saito]. Casy replik tak m˚ uˇzou b´ yt dostateˇcnˇe pˇresn´e pro urˇcen´ı vˇetˇsiny happened-before relac´ı. Logick´ e hodiny Logick´e hodiny, naz´ yvan´e tak´e Lamportovy hodiny, jsou rostouc´ı skal´arn´ı ˇcasov´a znaˇcka udrˇzovan´a na kaˇzd´e jednotliv´e replice [Lamport]. Ve chv´ıli, kdy je provedena operace α, replika zv´ yˇs´ı svoji ˇcasovou znaˇcku a pˇriˇrad´ı novou hodnotu k operaci α. Tato hodnota se oznaˇcuje Cα . Replika pˇrij´ımaj´ıc´ı operaci od jin´e repliky zmˇen´ı svoji ˇcasovou znaˇcku tak, aby byla vyˇsˇs´ı neˇz ˇcasov´a znaˇcka pˇr´ıchoz´ı operace a z´aroveˇ n vyˇsˇs´ı neˇz aktu´aln´ı hodnota logick´ ych hodin. Pokud tedy operace α nastala pˇred operac´ı β mus´ı platit, ˇze Cα < Cβ . Bohuˇzel logick´e hodiny (ani jin´e skal´arn´ı hodiny) nemohou detekovat soubˇeˇznost, jelikoˇz Cα < Cβ nutnˇe neznamen´a, ˇze operace α nastala pˇred operac´ı β [Lamport]. Vektorov´ e hodiny Vektorov´e hodiny jsou rozˇs´ıˇren´ım klasick´ ych logick´ ych hodin a je dok´az´ano, ˇze jsou nejmenˇs´ı datovou strukturou pro pˇresn´e mˇeˇren´ı happened-before relace [Saito]. Vektorov´e hodiny jsou datov´a struktura V Ci uloˇzen´a na replice i obsahuj´ıc´ı M logick´ ych hodin, kde M je poˇcet master replik, ˇcili obsahuje informace o logick´ ych hodin´ach vˇsech master replik. Pˇri proveden´ı nov´e operace α jsou nav´ yˇseny pouze logick´e hodiny dan´e repliky V Ci [i] a k operaci je pˇriˇrazena nov´a hodnota V Ci . Replika pˇrij´ımaj´ıc´ı operaci zamˇen´ı logick´e hodiny pro repliku, na kter´e operace nastala, za pˇrijatou hodnotu a zv´ yˇs´ı svoje logick´e hodiny. Na z´akladˇe v´ yˇse uveden´eho principu m˚ uˇzeme urˇcit, ˇze operace α nastala pˇred operac´ı β pr´avˇe tehdy, jsou-li vektorov´e hodiny rozd´ıln´e a z´aroveˇ n vˇsechny logick´e hodiny V Cα jsou rovny nebo menˇs´ı neˇz logick´e hodiny V Cβ pro stejn´e pozice, neboli V Cα je dominantn´ı nad V Cβ . Pokud ani jedna z vektorov´ ych hodin nen´ı dominantn´ı, jsou operace soubˇeˇzn´e. Pokud V Ci [j] = t, replika i pˇrijala veˇsker´e operace od j do logick´eho ˇcasu t [Lamport]. Obecn´ ym probl´emem vektorov´ ych hodin je jejich velikost pro velk´ y poˇcet master replik [Saito].
3.4.2
S´ emantick´ e pl´ anovaˇ ce
S´emantick´e pl´anov´an´ı uvaˇzuje s´emantick´e relace mezi jednotliv´ ymi operacemi, ˇcili zkoum´a operace do hloubky a zjiˇst’uje napˇr´ıklad jejich komutativitu nebo idempotenci. Pokud pouˇzijeme s´emantick´e pl´anov´an´ı na pˇr´ıklad vyp˚ ujˇcen´ı dataprojektor˚ u ze sekce 3.4.1, s´emantick´ y pl´anovaˇc tyto operace napl´anuje v poˇrad´ı 1, 3 a 2, ˇcili vˇsechny operace se zdaˇr´ı. S´emantick´e pl´anov´an´ı se pouˇz´ıv´a bud’to samostatnˇe nebo v kombinaci s happened-before relac´ı urˇcenou syntaktickou metodou, kdy syntaktick´e pl´anov´an´ı nem˚ uˇze jiˇz d´ale rozhodnout, jelikoˇz se jedn´a napˇr´ıklad o soubˇeˇzn´e operace [Saito]. S´emantick´e pl´anovaˇce jsou ˇcasto aplikaˇcnˇe specifick´e a v´ ypoˇcetnˇe n´aroˇcn´e na rozd´ıl od obecn´ ych syntaktick´ ych pl´anovaˇc˚ u. 19
Replikace
Soubˇeˇznost operac´ı
Komutativita Pokud dvˇe po sobˇe jdouc´ı operace α a β jsou navz´ajem komutativn´ı, mohou b´ yt provedeny v libovoln´em poˇrad´ı, i kdyˇz nezachovaj´ı happened-before relaci, jelikoˇz tyto operace jsou na sobˇe nez´avisl´e [Saito]. Bˇeˇzn´ ym pˇr´ıkladem je operace z´apisu do dvou nez´avisl´ ych objekt˚ u. D´ıky tomu nemus´ıme prov´adˇet rollback pokaˇzd´e, kdyˇz obdrˇz´ıme komutativn´ı operaci mimo poˇrad´ı. Kanonick´ e poˇ rad´ı Ramsey a Csirmaz [Ramsey] definovali s´emantick´a pravidla pro ˇrazen´ı operac´ı v souborov´em syst´emu. Nesoubˇeˇzn´e operace jsou ˇrazeny podle syntaktick´e happened-before relace a pro kaˇzd´ y moˇzn´ y p´ar soubˇeˇzn´ ych operac´ı jsou definov´ana pravidla, kter´a ˇr´ıkaj´ı, jak je moˇzn´e dan´e operace seˇradit. Mˇejme napˇr´ıklad operaci vytvoˇren´ı dvou soubor˚ u a/b a a/c. Tyto operace mohou b´ yt provedeny v libovoln´em poˇrad´ı, i kdyˇz modifikuj´ı spoleˇcn´ y objekt - sloˇzku a. Jako dalˇs´ı pˇr´ıklad m˚ uˇzeme uv´est operace smaz´an´ı a modifikace stejn´eho souboru. Tyto operace jsou oznaˇceny jako konfliktn´ı a uˇzivatel je vyzv´an k jeho vyˇreˇsen´ı. Ramsey a Csirmaz ve sv´em souborov´em syst´emu uvaˇzuj´ı pouze tˇri operace create, remove a edit, kdy napˇr´ıklad neuvaˇzuj´ı operaci move, kter´a by znaˇcnˇe syst´em zkomplikovala, jelikoˇz pracuje celkem se tˇremi objekty - dva adres´aˇre a jeden soubor. I pˇresto bylo vˇsak nutn´e specifikovat celkem 36 pravidel, s kter´ ymi dok´azali, ˇze repliky pouˇz´ıvaj´ıc´ı tento syst´em z˚ ust´avaj´ı konzistentn´ı [Ramsey]. Transformace operac´ı Transformace operac´ı je technika vyvinut´a pro umoˇznˇen´ı spolupr´ace v´ıce editor˚ u [Saito]. Editor uprav´ı text objektu na lok´aln´ı replice a tato opearace (pˇrid´an´ı nebo smaz´an´ı textu) je propagov´ana na ostatn´ı repliky ve formˇe pˇr´ıkazu - delete(x) nebo insert(y). Ostatn´ı repliky prov´adˇej´ı pˇr´ıchoz´ı operace v poˇrad´ı jejich pˇr´ıjmu. Z ˇcehoˇz vypl´ yv´a, ˇze dvˇe repliky mohou vykonat stejn´e pˇr´ıkazy v jin´em poˇrad´ı. Pro kaˇzd´ y takov´ y moˇzn´ y p´ar operac´ı jsou definov´ana transformaˇcn´ı pravidla, kter´a pˇr´ıchoz´ı pˇr´ıkaz pˇrep´ıˇs´ı tak, aby v´ ysledek operace byl stejn´ y, i kdyˇz je proveden v jin´em poˇrad´ı. Mˇejme napˇr´ıklad text abc“ sd´ılen´ y mezi dvˇema editory na replik´ach i a j. Editor ” na replice i provede pˇrid´an´ı X“ na zaˇca´tek textu - insert(X) - a operace je odesl´ana ” na repliku j. Editor na replice j provede smaz´an´ı prvn´ıho znaku - delete(1) - a stejnˇe tak odeˇsle operaci na repliku i. Pokud bychom nepouˇzili transformaci operac´ı, dostali bychom na replice j spr´avn´ y ˇretˇezec Xbc“, ale na replice i nespr´avn´ y ˇretˇezec abc“, jelikoˇz operace ” ” smazala prvn´ı znak m´ısto znaku a“. S pouˇzit´ım transformac´ı dojde k pˇreps´an´ı operace ” delete(1) na delete(2) a obˇe repliky z˚ ust´avaj´ı konzistentn´ı. Syst´emem tˇechto pˇrepisovac´ıch pravidel se zab´ yv´a napˇr´ıkald studie A Calculus for Concurrent Update [Cormack]. Existuj´ı i varianty pro pouˇzit´ı v tabulkov´ ych editorem nebo souborov´ ych syst´emech [Saito]. Tato s´emantick´a technika i pˇresto, ˇze je nutn´e definovat velice sloˇzit´a pˇrepisovac´ı pravidla i pro jednoduch´e operace, pˇrin´aˇs´ı obrovskou v´ yhodu - nen´ı nutn´e na jiˇz aplikovan´e operace prov´adˇet rollback a modifikace objekt˚ u tak prob´ıh´a pouze smˇerem dopˇredu.
20
Replikace
Zpracov´an´ı konflikt˚ u
Optimalizaˇ cn´ı pˇ r´ıstup Jednou ze sofistikovan´ ych metod pro s´emantick´e ˇrazen´ı je pˇreveden´ı tohoto probl´emu na probl´em optimalizaˇcn´ı [Preguica]. Operace v t´eto metodˇe jsou navz´ajem podm´ınˇen´e. Metoda podporuje nˇekolik r˚ uzn´ ych podm´ınek a mimo jin´e napˇr´ıklad i z´avislost (operace α mus´ı b´ yt provedena po operaci β), implikaci (pokud je provedena operace α, je provedena i operace β) a v´ ybˇer (jedna z operac´ı α nebo β bude provedena, ale nikdy obˇe). Napˇr´ıklad uˇzivatel m˚ uˇze prov´est rezervaci m´ıstnosti A nebo B (v´ ybˇer), pokud m´a rezervovanou m´ıstnost, mus´ı si vyp˚ ujˇcit dataprojektor (implikace), ale pouze pokud m´a dostatek kredit˚ u (z´avislost). Metoda se k tˇemto operac´ım chov´a jako k optimalizaˇcn´ımu probl´emu, kdy se snaˇz´ı napl´anovat nejlepˇs´ı poˇrad´ı operac´ı pro uspokojen´ı podm´ınek. Implementaci t´eto metody pouˇz´ıv´a napˇr´ıklad syst´em IceCube, kter´ y d´ıky efektivn´ımu hillclimbing algoritmu dok´aˇze seˇradit 10.000 operac´ı bˇehem pouh´ ych 3 sekund, i kdyˇz je optimalizace NP-tˇeˇzk´ ym probl´emem [Preguica].
3.5
Zpracov´ an´ı konflikt˚ u
Operace α je konfliktn´ı, pokud jej´ı pˇredpoklady nejsou splnˇeny. Nejlepˇs´ım pˇr´ıstupem je vzniku konflikt˚ u zabr´anit u ´plnˇe - tzv. prevence. Syst´emy s pesimistickou replikac´ı konflikt˚ um zabraˇ nuj´ı zablokov´an´ım nebo zruˇsen´ım operac´ı. Bohuˇzel toto ˇreˇsen´ı m´a velkou nev´ yhodu v tom, ˇze sniˇzuje propustnost syst´em, jak je pops´ano v sekci 3.2. Nˇekter´e syst´emy konflikty dokonce ignoruj´ı. Jak´akoliv operace, kter´a by mohla b´ yt konfliktn´ı, je jednoduˇse pˇreps´ana novˇejˇs´ı operac´ı jako napˇr´ıklad v pˇr´ıpadˇe pouˇzit´ı Thomas write rule algoritmu [Thomas]. Tyto ztracen´e operace mohou b´ yt nepodstatn´e, pokud je jejich poˇcet zanedbateln´ y nebo pokud se uˇzivatel tˇemto operac´ım dobrovolnˇe vyhne [Saito]. Dalˇs´ım moˇzn´ ym zp˚ usobem, kter´ y je moˇzn´e kombinovat s jin´ ymi, je poˇcet konflikt˚ u redukovat ˇcastou aktualizac´ı replik mezi sebou nebo rozdˇelen´ım operac´ı na menˇs´ı ˇc´asti, ˇc´ımˇz se podstatnˇe sn´ıˇz´ı pravdˇepodobnost v´ yskytu konfliktn´ıch operac´ı [Saito]. Nejˇcastˇejˇs´ım zp˚ usobem zpracov´an´ı konflikt˚ u je vˇsak jejich vznik povolit a n´aslednˇe je detekovat a odstranit. Takov´e syst´emy jsou daleko uˇzivatelsky hodnotnˇejˇs´ı, neˇz syst´emy, kter´e konflikty ignoruj´ı, jelikoˇz nedoch´az´ı ke ztr´at´am konfliktn´ıch operac´ı. Metody pro detekci koliz´ı se stejnˇe jako u metod pl´anov´an´ı dˇel´ı do dvou skupin - syntaktick´e a s´emantick´e. Syntaktick´e metody vyuˇz´ıvaj´ı happened-before relaci nebo nˇekterou jej´ı aproximaci k oznaˇcen´ı konflikt˚ u. Nejˇcastˇeji to znamen´a, ˇze pokud jsou operace soubˇeˇzn´e, jedna z nich je konfliktn´ı. S´emantick´ y pˇr´ıstup vyuˇz´ıv´a znalosti s´emantiky operac´ı k detekci koliz´ı. Napˇr´ıklad v pˇr´ıpadˇe souborov´eho syst´emu je vytvoˇren´ı dvou nez´avisl´ ych soubor˚ u soubˇeˇznˇe nekonfliktn´ı, ale aktualizace stejn´eho adres´aˇre jiˇz konfliktn´ı je [Saito]. Opˇet ovˇsem plat´ı, ˇze s´emantick´e metody jsou ˇcasto aplikaˇcnˇe specifick´e, protoˇze mus´ı zn´at s´emantiku vˇsech operac´ı. C´ılem metod pro odstranˇen´ı konfliktu je pˇreps´an´ı nebo zruˇsen´ı konfliktn´ı operace tak, aby byl konflikt odstranˇen. Odstranˇen´ı konflikt˚ u m˚ uˇze b´ yt provedeno bud’ automaticky, nebo manu´alnˇe. Manu´aln´ı odstranˇen´ı konflikt˚ u jednoduˇse neprovede konfliktn´ı operaci, ale vytvoˇr´ı dvˇe nov´e verze objektu. Prvn´ı verze objektu bez proveden´e operace a druh´a verze objektu s provedenou operac´ı. Uˇzivatel mus´ı n´aslednˇe z tˇechto verz´ı jednu vybrat, konflikt vyˇreˇsit a odeslat spr´avnou verzi na ostatn´ı repliky. Automatick´e vyˇreˇsen´ı konflikt˚ u je aplikaˇcnˇe specifick´e a jedn´a se v podstatˇe o shodn´ y postup jako v pˇr´ıpadˇe manu´aln´ıho 21
Replikace
Synchronizace replik
odstranˇen´ı konfliktu. Metoda pˇrij´ım´a dva objekty, kter´e slouˇc´ı, a vrac´ı nov´ y objekt, kter´ y ˇ je odesl´an na ostatn´ı repliky [Saito]. Casto jsou v syst´emech pouˇzity oba pˇr´ıstupy. Napˇr´ıklad syst´em SVN se snaˇz´ı automaticky vyˇreˇsit konflikty v souborech a pokud nem˚ uˇze rozhodnout, je vyzv´an uˇzivatel, aby konflikt vyˇreˇsil manu´alnˇe.
3.6
Synchronizace replik
V sekc´ıch 3.5 a 3.4 byly uvedeny kl´ıˇcov´e techniky v prostˇred´ı distribuovan´eho syst´emu replik, nyn´ı je ˇcas uv´est, jak se zm´ınˇen´e techniky vyuˇz´ıvaj´ı pro synchronizaci. Synchronizace se dˇel´ı podle typu syst´emu do dvou skupin - state-transfer a operation-transfer. State-transfer syst´emy pˇren´aˇsej´ı mezi replikami cel´e pozmˇenˇen´e objekty, kdeˇzto operationtransfer syst´emy pˇren´aˇsej´ı pouze operace, kter´e zmˇeny zp˚ usobily. Je moˇzn´e se na statetransfer syst´em d´ıvat jako na operation-transfer pouze se tˇremi operacemi - ˇcten´ı, z´apis a smaz´an´ı cel´eho objektu. State-transfer syst´emy jsou jednoduch´e, protoˇze udrˇzov´an´ı konzistence znamen´a odesl´an´ı cel´eho nov´eho objektu na ostatn´ı repliky. Operation-transfer syst´em naproti tomu mus´ı udrˇzovat historii operac´ı a dohodnout se na jejich spoleˇcn´em poˇrad´ı s ostatn´ımi. Na druhou stranu tyto syst´emy jsou mnohem efektivnˇejˇs´ı, hlavnˇe v pˇr´ıpadˇe, kdy objekty jsou velk´e a operace vysoko´ urovˇ nov´e. State-transfer syst´em mus´ı pˇri zmˇenˇe jednoho bitu pˇren´est cel´ y objekt, operation-transfer pouze danou operaci [Saito]. WebDAV protokol je state-transfer syst´em, protoˇze se omezuje na tˇri operace s cel´ ymi objekty - z´apis metodou PUT, ˇcten´ı metodou GET a smaz´an´ı metodou DELETE. Nebudeme se tedy d´ale zab´ yvat sloˇzit´ ymi operation-transfer, ale pouze jednoduch´ ymi state-transfer syst´emy.
3.6.1
Pomal´ a synchronizace
Pˇri prvotn´ım propojen´ı v´ıce replik do jednoho syst´emu je nejdˇr´ıve nutn´e prov´est tzv. pomalou synchronizaci. Tedy pˇren´est vˇsechny objekty mezi vˇsemi replikami a sp´arovat je pro pozdˇejˇs´ı zmˇenovou synchronizaci. Pokud se jedn´a o vytvoˇren´ı pr´azdn´eho syst´emu, nen´ı pomal´a synchronizace nutn´a, jelikoˇz nejsou ˇz´adn´e objekty, kter´e je nutn´e pˇren´est. Probl´em ovˇsem nast´av´a, pokud se jedn´a o propojen´ı v´ıce replik po v´ ypadku nebo vynucen´ı pomal´e synchronizace uˇzivatelem. Mˇejme objekt αi na replice i a jeho kopii βj na replice j. Oba tyto objekty jsou shodn´e a byly pˇred vynucen´ım pomal´e synchronizace synchronizov´any proti sobˇe. U naivn´ı implementace by se vytvoˇrili nov´e kopie αj na replice j a βi na repliace i, coˇz vede k nevyˇz´adan´e duplikaci objekt˚ u. C´ılem je tedy tyto objekty i po v´ ypadku sp´arovat, aby se opˇet chovaly jako jeden objekt. Standardn´ı metodou je pouˇzit´ı unik´atn´ıho identifik´atoru pro oznaˇcen´ı objekt˚ u a n´asledn´e sp´arov´an´ı stejn´ ych identifik´ator˚ u. Pokud nen´ı moˇzn´e objekty oznaˇcit shodnˇe na r˚ uzn´ ych replik´ach, pˇrich´az´ı na ˇradu s´emantick´e metody. Napˇr´ıklad pro souborov´e syst´emy je moˇzn´e vyuˇz´ıt absolutn´ı cesty k souboru. Pˇri p´arov´an´ı je samozˇrejmˇe nutn´e zpracovat pˇr´ıpadn´e konflikty.
3.6.2
Zmˇ enov´ a synchronizace
Zmˇenov´a synchronizace, nebo tak´e rychl´a synchronizace, se prov´ad´ı opakovanˇe, jakmile jsou repliky sp´arov´any. Je moˇzn´e pˇren´aˇset pouze zmˇenˇen´e objekty, coˇz je v´ yraznˇe efektivnˇejˇs´ı, neˇz proveden´ı pomal´e synchronizace vˇsech objekt˚ u. U state-transfer syst´em˚ u se vˇet22
Replikace
Synchronizace replik
ˇsinou pouˇz´ıvaj´ı pro detekci zmˇen syntaktick´e metody. V´ yhodou state-transfer syst´emu je pro udrˇzen´ı konzistence nutnost pˇren´est pouze nejnovˇejˇs´ı stav objektu a vynechat vˇsechny pˇredchoz´ı. Thomas write rule Kaˇzd´a replika uchov´av´a pro kaˇzd´ y objekt ˇcasovou znaˇcku, kter´a oznaˇcuje novost“ ob” jektu. Pˇri synchronizaci repliky i s replikou j je porovn´ana ˇcasov´a znaˇcka Ci a Cj a pokud je Cj novˇejˇs´ı, objekt je zkop´ırov´an z repliky j a ˇcasov´a znaˇcka je aktualizov´ana. Tento algoritmus je velice jednoduch´ y a efektivn´ı, ale nedetekuje konflikty - moˇzn´ ym rozˇs´ıˇren´ım je two timestamps algoritmus [Thomas]. S pouˇzit´ım Thomas write rule algoritmu vyˇzaduje smaz´an´ı objektu speci´aln´ı zach´azen´ı. Jednoduch´e smaz´an´ı objektu z repliky i zp˚ usob´ı pˇri dalˇs´ı synchronizaci obnovu objektu z jin´e repliky, jelikoˇz jej´ı ˇcasov´a znaˇcka, v porovn´an´ı s neexistuj´ıc´ı ˇcasovou znaˇckou, je novˇejˇs´ı [Saito]. K ˇreˇsen´ı tohoto probl´emu je moˇzn´e pouˇz´ıt napˇr´ıklad Culling tombstones algoritmus popsan´ y n´ıˇze. Two timestamps Two timestamps algoritmus je rozˇs´ıˇren´ım Thomas write rule umoˇzn ˇuj´ıc´ı detekci konflikt˚ u. Kaˇzd´a replika uchov´av´a u kaˇzd´eho objektu nav´ıc ˇcasovou znaˇcku posledn´ı aktualizace. Konflikt je jednoduˇse detekov´an, pokud pˇri synchronizaci dvou replik je ˇcas aktualizace rozd´ıln´ y. Nev´ yhodou t´eto techniky je ovˇsem detekce tzv. faleˇsn´ ych konflikt˚ u pˇri synchronizaci v´ıce jak dvou replik, takˇze je vhodn´ y zejm´ena pro syst´emy s malou frekvenc´ı konflikt˚ u a mal´ ym mnoˇzstv´ım replik [Saito]. Modified bits Modified bits algoritmus je zjednoduˇsen´ım two timestamps algoritmu. Tento algoritmus funguje spr´avnˇe pouze pokud dvˇe repliky jsou synchronizov´any opakovanˇe - je pouˇzit napˇr´ıklad pro synchronizaci Pocket PC se stoln´ım poˇc´ıtaˇcem [Saito]. Kaˇzd´ y objekt obsahuje modified bit. Pokud je objekt modifikov´an v PC i Pocket PC jsou bity na obou stran´ach nastaveny a objekt je oznaˇcen jako konfliktn´ı. Tento algoritmus je moˇzn´e pouˇz´ıt pouze pro zmˇenovou synchronizaci mezi dvˇema replikami. V pˇr´ıpadˇe pouˇzit´ı pˇri pomal´e synchronizaci jsou bity ignorov´any a veˇsker´e sp´arovan´e objekty jsou oznaˇceny jako konfliktn´ı. Hash histories Z´akladn´ı myˇslenkou v Hash histories algoritmu je pouˇzit´ı otisku objektu m´ısto ˇcasov´e znaˇcky pro reprezentaci stavu objektu (napˇr´ıklad MD5 funkce). Je tak moˇzn´e sledovat nejen jak se objekt zmˇenil, ale i jeho vˇetven´ı a sluˇcov´an´ı v ˇcase. Tabulka historie otisk˚ u s poˇctem replik a zmˇen znaˇcnˇe roste, je proto nutn´e pouˇz´ıt algoritmus pro odstranˇen´ı star´ ych z´aznam˚ u [Saito]. Culling tombstones V pˇr´ıpadˇe algoritmu Thomas write rule bylo uvedeno, ˇze smaz´an´ı objektu nen´ı trivi´aln´ı z´aleˇzitost´ı, jelikoˇz doch´az´ı k jeho obnovˇe pˇri synchronizaci. Jednou z metod je po smazan´em 23
Replikace
Replikace a WebDAV
objektu zanechat n´ahrobek“ s ˇcasovou znaˇckou objektu. Kdykoliv pot´e dojde k synchro” nizaci s jinou replikou je nalezen n´ahrobek a objekt je smaz´an. Nev´ yhodou algoritmu je nar˚ ustaj´ıc´ı poˇcet n´ahrobk˚ u po smazan´ ych objektech, kter´e ovˇsem nen´ı moˇzn´e smazat pro pˇr´ıpad, kdy se pˇripoj´ı replika, kter´a byla dlouho nedostupn´a [Saito].
3.6.3
Aktivn´ı synchronizace
V´ yˇse zm´ınˇen´e metody synchronizace se ˇrad´ı do skupiny pasivn´ıch synchronizac´ı (poll metody), kdy replika libovoln´ ym zp˚ usobem vyhodnot´ı, ˇze je nutn´e prov´est pomalou nebo zmˇenovou synchronizaci a ta je provedena. Spouˇstˇeˇcem m˚ uˇze b´ yt vynucen´ı uˇzivatelem nebo vnitˇrn´ı ˇcasovaˇc. Mnohem efektivnˇejˇs´ı metodou je aktivn´ı synchronizace (push metody). Replika zaˇcne novou zmˇenu okamˇzitˇe aktivnˇe propagovat na ostatn´ı repliky, coˇz znaˇcnˇe redukuje zpoˇzdˇen´ı pˇrenosu zmˇen a eliminuje zat´ıˇzen´ı pˇri propagaci mnoha zmˇen u pasivn´ı replikace.
3.7
Replikace a WebDAV
Komunikaˇcn´ı protokol WebDAV (viz kapitola 2.2) jiˇz ve sv´em z´akladu [RFC4918] obsahuje nˇekolik vlastnost´ı pro podporu replikace. Spoleˇcnost Microsoft ve sv´e implementaci pro Microsoft Exchange [MSDN] tento koncept rozˇs´ıˇrila o nˇekolik nov´ ych vlastnost´ı zdroj˚ u a jiˇz v´ yˇse zm´ınˇen´ y Manifest of collection: • UID je unik´atn´ı identifik´ator v kontextu cel´e repliky. Umoˇzn ˇuje tak identifikaci zdroje v procesu zmˇenov´e synchronizace. UID je automaticky generov´ano v s´emantice serveru. • Resourcetag je nepr˚ uhledn´ y textov´ y ˇretˇezec obsahuj´ıc´ı aktu´aln´ı stav zdroje. Pokud je zdroj jakkoliv modifikov´an, je spoleˇcnˇe s n´ım vygenerov´an nov´ y resourcetag, ˇc´ımˇz je moˇzn´e detekovat modifikovan´e zdroje, pˇr´ıpadnˇe ho pouˇz´ıt pro historii zmˇen pro algoritmus Hash histories popsan´ y v sekci 3.6.2. • Last-Modified obsahuje ˇcasovou znaˇcku ve form´atu ISO 8601 ud´avaj´ıc´ı ˇcas posledn´ı zmˇeny, coˇz je moˇzn´e pouˇz´ıt pro algoritmy Thomas write rule nebo Two timestamps popsan´e v sekci 3.6.2. • Metoda SUBSCRIBE umoˇzn ˇuje prov´adˇet aktivn´ı synchronizaci. Jednoduˇse je moˇzn´e pˇrihl´asit se ke sledov´an´ı vzniku ud´alost´ı a jakmile dan´a ud´alost nastane, je moˇzn´e prov´est ihned synchronizaci modifikovan´ ych zdroj˚ u. • Manifest of collection umoˇzn ˇuje prov´adˇet zmˇenovou synchronizaci, jelikoˇz vrac´ı seznam modifikovan´ ych zdroj˚ u v kolekci od posledn´ıho manifestu. Seznam obsahuje nov´e, modifikovan´e a smazan´e zdroje.
24
4 N´avrh modelu synchronizace V pˇredchoz´ıch kapitol´ach byl pˇredstaven komunikaˇcn´ı protokol WebDAV, kter´ y umoˇzn ˇuje u ´plnou pr´aci s datov´ ym u ´loˇziˇstˇem Kerio Connect serveru, a existuj´ıc´ı modely replikace distribuovan´ ych datov´ ych u ´loˇziˇst’, kter´e je moˇzn´e pro synchronizaci mezi datov´ ymi u ´loˇziˇsti pouˇz´ıt. Nyn´ı je nutn´e navrhnout s pouˇzit´ım tˇechto znalost´ı funguj´ıc´ı model synchronizace, ˇc´ımˇz se zab´ yv´a cel´a tato kapitola.
4.1
Poˇ zadavky a pˇ redpoklady
Pˇred zapoˇcet´ım n´avrhu modelu synchronizace je potˇreba stanovit z´akladn´ı poˇzadavky na model synchronizace a mnoˇzinu pˇredpoklad˚ u, kter´e je nutn´e pˇri jeho n´avrhu respektovat: • Prostˇ red´ı je nespolehliv´ e - Servery nebo komunikaˇcn´ı linky mohou kdykoliv vypadnout a to nejen mezi synchronizacemi, ale i v pr˚ ubˇehu synchronizace, kdy server nemus´ı na poˇzadavek odpovˇedˇet nebo odpov´ı chybovou odpovˇed´ı. • Servery o sobˇ e nev´ı - Jednotliv´e servery jsou od sebe oddˇeleny, nev´ı o sobˇe a nekomunikuj´ı spolu. Nen´ı tedy moˇzn´e synchronizaci navrhnout jako rozˇs´ıˇren´ı Kerio Connect serveru, ale jako proces, kter´ y samostatnˇe pobˇeˇz´ı mimo prostˇred´ı Kerio Connect serveru a bude zprostˇredkov´avat komunikaci mezi servery. • Synchronizace m˚ uˇ ze b´ yt pˇ reruˇ sena - Synchronizace m˚ uˇze b´ yt z´asahem administr´atora nebo operaˇcn´ıho syst´emu pˇreruˇsena a pot´e opˇet spuˇstˇena. • Konflikty objekt˚ u - Objekt m˚ uˇze b´ yt v´ıcen´asobnˇe zmˇenˇen na v´ıce serverech najednou, coˇz m˚ uˇze v´est ke konfliktu, kter´ y je nutn´e dle povahy objektu korektnˇe vyˇreˇsit. • Objem dat - Kaˇzd´ y c´ılov´ y Kerio Connect server obsahuje ˇra´dovˇe des´ıtky sloˇzek, kter´e mohou obsahovat tis´ıce zdroj˚ u. • Operace jsou state-transfer - Komunikaˇcn´ı protokol WebDAV umoˇzn ˇuje pˇren´aˇset pouze cel´e objekty. Synchronizaˇcn´ımu modelu tedy nepropaguje, v jak´e ˇc´asti objektu zmˇena nastala, ale pouze to, ˇze zmˇena v objektu nastala. • Uˇ zivatel nem˚ uˇ ze zas´ ahnout - Nen´ı moˇzn´e se jak´ ymkoliv zp˚ usobem spojit s uˇzivatelem a poˇza´dat ho o vyˇreˇsen´ı konfliktu, vˇsechny konflikty je nutn´e ˇreˇsit automaticky. • Servery nejsou ˇ casovˇ e synchronizov´ any - Jednotliv´e Kerio Connect servery nejsou ˇcasovˇe synchronizov´any a jejich re´aln´e hodiny se mohou rozb´ıhat (viz sekce 3.4.1). • Konzistence - Zmˇeny mus´ı b´ yt propagov´any v nejbliˇzˇs´ım moˇzn´em term´ınu synchronizace, ale nemus´ı b´ yt striktnˇe propagov´any ihned a syst´em toleruje obˇcasn´a nekonzistentn´ı data.
25
N´avrh modelu synchronizace
C´ıle synchronizace
• Dostupnost - Synchronizace nesm´ı omezit dostupnost server˚ u a mus´ı b´ yt dostateˇcnˇe optim´aln´ı, aby nevytˇeˇzovala dostupn´e prostˇredky serveru naplno.
4.2
C´ıle synchronizace
Kaˇzd´e Kerio Connect datov´e u ´loˇziˇstˇe je, dle terminologie WebDAV, rozdˇeleno do stromov´e struktury kolekc´ı, kter´e obsahuj´ı strukturovan´e nebo nestrukturovan´e zdroje. Kolekce jsou jednoznaˇcnˇe identifikov´any prostˇrednictv´ım URI, na kter´e se nach´az´ı, a mohou b´ yt hierarchicky vnoˇreny do jin´e kolekce. Kolekce nav´ıc obsahuje pˇr´ıstupov´a pr´ava (tzv. security descriptor ), kter´a definuj´ı, jak´ ymi pr´avy uˇzivatel´e vzhledem ke kolekci a jej´ım ˇclen˚ um disponuj´ı. Kolekce je moˇzn´e pouze vytv´aˇret, mazat nebo upravovat jejich pˇr´ıstupov´a pr´ava. Kaˇzd´a kolekce m˚ uˇze obsahovat jeden aˇz ˇra´dovˇe tis´ıce dokument˚ u. Dokumenty nemohou obsahovat dalˇs´ı dokumenty ani kolekce. Dokumenty jsou jednoznaˇcnˇe identifikov´any prostˇrednictv´ım vlastnosti UID, kter´a se na r˚ uzn´ ych replik´ach pro stejn´ y dokument liˇs´ı, a dˇel´ı se do dvou skupin - nestrukturovan´e dokumenty, u kter´ ych nelze zjistit v´ yznam obsahu, a strukturovan´e dokumenty, kter´e maj´ı pˇresnˇe specifikovanou vnitˇrn´ı strukturu, a je tedy moˇzn´e urˇcit v´ yznam obsahu. V prostˇred´ı Kerio Connect se vyskytuje celkem ˇsest typ˚ u dokument˚ u - emailov´a zpr´ava, kalend´aˇrov´a ud´alost, u ´kol, kontakt, distribuˇcn´ı seznam a pozn´amka. Pozn´amka vˇsak nen´ı podporov´ana pro replikaci a tud´ıˇz n´asleduj´ıc´ı text se o n´ı nebude zmiˇ novat. Kolekce se podle typ˚ u vnitˇrn´ıch dokument˚ u dˇel´ı podobnˇe jako dokumenty do pˇeti typ˚ u - poˇstovn´ı schr´anka, kalend´aˇr, u ´koly, kontakty a pozn´amky. Emailov´ a zpr´ ava Emailov´a zpr´ava je nestrukturovan´ y dokument, kter´ y je specifikov´an ve standardu [RFC2822]. Kromˇe obsahu jsou k dokumentu pˇridruˇzeny i aktivn´ı vlastnosti jako napˇr´ıklad pˇr´ıjemce nebo pˇredmˇet zpr´avy. ´ Kalend´ aˇ rov´ a ud´ alost a Ukol ´ Kalend´aˇrov´a ud´alost a Ukol jsou strukturovan´e dokumenty ve form´atu iCalendar verze 2.0 [RFC2445]. Kalend´aˇrov´a ud´alost obsahuje pr´avˇe jednu kalend´aˇrovou ud´alost VEVENT au ´kol obsahuje pr´avˇe jeden u ´kol VTODO. N´asleduj´ıc´ı dokument je uk´azkou jednoduch´e kalend´aˇrov´e ud´alosti Marketingov´a porada“: ”
26
N´avrh modelu synchronizace
1 2 3 4 5 6 7 8 9 10 11 12 13 14
C´ıle synchronizace
BEGIN:VCALENDAR BEGIN:VEVENT DTSTAMP:20120223T153700Z UID:503b1180−29cf−4f63−8898−38e633f8b06c ORGANIZER;CN=”Test User 3”:mailto:
[email protected] SUMMARY:Marketingov´ a porada DTSTART:20120224T153000 DTEND:20120224T160000 BEGIN:VALARM ACTION:DISPLAY TRIGGER;RELATED=START:−PT15M END:VALARM END:VEVENT END:VCALENDAR
Kontakt a Distribuˇ cn´ı seznam Kontakt a Distribuˇcn´ı seznam jsou strukturovan´e dokumenty ve form´atu vCard verze 3.0 [RFC2426]. Distribuˇcn´ı seznam je standardn´ı kontakt rozˇs´ıˇren´ y o vlastnosti pro reprezentaci distribuˇcn´ıch seznam˚ u. Form´at dokumentu je stejn´ y jako u [RFC2445], jen pouˇzit´e vlastnosti se mˇen´ı. N´asleduj´ıc´ı dokument je uk´azkou jednoduch´eho kontaktu Bc. Jiˇr´ı ” Praus“: 1 2 3 4 5 6 7 8 9 10
BEGIN:VCARD N:Praus;Jiˇr´ı;;Bc.; FN:Bc. Jiˇr´ı Praus URL;TYPE=WORK:www.test.lab TITLE:Program´ ator ICQ:123456789 BDAY;VALUE=DATE:20120208 EMAIL;TYPE=PREF,HOME:
[email protected] UID:60876c2e−3e7b−4678−9153−e133f893f47d END:VCARD
Vlastnosti Ke kaˇzd´emu zdroji jsou pˇriˇrazeny strukturovan´e WebDAV vlastnosti, kter´e pˇrid´avaj´ı dokumentu dalˇs´ı v´ yznam, jako napˇr´ıklad pˇreˇcten´a/nepˇreˇcten´a emailov´a zpr´ava. Kaˇzd´ y zdroj obsahuje velk´e mnoˇzstv´ı vlastnost´ı, ale vˇetˇsina z nich je urˇcena pouze ke ˇcten´ı nebo jejich obsah je duplicitn´ı s obsahem dokumentu a nen´ı je tak nutn´e synchronizovat. • Pro kolekce je moˇzn´e synchronizovat pouze vlatnost http://schemas.microsoft.com/ exchange/security/descriptor, ostatn´ı jsou urˇceny pouze pro ˇcten´ı. • Pro vˇsechny typy dokument˚ u je nutn´e replikovat podmnoˇzinu vlastnost´ı jmenn´eho prostoru http://schemas.microsoft.com/mapi/proptag/: – x0e070003 speci´aln´ı MS Outlook pˇr´ıznaky, – x0E2B0003 speci´aln´ı v´ yznam, 27
N´avrh modelu synchronizace
Architektura
– x10900003 stav zpr´avy, – x10910040 ˇcas oznaˇcen´ı zpr´avy stavem, – x10950003 identifik´ator ikony stavu, – x67aa000b oznaˇcen´ı skryt´e nebo norm´aln´ı zpr´avy. • Pro emailov´e zpr´avy je nav´ıc nutn´e replikovat cel´e mnoˇziny vlastnost´ı ze jmenn´ ych prostor˚ u: – urn:schemas:mailheader: pro hlaviˇcku emailu, – urn:schemas:httpmail: pro dalˇs´ı atributy emailu.
4.3
Architektura
Kerio Connect server je autonomn´ı datov´e u ´loˇziˇstˇe um´ıstˇen´e v libovoln´em m´ıstˇe v s´ıti. Jednotliv´e servery o sobˇe navz´ajem nev´ı a nekomunikuj´ı spolu. Uˇzivatel´e mohou na kaˇzd´em datov´em u ´loˇziˇsti vykon´avat libovoln´e operace nez´avisle na ostatn´ıch serverech, z ˇcehoˇz vypl´ yv´a, ˇze model se bude zab´ yvat optimistickou replikac´ı bl´ıˇze popsanou v sekci 3.3. Jelikoˇz do server˚ u nen´ı moˇzn´e zasahovat a servery se neznaj´ı, synchronizace mezi u ´loˇziˇsti mus´ı prob´ıhat pomoc´ı extern´ıho procesu, kter´ y o serverech v´ı a bude vyuˇz´ıvat komunikaˇcn´ı rozhran´ı WebDAV. Kaˇzd´ y server m˚ uˇze pˇred zapoˇcet´ım synchronizace obsahovat libovoln´a data, kter´a mus´ı b´ yt synchronizaˇcn´ım procesem korektnˇe zreplikov´ana na ostatn´ı servery.
Obr´azek 4.1: Architektura single-master Obr´azek 4.1 ukazuje n´avrh architektury synchronizace pro tˇri Kerio Connect servery. Vˇsechny servery disponuj´ı komunikaˇcn´ım rozhran´ım WebDAV, kter´ ym jsou dotazov´any procesem synchronizace. Proces synchronizace bˇeˇz´ı na jednom ze server˚ u a replikuje data mezi servery po naznaˇcen´ ych komunikaˇcn´ıch kan´alech. Informace o synchronizaci je nutn´e ukl´adat do lok´aln´ı datab´aze, jelikoˇz nen´ı moˇzn´e zasahovat do prostˇred´ı Kerio Connect server˚ u, kter´e neposkytuj´ı dostateˇcn´e informace pro efektivn´ı synchronizaci. Celou architekturu m˚ uˇzeme tedy oznaˇcit jako optimistickou replikaci single-master.
28
N´avrh modelu synchronizace
Konzistence
Obr´azek 4.2: Architektura multi-master Obr´azek 4.2 naznaˇcuje, jak by komunikace mohla vypadat pˇri pouˇzit´ı architektury multi-master pro dva servery, kdy je kaˇzd´ y server obsluhov´an vlastn´ım synchronizaˇcn´ım procesem. Tato architektura je ovˇsem znaˇcnˇe nev´ yhodn´a. St´ale mus´ıme k serveru pˇristupovat komunikaˇcn´ım rozhran´ım WebDAV, kdy je pˇri lok´aln´ı komunikaci sice sn´ıˇzeno zpoˇzdˇen´ı, ale za cenu nutnosti implementace distribuovan´eho algoritmu shody a udrˇzov´an´ı vˇsech proces˚ u aktivn´ıch. Nav´ıc bychom ztratili v´ yhodu protokolu WebDAV - nen´ı blokov´an na firewallech. Toto ˇreˇsen´ı by mˇelo smysl, pokud by byla synchronizace pˇr´ımo uvnitˇr Kerio Connect serveru, kdy by odpadla lok´aln´ı WebDAV komunikace. Z´avˇerem tedy je, ˇze pro n´avrh modelu synchronizace bude pouˇzita architektura optimistick´e replikace single-master.
4.4
Konzistence
D˚ uleˇzitou roli pˇri n´avrhu modelu synchronizace hraje zvolen´ y model konzistence. Volba modelu konzistence je vˇzdy kompromis mezi tˇremi ukazateli - dostupnost, striktn´ı konzistence a tolerance v´ ypadk˚ u s´ıtˇe - tzv. The CAP theorem [Gilbert].
Obr´azek 4.3: The CAP theorem Obr´azek 4.3 zobrazuje tˇri vyjmenovan´e ukazatele vytv´aˇrej´ıc´ı moˇzn´e skupiny model˚ u 29
N´avrh modelu synchronizace
Pravdivostn´ı datab´ aze
konzistence. Zelen´e varianty jsou modely, kter´e lze dos´ahnout na u ´kor tˇret´ıho ukazatele. Syst´em splˇ nuj´ıc´ı vˇsechny tˇri ukazatele (oranˇzov´e pole) nen´ı moˇzn´e sestavit, jelikoˇz pokud toleruje v´ ypadky s´ıtˇe a je striktnˇe konzistentn´ı, nem˚ uˇze b´ yt pˇri v´ ypadku dostupn´ y. Ukazatel, ze kter´eho mus´ıme vych´azet, je dostupnost, protoˇze d˚ uraz je kladen hlavnˇe na dostupnost Kerio Connect server˚ u. Nav´ıc ani nen´ı moˇzn´e do chodu serveru zasahovat, protoˇze komunikaˇcn´ı rozhran´ı WebDAV to neumoˇzn ˇuje. Je tedy moˇzn´e volit mezi striktn´ı konzistenc´ı a toleranc´ı v´ ypadk˚ u. Striktn´ı konzistence nen´ı poˇzadov´ana a nav´ıc by j´ı nebylo moˇzn´e dos´ahnout. Je proto mnohem optim´alnˇejˇs´ı tolerovat v´ ypadky a dopustit, ˇze na v´ıce serverech nebudou aktu´aln´ı data, neˇz ˇze na ˇza´dn´em serveru nebudou aktu´aln´ı data. Jako druh´ y nejvhodnˇejˇs´ı ukazatel se proto jev´ı pr´avˇe tolerance v´ ypadk˚ u. Z obr´azku 4.3 je moˇzn´e vyˇc´ıst, ˇze jsme zvolili model AP a za tento model lze povaˇzovat eventual consistency. Synchronizace bude tedy dodrˇzovat eventual consistency, bude tolerovat obˇcasnou nekonzistenci, ale s v´ yhodami lepˇs´ı ˇsk´alovatelnosti a propustnosti cel´eho syst´emu.
4.5
Pravdivostn´ı datab´ aze
Jelikoˇz nen´ı moˇzn´e zasahovat do prostˇred´ı Kerio Connect server˚ u, kter´e neposkytuj´ı dostateˇcn´e informace pro synchronizaci, je nutn´e informace ukl´adat do lok´aln´ı datab´aze pravdivostn´ı datab´aze. Ukl´ad´an´ım pr˚ ubˇeˇzn´ ych informac´ı do perzistentn´ı datab´aze se zv´ yˇs´ı nejen efektivita, ale i spolehlivost synchronizace, protoˇze pˇri pˇreruˇsen´ı synchronizaˇcn´ıho procesu budou dostupn´e p˚ uvodn´ı informace o synchronizaci. Datab´aze slouˇz´ı zejm´ena pro u ´ˇcely p´arov´an´ı. Kaˇzd´ y zdroj m˚ uˇze b´ yt na kaˇzd´em serveru uloˇzen pod jin´ ym jm´enem a UID, je proto nutn´e p´arovat explicitnˇe s vyuˇzit´ım datab´aze (viz sekce 4.9).
Obr´azek 4.4: Model datab´aze pro podporu synchronizace Model na obr´azku 4.4 je relaˇcn´ı datab´aze o tˇrech tabulk´ach, kter´e uchov´avaj´ı dostateˇcn´e a pˇresto minim´aln´ı mnoˇzstv´ı informac´ı pro efektivn´ı algoritmus synchronizace Kerio Connect server˚ u protokolem WebDAV. Cel´ y koncept datab´aze bude postupnˇe vysvˇetlen v n´asleduj´ıc´ıch sekc´ıch.
30
N´avrh modelu synchronizace
4.5.1
Synchronizace
Lokace
V tabulce Location jsou uchov´av´any konfigurace vˇsech server˚ u, kter´e budou mezi sebou replikov´any. Server je identifikov´an z´akladn´ı URI, na kter´e se nach´az´ı koˇrenov´a kolekce, a uˇzivatelsk´ ym jm´enem pro pˇr´ıstup na zabezpeˇcen´ y server.
4.5.2
Objekt
Tabulka Object obsahuje slouˇcenou stromovou reprezentaci vˇsech zdroj˚ u, kter´e jsou na vˇsech replik´ach, tak jak by repliky mˇely vypadat v konzistentn´ım stavu. Kolekce jsou od ostaty je nastaven na hodnotu 1. n´ıch zdroj˚ u odliˇseny atributem is collection, kter´ Stromov´a reprezentace je zajiˇstˇena algoritmem pro reprezentaci stromu v datab´azi materializovanou cestou s atributy path ud´avaj´ıc´ı n´azev rodiˇcovsk´e kolekce a depth reprezentuj´ıc´ı hloubku vnoˇren´ı zdroje. Tento algoritmus m´a sloˇzitost v´ ybˇeru cel´eho stromu O(1) a sloˇzitost u ´pravy stromu O(N ). Jelikoˇz operace move nen´ı detekov´ana protokolem WebDAV, u ´pravu stromu stejnˇe nevyuˇzijeme, coˇz znamen´a, ˇze je velice efektivn´ı pro reprezentaci stromu oproti napˇr´ıklad adjacency list algoritmu.
4.5.3
Kopie
D´ıky eventual consistency a moˇznosti v´ ypadku server˚ u nem˚ uˇzeme vych´azet z pˇredpokladu, ˇze obsah vˇsech replik je totoˇzn´ y. Nem˚ uˇzeme proto pouˇz´ıt pouze tabulku Object pro reprezentaci stavu synchronizace. Potˇrebujeme i informace o tom, na jak´em serveru je jak´ y zdroj v jak´em stavu pˇr´ıtomn´ y. K tomuto u ´ˇcelu slouˇz´ı tabulka Copy, kter´a reprezentuje aktu´aln´ı stav vˇsech server˚ u uloˇzen´ ych v tabulce Location v˚ uˇci celkov´e struktuˇre v tabulce Object. Z´aznamy jsou pevnˇe sv´az´any se zdroji na serverech atributem UID, kter´ y je jednoznaˇcnˇe identifikuje na dan´em serveru. Pokud server neobsahuje z´aznam Copy, nen´ı dan´ y zdroj na serveru zreplikov´an.
4.6 4.6.1
Synchronizace Synchronizace kolekce
Z´akladn´ım procesem synchronizace je synchronizace jedn´e kolekce mezi vˇsemi replikami. ´ Na zaˇc´atku zn´ame pouze URI kolekce, kter´a existuje na vˇsech serverech. Ukolem synchronizace je kolekci prozkoumat na vˇsech replik´ach a zreplikovat jej´ı obsah. N´asleduj´ıc´ı pseudok´od naznaˇcuje, jak synchronizace jedn´e kolekce prob´ıh´a.
31
N´avrh modelu synchronizace
1 2 3 4 5 6 7 8 9 10 11 12
Synchronizace
Pro vˇsechny servery { Detekuj zmˇenˇen´e kolekce pro collblob hierarchical Detekuj zmˇenˇen´e dokumenty pro collblob shallow } Pokud je poˇcet detekovan´ ych zmˇen > 0 { Pro vˇsechny kopie s pˇr´ıznakem copy.is remove = 1 { Smaˇz kopii na serveru } Pro vˇsechny neaktu´ aln´ı objekty seˇrazen´e podle object.depth vzestupnˇe { Aktualizuj objekt na serverech } }
Algoritmus je rozdˇelen do dvou f´az´ı. Prvn´ı f´az´ı je detekce zmˇen a struktury kolekce na vˇsech serverech, abychom sp´arovali veˇsker´ y obsah a vyhnuli se tak nechtˇen´e duplikaci (viz sekce 3.6.1). Pokud bychom totiˇz prohledali nejprve jeden server, obsah zreplikovali a pot´e aˇz dalˇs´ı server, pˇri opakovan´e pomal´e synchronizaci bychom nechtˇenˇe duplikovali shodn´ y obsah mezi servery.
Obr´azek 4.5: Detekce struktury kolekce koˇren Obr´azek 4.5 naznaˇcuje, jak m˚ uˇze prob´ıhat slouˇcen´ı obsahu dvou stejn´ ych kolekc´ı na dvou replik´ach s rozd´ıln´ ym obsahem. Podrobnˇeji se detekc´ı zmˇen v kolekc´ıch zab´ yv´a sekce 4.8. V druh´e f´azi algoritmu prob´ıh´a aktualizace detekovan´ ych zmˇen na jednotliv´e repliky. Prioritu maj´ı operace smaz´an´ı a po jejich dokonˇcen´ı n´asleduj´ı operace pˇrid´an´ı nebo modifikace. Aktualizac´ı replik se zab´ yv´a podrobnˇeji sekce 4.11. Data jsou v prvn´ı f´azi perzistentnˇe uloˇzena do lok´aln´ı pravdivostn´ı datab´aze tak, aby pˇri chybˇe nebo selh´an´ı v dobˇe aktualizace obsahu nedoˇslo ke ztr´atˇe detekovan´ ych zmˇen a tak ztr´atˇe proveden´ ych operac´ı.
4.6.2
Pomal´ a synchronizace
Pˇri prvn´ım spuˇstˇen´ı synchronizace je datab´aze synchronizaˇcn´ıho procesu pr´azdn´a a zn´ame pouze koˇrenovou kolekci cel´e synchronizace, je tedy nutn´e prozkoumat strukturu replik, kter´e budeme synchronizovat. N´asleduj´ıc´ı pseudok´od popisuje algoritmus pomal´e synchronizace.
32
N´avrh modelu synchronizace
Synchronizace
1 Vytvoˇr objekt a kopie pro koˇrenov´ e sloˇzky vˇsech server˚ u 2 Dokud existuje kopie kolekce s copy.last searched at = −1 { 3 Vyber prvn´ı kolekci s nejniˇzˇs´ım object.depth 4 Synchronizuj kolekci 5 }
Algoritmus pracuje iterativnˇe a postupuje do hloubky stromu kolekc´ı. Nejprve jsou vytvoˇreny pr´azdn´e kopie pro koˇrenov´e sloˇzky server˚ u, jelikoˇz pˇredpokl´ad´ame, ˇze koˇrenov´e sloˇzky existuj´ı, jinak synchronizace nem´a smysl. N´aslednˇe je vybr´ana kolekce na nejvyˇsˇs´ı u ´rovni, kter´a jeˇstˇe nebyla synchronizov´ana, jelikoˇz m´a neinicializovan´ y ˇcas posledn´ıho hled´an´ı copy.last searched at = −1. Kolekce je synchronizov´ana podle algoritmu v sekci 4.6.1 a pokud byly v kolekci nalezeny vnoˇren´e kolekce, algoritmus je najde jako jeˇstˇe neprohledan´e a provede synchronizaci. T´ımto zp˚ usobem algoritmus pokraˇcuje, dokud vˇsechny kolekce na vˇsech replik´ach nejsou prohled´any a sesynchronizov´any, ˇc´ımˇz vytvoˇr´ı kompletn´ı strom zdroj˚ u a uvede repliky do konzistentn´ıho stavu.
4.6.3
Zmˇ enov´ a synchronizace
Po prvn´ım proveden´ı pomal´e synchronizace je inicializov´ana pravdivostn´ı datab´aze a je zn´ama struktura vˇsech replik, staˇc´ı tedy prov´adˇet o pozn´an´ı rychlejˇs´ı zmˇenovou synchronizaci. 1 Nastav copy.last searched at := −1 pro vˇsechny kolekce 2 Dokud existuje kopie kolekce s copy.last searched at = −1 { 3 Vyber prvn´ı kolekci s nejniˇzˇs´ım object.depth 4 Synchronizuj kolekci 5 }
Algoritmus je v podstatˇe shodn´ y s pomalou synchronizac´ı s t´ım rozd´ılem, ˇze je na zaˇc´atku m´ısto vytv´aˇren´ı koˇrenov´e kolekce resetov´an ˇcas posledn´ıho hled´an´ı vˇsech kolekc´ı, tak aby doˇslo k prohled´an´ı vˇsech kolekc´ı stromu. Rozd´ıl oproti pomal´e synchronizaci je v tom, ˇze jiˇz zn´ame stav replik a je moˇzn´e detekovat pouze nov´e zmˇeny oproti pˇredchoz´ı synchronizaci. V´ıce o detekci zmˇen v sekci 4.8.
4.6.4
Aktivn´ı synchronizace
Protokol WebDAV umoˇzn ˇuje prov´adˇet aktivn´ı synchronizaci metodou SUBSCRIBE, coˇz umoˇzn ˇuje efektivnˇe detekovat nov´e zmˇeny na replik´ach. Nejdˇr´ıve je nutn´e se k odbˇeru zmˇen pˇrihl´asit metodou SUBSCRIBE a protoˇze je aktivn´ı synchronizace pomˇernˇe drah´a, je nutn´e omezit kolekce, ke kter´ ym se budeme pˇrihlaˇsovat, na ty, u kter´ ych to m´a opravdu smysl: • Kolekce obsahuj´ıc´ı kalend´aˇrov´e ud´alosti a u ´koly, jelikoˇz tyto dokumenty jsou ˇcasto modifikov´any a je vhodn´e pro nˇe zav´est aktivn´ı synchronizaci. • Kolekce na prvn´ı u ´rovni, protoˇze je k nim ˇcasto pˇristupov´ano a jejich obsah je nejviditelnˇejˇs´ı.
33
N´avrh modelu synchronizace
Nedostupnost server˚ u
Pˇrihl´aˇsen´ı je jednoznaˇcnˇe identifikov´ano celoˇc´ıseln´ ym Subscription-ID, kter´e je uloˇzeno ke kaˇzd´e kopii kolekce v datab´azi. Pro detekci zmˇenˇen´ ych kolekc´ı je pouˇzita metoda POLL, jelikoˇz je podstatnˇe jednoduˇsˇs´ı na implementaci a nevyˇzaduje komunikaci smˇerem k synchronizaˇcn´ımu procesu. Umoˇzn ˇuje tak´e aktivn´ı synchronizaci prov´est v dobˇe, kdy m´a synchronizaˇcn´ı proces dostatek zdroj˚ u k jej´ı obsluze. Synchronizaˇcn´ı proces jednoduˇse poˇsle poˇzadavek POLL se vˇsemi Subscription-ID, kter´e m´a uloˇzeny v datab´azi, a server v odpovˇedi vr´at´ı, kter´e z nich byly zmˇenˇeny. Zmˇenˇen´e kolekce jsou synchronizov´any tak, jak je pops´ano v sekci 4.6.1.
4.7
Nedostupnost server˚ u
Jelikoˇz v pr˚ ubˇehu synchronizace m˚ uˇze doj´ıt k v´ ypadku nebo chybˇe na libovoln´em serveru, y nab´ yv´a hodnoty obsahuje tabulka Location atribut location.temporary unavailable, kter´ 1, pokud je server moment´alnˇe nedostupn´ y. Tento server je vynech´an z jak´ekoliv aktivity synchronizaˇcn´ıho procesu a je otestov´an na dostupnost aˇz v dalˇs´ı iteraci synchronizace. T´ımto zp˚ usobem se sn´ıˇz´ı z´atˇeˇz v podobˇe zbyteˇcn´ ych dotaz˚ u na nedostupn´ y server, kter´e by stejnˇe skonˇcily ne´ uspˇeˇsnˇe. Tabulka nav´ıc obsahuje ˇc´ıtaˇc location.f ailures obsahuj´ıc´ı celkov´ y poˇcet v´ ypadk˚ u, d´ıky ˇcemuˇz je moˇzn´e zjistit, jak´ y server je nespolehliv´ y. K v´ ypadku serveru dojde kdykoliv, kdyˇz se nepodaˇr´ı se serverem spojit protokolem WebDAV, autorizace se nezdaˇr´ı nebo server odpov´ı neˇcekanou odpovˇed´ı (napˇr´ıklad koˇrenov´a kolekce neexistuje). Zabr´an´ı se t´ım propagaci doˇcasnˇe chybn´e nekonzistence z nedostupn´eho serveru na ostatn´ı repliky.
4.8
Detekce zmˇ en
K detekci zmˇen disponuje WebDAV metodou SEARCH, kter´a d´ıky funkci Manifest of collection umoˇzn ˇuje detekovat zmˇeny v ˇclenech kolekce proveden´e od posledn´ı synchronizace. Implementace t´eto metody produktem Kerio Connect m´a vˇsak jist´a omezen´ı. Metoda umoˇzn ˇuje vyhled´avat pouze oddˇelenˇe zmˇeny v kolekc´ıch nebo dokumentech a je moˇzn´e vyhled´avat pouze v pˇr´ım´ ych ˇclenech kolekce. Pro detekci zmˇenˇen´ ych kolekc´ı pouˇzijeme metodu SEARCH s SQL dotazem 1 SELECT ∗ 2 FROM SCOPE (’SHALLOW TRAVERSAL OF ”
”’); 3 WHERE ”DAV:isfolder” = false
a pro detekci zmˇenˇen´ ych dokument˚ u pouˇzijeme metodu s SQL dotazem 1 SELECT ∗ 2 FROM SCOPE (’HIERARCHICAL TRAVERSAL OF ””’); 3 WHERE ”DAV:isfolder” = true AND ”DAV:ishidden” = false
Server v odpovˇedi vrac´ı seznam vˇsech zmˇenˇen´ ych zdroj˚ u oznaˇcen´ ych jedn´ım ze tˇr´ı pˇr´ıznak˚ u - new, change a delete. Nalezen´e zmˇeny jsou vr´aceny od posledn´ıho stavu collblob, kter´ y je pˇred´an v poˇzadavku na hled´an´ı metodou SEARCH. Pˇri pomal´e synchronizaci je zˇrejm´e, ˇze collblob je pr´azdn´ y, jelikoˇz nezn´ame stav datov´eho u ´loˇziˇstˇe, takˇze vˇsechny poloˇzky seznamu maj´ı pˇr´ıznak new - zmˇena od vytvoˇren´ı u ´loˇziˇstˇe. Vˇsechny zmˇeny jsou 34
N´avrh modelu synchronizace
Detekce zmˇen
zpracov´any a uloˇzeny do pravdivostn´ı datab´aze, ze kter´e probˇehne v dalˇs´ı f´azi synchronizace aktualizace server˚ u podle nalezen´ ych zmˇen. Obecnˇe pˇredpokl´ad´ame, ˇze nahl´aˇsen´e pˇr´ıznaky jsou nespolehliv´e a jsou vˇzdy ovˇeˇreny v˚ uˇci lok´aln´ı datab´azi. Po u ´spˇeˇsn´em prohled´an´ı kolekce je uloˇzen vr´acen´ y nov´ y stav kolekce collblob do atriych kolekc´ı a copy.collblob shallow butu copy.collblob hierarchical pro hled´an´ı zmˇenˇen´ pro hled´an´ı zmˇenˇen´ ych dokument˚ u tak, aby pˇri pˇr´ıˇst´ım hled´an´ı byly nalezeny pouze nov´e neaplikovan´e zmˇeny. Stejnˇe tak je aktualizov´ana ˇcasov´a znaˇcka posledn´ıho u ´spˇeˇsn´eho hled´an´ı copy.last searched at.
4.8.1
Nov´ a kolekce
Pokud v odpovˇedi nalezneme kolekci s pˇr´ıznakem new, vyhled´ame, zda jiˇz neexistuje objekt se stejnou URI - kolekce jsou jednoznaˇcnˇe identifikov´any relativn´ı URI. Pokud tento objekt existuje, znamen´a to, ˇze kolekce jiˇz byla detekov´ana na jin´em serveru a jedn´a se o sp´arov´an´ı s jinou shodnou kolekc´ı. V opaˇcn´em pˇr´ıpadˇe, kdy objekt neexistuje, je vytvoˇren nov´ y objekt.
Obr´azek 4.6: Stavov´ y diagram algoritmu zpracov´an´ı nov´e kolekce K objektu se pot´e vyhled´a kopie pro server, na kter´em probˇehlo hled´an´ı. Pokud je kopie kolekce nalezena, je nejprve porovn´an jej´ı resourcetag, znaˇc´ıc´ı verzi zdroje na serveru. Pokud se resourcetag zmˇenil, jedn´a se o ˇspatnˇe oznaˇcenou zmˇenu (new m´ısto change), napˇr´ıklad pˇri hled´an´ı bez pouˇzit´ı collblob, a je vyvol´ana obsluha zmˇenˇen´e kolekce. Pokud se ovˇsem resourcetag nezmˇenil, jde o faleˇsnou zmˇenu popsanou v sekci 4.8.6. Posledn´ı variantou je neexistuj´ıc´ı kopie, kdy je vytvoˇrena nov´a kopie pro danou repliku. Obr´azek 4.6 zobrazuje diagram pro v´ yˇse popsan´ y algoritmus.
4.8.2
Nov´ y dokument
Pro nov´ y dokument s pˇr´ıznakem new je na rozd´ıl od kolekc´ı nejprve hled´ana kopie objektu pro zdrojov´ y server podle UID - dokumenty jsou jednoznaˇcnˇe identifikov´any prostˇrednic35
N´avrh modelu synchronizace
Detekce zmˇen
tv´ım UID. Jestliˇze tuto kopie nalezneme, jedn´a se stejnˇe jako u nov´e kolekce o ˇspatnˇe oznaˇcenou zmˇenu (new m´ısto change).
Obr´azek 4.7: Stavov´ y diagram algoritmu zpracov´an´ı nov´eho dokumentu Pokud se ovˇsem kopii nepodaˇr´ı naj´ıt, je nutn´e zjistit, zda jiˇz stejn´ y dokument nebyl nalezen na jin´em serveru. Pokus´ıme se tedy sp´arovat dokument s objektem a pokud se n´am to podaˇr´ı, vytvoˇr´ıme pro nˇej novou kopii. Pokud se dokument sp´arovat nepodaˇr´ı, je vytvoˇren nov´ y objekt i nov´a kopie, viz diagram na obr´azku 4.7.
4.8.3
Zmˇ enˇ en´ a kolekce
Pˇri akci nad kolekc´ı s pˇr´ıznakem change by se mˇelo jednat o zmˇenu jiˇz existuj´ıc´ı kolekce. Pokus´ıme se tedy naj´ıt objekt i kopii kolekce a pokud alespoˇ n jeden z´aznam nen´ı nalezen, je akce pˇresmˇerov´ana na akci nov´a kolekce, jelikoˇz nejsp´ıˇse doˇslo k dˇr´ıvˇejˇs´ımu vynech´an´ı akce new nebo chybn´emu pˇr´ıznaku ze strany Kerio Connect serveru. Jestliˇze jsou ovˇsem objekt i kopie nalezeny, jedn´a se zcela jistˇe o modifikovanou kolekci. M˚ uˇze se ovˇsem st´at, ˇze kolekce byla nahrazena jinou kolekc´ı se stejn´ ym URI. Zkontrolujeme tedy jeˇstˇe UID a pokud nejsou shodn´e, kolekci nejdˇr´ıve smaˇzeme pro ostatn´ı servery a pot´e ji opˇet pˇrid´ame ze zdrojov´eho serveru s nov´ ymi vlastnostmi, ˇc´ımˇz je pˇresunut´a kolekce propagov´ana na ostatn´ı repliky. Pokud jsou UID shodn´e, nastav´ıme pouze novou verzi modifikace podle algoritmu popsan´eho v sekci 4.10. V´ yˇse zm´ınˇen´ y algoritmus je sch´ematicky zobrazen na diagramu 4.8.
4.8.4
Zmˇ enˇ en´ y dokument
Pokud je detekov´ana zmˇena dokumentu, je nalezena kopie dokument podle UID. Jestliˇze nen´ı kopie nalezena, je situace podobn´a jako u nenalezen´e zmˇenˇen´e kolekce a akce je pˇresmˇerov´ana na nov´ y dokument. Pokud je ovˇsem dokument nalezen, je nutn´e porovnat URI v kopii a na serveru. M˚ uˇze se totiˇz st´at, ˇze dokument byl pˇresunut do jin´e kolekce a je tedy nutn´e ho pˇresunout i na ostatn´ıch replik´ach. Stejnˇe jako u kolekce je v takov´em 36
N´avrh modelu synchronizace
Detekce zmˇen
Obr´azek 4.8: Stavov´ y diagram algoritmu zpracov´an´ı zmˇenˇen´e kolekce pˇr´ıpadˇe dokument smaz´an pro ostatn´ı servery a vytvoˇren nov´ y ze zdrojov´eho serveru, ˇc´ımˇz se zajist´ı jeho pˇresun na ostatn´ıch replik´ach. Na druhou stranu m˚ uˇze m´ıt dokument stejn´ y resourcetag, pˇriˇcemˇz se jedn´a o faleˇsnou zmˇenu popsanou v sekci 4.8.6. Posledn´ım pˇr´ıpadem je standardn´ı zmˇena, kdy URI je shodn´a a resourcetag jin´ y. Pro tento pˇr´ıpad nastav´ıme pouze novou verzi modifikace podle algoritmu popsan´eho v sekci 4.10. Popsan´ y algoritmus je sch´ematicky zobrazen na diagramu 4.9.
Obr´azek 4.9: Stavov´ y diagram algoritmu zpracov´an´ı zmˇenˇen´eho dokumentu
4.8.5
Smazan´ y zdroj
Algoritmus smaz´an´ı je pro kolekce i dokumenty shodn´ y. Vˇsem kopi´ım dan´eho zdroje pro vˇsechny servery je v pravdivostn´ı datab´azi nastaven pˇr´ıznak copy.is remove na hodnotu 1. Akce smaz´an´ı je vyvol´ana i v pˇr´ıpadˇe, kdy metoda SEARCH vrac´ı odpovˇed´ı 404 Not found - kolekce nebyla nalezena, tud´ıˇz byla smaz´ana. To ale plat´ı pouze v pˇr´ıpadˇe, kdy 37
N´avrh modelu synchronizace
P´arov´an´ı zdroj˚ u
kolekce nen´ı koˇrenovou kolekc´ı pro dan´ y server, v takov´em pˇr´ıpadˇe je server oznaˇcen jako doˇcasnˇe nedostupn´ y, protoˇze koˇrenov´a kolekce nem˚ uˇze b´ yt smaz´ana.
4.8.6
Detekce faleˇ sn´ ych zmˇ en
V´ yznamnou komplikac´ı pˇri detekci zmˇen je tzv. faleˇsn´a zmˇena. Faleˇsn´a zmˇena nastane v pˇr´ıpadˇe, kdy je zdroj zmˇenˇen na replik´ach synchronizaˇcn´ım procesem. V dalˇs´ım zavol´an´ı metody SEARCH je totiˇz tato zmˇena tak´e nahl´aˇsena. V naivn´ı implementaci by to zp˚ usobilo nekoneˇcn´e aktualizace, protoˇze pˇri jak´ekoliv aktualizaci serveru by byla zmˇena nahl´aˇsen´a zpˇet a provedena na jin´e replice a opˇet nahl´aˇsena. Je proto nutn´e faleˇsn´e zmˇeny detekovat. Pˇri kaˇzd´e aktualizaci je z´ısk´an resourcetag zmˇenˇen´eho zdroje a uloˇzen do datab´aze. Pˇri dalˇs´ım pouˇzit´ı metody SEARCH je resourcetag porovn´an a pokud je shodn´ y, je dan´a zmˇena ignorov´ana. U kolekc´ı je nutn´e detekovat faleˇsn´e zmˇeny pouze u nov´ ych kolekc´ı, zmˇenˇen´e kolekce nejsou nikdy faleˇsnˇe nahl´aˇseny. T´ımto jednoduch´ ym algoritmem jsou spolehlivˇe odliˇseny faleˇsn´e zmˇeny od skuteˇcn´ ych zmˇen.
4.9
P´ arov´ an´ı zdroj˚ u
Jak jiˇz bylo naznaˇceno v sekci 4.6.1, je nutn´e pˇri detekci zmˇen v kolekc´ıch p´arovat stejn´e zdroje z r˚ uzn´ ych replik, tak aby nedoch´azelo k nechtˇen´ ym duplikac´ım obsahu. P´arov´an´ı stejn´ ych kolekc´ı je intuitivnˇe ˇreˇseno pouˇzit´ım URI kolekce, jelikoˇz stejn´e kolekce na r˚ uzn´ ych replik´ach maj´ı stejn´e URI - jsou um´ıstˇen´e na stejn´e pozici ve stromˇe a maj´ı shodn´ y n´azev. P´arov´an´ı dokument˚ u je sloˇzitˇejˇs´ı probl´em, jelikoˇz je nelze p´arovat intuitivnˇe jako kolekce. Stejn´e dokumenty mohou na r˚ uzn´ ych serverech b´ yt uloˇzeny pod jin´ ymi n´azvy a jejich UID se tak´e liˇs´ı, jelikoˇz je pˇridˇelov´ano replikami a je urˇceno pouze pro ˇcten´ı. Pro dokumenty je tedy nutn´e navrhnout sofistikovanˇejˇs´ı algoritmus. Ide´aln´ı je pouˇzit´ı obsahu dokumentu, jelikoˇz pokud jsou dokumenty stejn´e, je stejn´ y i jejich obsah. K tomuto u ´ˇcelu je pro kaˇzd´ y dokument poˇc´ıt´an hash ˇretˇezec MD5 funkc´ı, kter´ y je n´aslednˇe uloˇzen pod atribut object.hash, jelikoˇz je pro vˇsechny kopie zdroje stejn´ y. Hash ˇretˇezec je kompaktnˇejˇs´ı reprezentace obsahu neˇz cel´ y obsah, je mnohem rychleji porovn´av´an a pravdˇepodobnost shodn´eho hashe je zanedbateln´a. Hash ˇretˇezec je moˇzn´e jednoduˇse generovat u nestrukturovan´ ych dokument˚ u z cel´eho obsahu, jelikoˇz je obsah dokumentu st´al´ y. Situace se ovˇsem komplikuje u strukturovan´ ych dokument˚ u, kter´e obsahuj´ı pro kaˇzdou repliku specifick´e identifik´atory a ˇcasov´e znaˇcky. N´asleduj´ıc´ı seznam pˇredepisuje, jak´e pouˇz´ıvan´e atributy je nutn´e ze strukturovan´ ych dokument˚ u vynechat pˇred generov´an´ım hashe: • UID - identifik´ator dokumentu stejn´ y jako vlastnost UID, • REV - ˇcasov´a znaˇcka modifikace dokumentu, • X-NEXT-ALARM a blok VALARM - ˇcas upozornˇen´ı na u ´kol nebo kalend´aˇrovou ud´alost, kter´ y se ˇcasto mˇen´ı a je proto vhodn´e ho vynechat, aby nezp˚ usoboval faleˇsn´e duplikace,
38
N´avrh modelu synchronizace
P´arov´an´ı zdroj˚ u
• PERCENT-COMPLETE a STATUS - speci´aln´ı vlastnosti u ´kolu, kter´e se ˇcasto mˇen´ı a je proto vhodn´e je vynechat. Pro sn´ıˇzen´ı pravdˇepodobnosti ˇspatn´eho sp´arov´an´ı pˇri vygenerov´an´ı stejn´eho hash ˇretˇezce pro r˚ uzn´e dokumenty, je nav´ıc p´arov´an´ı prov´adˇeno s pouˇzit´ım URI rodiˇcovsk´e kolekce a typu dokumentu. Sp´arov´an´ı dokument˚ u t´ımto algoritmem je spolehliv´e, m´a ovˇsem znaˇcnou nev´ yhodu. Pro v´ ypoˇcet hash ˇretˇezce je nutn´e st´ahnout cel´ y obsah dokumentu na lok´aln´ı disk, coˇz zp˚ usobuje z´atˇeˇz jak na stranˇe serveru, tak na stranˇe synchronizaˇcn´ıho procesu. Ide´aln´ım ˇreˇsen´ım by byla moˇznost uloˇzit na repliku vlastn´ı synchronizaˇcn´ı ID, kter´ ym by se dokumenty p´arovaly, nebo alespoˇ n poskytovat pasivn´ı vlastnost hash, kde by byl hash ˇretˇezec jiˇz spoˇc´ıt´an a pˇrenesen pouze jako kr´atk´ y textov´ y ˇretˇezec. Bohuˇzel nen´ı moˇzn´e do Kerio Connect serveru zasahovat a tak v´ yˇse zm´ınˇen´ y algoritmus je nejlepˇs´ım spolehliv´ ym ˇreˇsen´ım.
4.9.1
Konflikt tˇ r´ıd kolekc´ı
Pˇri p´arov´an´ı kolekc´ı m˚ uˇze doj´ıt k tomu, ˇze kolekce se stejnou URI, a tud´ıˇz i stejn´ ym jm´enem, m˚ uˇze b´ yt detekov´ana na v´ıce replik´ach s rozd´ılnou tˇr´ıdou. Rozd´ıln´e tˇr´ıdy kolekc´ı vyvolaj´ı konflikt, jelikoˇz zcela jistˇe kaˇzd´a z kolekc´ı obsahuje r˚ uzn´e vnitˇrn´ı ˇcleny, a nen´ı tedy moˇzn´e tyto kolekce synchronizovat. Konflikt je nutn´e vyˇreˇsit automaticky, protoˇze nelze poˇz´adat uˇzivatele o v´ ybˇer spr´avn´e tˇr´ıdy kolekce. Prvn´ı nalezen´a kolekce je uzn´ana jako spr´avn´a a nekonfliktn´ı, coˇz znamen´a, ˇze tˇr´ıda objektu i kopie jsou shodn´e (object.container class = copy.class). Jakmile je s objektem sp´arov´ana jin´a kolekce, jej´ıˇz tˇr´ıda je rozd´ıln´a (object.container class 6= copy.class), je oznaˇcena pro synchronizaˇcn´ı proces jako konfliktn´ı: • V konfliktn´ıch kolekc´ıch se nehledaj´ı zmˇeny, protoˇze stejnˇe nen´ı moˇzn´e je replikovat do nekonfliktn´ıch kolekc´ı, • Do konfliktn´ıch kolekc´ı se nereplikuj´ı ˇclenov´e nekonfliktn´ıch kolekc´ı, protoˇze nen´ı jist´e, zda tam patˇr´ı, • Operace odstranˇen´ı konfliktn´ı i nekonfliktn´ı kolekce se propaguje pouze na kopie stejn´e tˇr´ıdy, protoˇze se jedn´a o odstranˇen´ı konfliktu. Konflikt tˇr´ıd kolekc´ı je vyˇreˇsen, jakmile je odstranˇena kolekce s konfliktn´ı tˇr´ıdou. Odstranˇen´ı se nepropaguje na nekonfliktn´ı kolekce a tak je konfliktn´ı kolekce ihned po odstranˇen´ı nahrazena kolekc´ı nekonfliktn´ı. Pokud dojde k odstranˇen´ı nekonfliktn´ı kolekce a z´aroveˇ n existuj´ı konfliktn´ı kolekce, je tˇr´ıda objektu object.container class pˇreps´ana tˇr´ıdou prvn´ı konfliktn´ı kolekce, ˇc´ımˇz je konflikt odstranˇen a kolekce zreplikov´ana. Jin´ ym moˇzn´ ym ˇreˇsen´ım by bylo navrhnutou konfliktn´ı kolekci odstranit a nahradit nekonfliktn´ı, pˇr´ıpadnˇe konfliktn´ı kolekci pˇrejmenovat a t´ım uvolnit m´ısto pro kolekci nekonfliktn´ı. Obˇe ˇreˇsen´ı vˇsak zasahuj´ı do struktury server˚ u bez pˇriˇcinˇen´ı uˇzivatele, coˇz je nevhodn´e chov´an´ı, kter´e m˚ uˇze p˚ usobit jako chybn´e. Navrˇzen´ y algoritmus poˇc´ıt´a i se vznikem v´ıcen´asobn´eho konfliktu, kdy v´ıce jak dvˇe tˇr´ıdy jsou pˇr´ıtomny nad stejnou kolekc´ı, a um´ı jej vyˇreˇsit. Podobn´ y konflikt nen´ı u dokument˚ u moˇzn´ y, jelikoˇz p´arov´an´ı prob´ıh´a i podle typu dokumentu. 39
N´avrh modelu synchronizace
4.10
Poˇrad´ı operac´ı
Poˇ rad´ı operac´ı
Servery u kaˇzd´eho zdroje ukl´adaj´ı re´aln´ y ˇcas posledn´ı modifikace - vlastnost Last-modified je tedy moˇzn´e urˇcit happend-before relaci s pouˇzit´ım syntaktick´eho pl´anov´an´ı re´aln´ ymi hodinami, jak je pops´ano v sekci 3.4.1. Servery ovˇsem nemus´ı b´ yt ˇcasovˇe synchronizov´any a jejich re´aln´e hodiny se mohou rozch´azet. Neexistuje ovˇsem jin´a metoda pro urˇcen´ı happend-before relace neˇz pouˇzit´ı re´aln´ ych hodin, proto mus´ıme metodu pouˇz´ıt, i kdyˇz nemus´ı b´ yt vˇzdy pˇresn´a. I pˇresto je st´ale lepˇs´ı neˇz urˇcovat happend-before relaci n´ahodnˇe, coˇz v´ıme, ˇze pˇresn´e nebude nikdy. Pro pl´anov´an´ı m˚ uˇzeme pouˇzit´ı i s´emantick´e pl´anov´an´ı popsan´e v sekci 3.4.2. Operace proveden´e nad r˚ uzn´ ymi zdroji jsou na sobˇe nez´avisl´e, protoˇze zdroje se navz´ajem neovlivˇ nuj´ı. Tyto operace proto m˚ uˇzeme oznaˇcit za komutativn´ı a prov´adˇet je v libovoln´em poˇrad´ı. Operace je d´ale moˇzn´e ˇradit podle jejich s´emantiky - vytvoˇren´ı, u ´prava a smaz´an´ı. Pro urˇcen´ı poˇrad´ı operac´ı definujeme z v´ yˇse zm´ınˇen´eho jednoduch´a pravidla, kter´ ymi se bude synchronizaˇcn´ı algoritmus ˇr´ıdit: • Operace nad r˚ uzn´ ymi zdroji jsou komutativn´ı a je moˇzn´e je prov´est v libovoln´em poˇrad´ı. • Operace pˇrid´an´ı bude vˇzdy pˇredch´azet operaci u ´pravy nad stejn´ ym zdrojem, protoˇze nen´ı moˇzn´e upravovat neexistuj´ıc´ı dokument. • Operace smaz´an´ı bude vˇzdy pˇredch´azet operaci u ´pravy nad stejn´ ym zdrojem. Pokud totiˇz bude zdroj smaz´an, nem´a smysl ho pˇredt´ım modifikovat a operace u ´pravy mohou b´ yt vynech´any. • Stejn´e operace u ´pravy nad stejn´ ym zdrojem budou ˇrazeny podle ˇcasov´ ych znaˇcek proveden´e u ´pravy. • Operace se stejnou ˇcasovou znaˇckou u ´pravy budou seˇrazeny n´ahodnˇe, protoˇze nen´ı moˇzn´e d´ale urˇcit jejich poˇrad´ı. • Operace pˇrid´an´ı nad stejn´ ym zdrojem nen´ı nutn´e ˇradit, protoˇze syst´em je statetransfer a dovoluje prov´est pouze jednu operaci pˇrid´an´ı a ostatn´ı operace pˇrid´an´ı jsou operac´ı u ´pravy. • Operace smaz´an´ı nad stejn´ ym zdrojem nen´ı nutn´e ˇradit, protoˇze se opˇet jedn´a o state-transfer syst´em, ve kter´em je operace smaz´an´ı provedena pouze jednou. Z v´ yˇse zm´ınˇen´ ych pravidel je moˇzn´e sestavit deterministick´e poˇrad´ı vˇsech operac´ı, kter´e se v syst´emu vyskytnou. Aby toto poˇrad´ı bylo persistentn´ı i pˇri v´ ypadku replik a nezdaˇren´e aktualizaci, je nutn´e jej uloˇzit do datab´aze. A jelikoˇz staˇc´ı pouze ukl´ad´an´ı poˇrad´ı operac´ı u ´pravy, nebot’ ostatn´ı operace maj´ı pouze jedno pevn´e poˇrad´ı, je moˇzn´e k reprezentaci poˇrad´ı pouˇz´ıt inkrement´aln´ı ˇc´ıseln´e ˇrady - verze, kter´e uloˇz´ıme u kaˇzd´e kopie objektu v datab´azi, ˇc´ımˇz ˇrekneme, v jak´e verzi je dan´a kopie. Poˇrad´ı operac´ı u ´pravy je urˇceno poˇrad´ım verz´ı. Aby bylo moˇzn´e poznat, co se zmˇenilo od posledn´ı aktualizace, obsahuje objekt dalˇs´ı verzi, kter´a oznaˇcuje posledn´ı zreplikovanou verzi na vˇsech replik´ach. Pro verze tedy plat´ı n´asleduj´ıc´ı pravidla:
40
N´avrh modelu synchronizace
Poˇrad´ı operac´ı
• Pokud copyα .version = object.version, kopie zdroje na replice α je aktu´aln´ı. • Pokud copyα .version < object.version, kopie zdroje na replice α je zastaral´a, jelikoˇz nebyla z d˚ uvod˚ u v´ ypadku nahr´ana posledn´ı aktualizace. • Pokud copyα .version > object.version, nad kopi´ı zdroje na repliace α byla provedena operace u ´pravy. • Pokud copyα .version > copyβ .version, operace u ´pravy zdroje na replice α byla provedena po u ´pravˇe kopie na replice β. • Pokud ∀copy.version > object.version, ˇz´adn´a z replik nem´a aktu´aln´ı verzi, jelikoˇz na vˇsech replik´ach byla provedena u ´prava. Tento jednoduch´ y a pr˚ uhledn´ y syst´em dvou verz´ı plnˇe pokryje poˇzadavky na poˇrad´ı operac´ı a vyhne se tak nutnosti sloˇzit´eho uchov´av´an´ı vˇsech proveden´ ych operac´ı pro kaˇzdou repliku. Zach´azen´ı s verzemi je n´azornˇe uk´az´ano na n´asleduj´ıc´ıch pˇr´ıkladech.
Obr´azek 4.10: Novˇe sp´arovan´ y zdroj pˇri pomal´e synchronizaci Obr´azek 4.10 ilustruje detekci a sp´arov´an´ı tˇr´ı stejn´ ych zdroj˚ u na tˇrech replik´ach pˇri pomal´e synchronizaci pro dokument a kolekci. V horn´ı ˇca´sti obr´azku, kde doˇslo ke spr´avn´emu sp´arov´an´ı vˇsech tˇr´ı dokument˚ u, nen´ı nutn´e operace nijak ˇradit, protoˇze dokumenty mus´ı b´ yt stejn´e (viz sekce 4.9), a verze je nastavena na 1. Toto ovˇsem neplat´ı pro kolekce, kde nen´ı p´arov´an´ı prov´adˇeno podle obsahu a kolekce nemus´ı b´ yt stejn´e. Operace pˇrid´an´ı kolekce pˇri pomal´e synchronizaci jsou proto ˇrazeny stejnˇe jako operace u ´pravy. Druh´a ˇca´st obr´azku 4.10 naznaˇcuje stejnou situaci pro kolekce, kdy verze kolekc´ı jsou seˇrazeny B, A a C podle ˇcas˚ u modifikace stejnˇe jako u operac´ı u ´pravy a na ˇza´dn´e replice nen´ı aktu´aln´ı verze, aby doˇslo k aktualizaci vˇsech replik. Na dalˇs´ım pˇr´ıkladu na obr´azku 4.11 je zdroj na vˇsech serverech ve shodn´e verzi 1. Verze posledn´ı aktualizace uloˇzen´a v synchronizaˇcn´ım procesu je tak´e 1, tedy objekt je konzistentn´ı. Detekce zmˇen je prov´adˇena na serverech abecednˇe. Prvn´ı byla detekov´ana zmˇena proveden´a v 13:01:05 na serveru A, je tedy nastavena verze kopie na hodnotu 2. Jako druh´a je detekov´ana zmˇena ze serveru B proveden´a v 13:01:02, ˇc´ımˇz se ˇrad´ı pˇred zmˇenu provedenou na serveru A. Verze jsou tedy pˇrepl´anov´any tak, aby zmˇena na serveru A byla zaˇrazena za zmˇenu na serveru B. Nakonec je nutn´e reprezentovat persistentnˇe i operace pˇrid´an´ı a smaz´an´ı, kter´e vˇzdy nastanou pouze jednou pro jeden zdroj. Operace pˇrid´an´ı je reprezentov´ana neexistuj´ıc´ı 41
N´avrh modelu synchronizace
Aktualizace
Obr´azek 4.11: V´ıcen´asobn´a operace u ´pravy vazbou kopie mezi objektem a lokac´ı. Jakmile je tedy detekov´ano pˇrid´an´ı, je vytvoˇren objekt a kopie pouze pro lokaci, na kter´e bylo pˇrid´an´ı detekov´ano. Operace smaz´an´ı je indikov´ana nastaven´ım pˇr´ıznaku copy.is remove na hodnotu 1 - jedn´a se o pouˇzit´ı algoritmu Culling tombstones ze sekce 3.6.2. Jednoduˇse je tak zajiˇstˇena ochrana pˇri v´ ypadku bˇehem prov´adˇen´ı operac´ı.
4.11
Aktualizace
Po dokonˇcen´ı detekce proveden´ ych operac´ı a urˇcen´ı jejich poˇrad´ı je nutn´e tyto zmˇeny zreplikovat. Jako prvn´ı se prov´ad´ı operace smaz´an´ı a po dokonˇcen´ı vˇsech operac´ı smaz´an´ı jsou provedeny operace pˇrid´an´ı a u ´pravy zdroj˚ u.
4.11.1
Operace smaz´ an´ı
Zdroj na replice m´a b´ yt smaz´an, pokud copy.is remove = 1. Pˇri smaz´an´ı zdroje na jednom serveru mus´ı doj´ıt ke smaz´an´ı stejn´eho zdroje na vˇsech serverech. Pokud nav´ıc je zdroj kolekc´ı, je nutn´e smazat i vˇsechny jej´ı ˇcleny. Naˇstˇest´ı protokol WebDAV umoˇzn ˇuje smazat kolekci a vˇsechny jej´ı ˇcleny jedn´ım poˇzadavkem DELETE, nemus´ıme tedy smazat vˇzdy vˇsechny ˇcleny, ale pouze zdroj, kter´ y byl smaz´an. Jakmile je kopie s pˇr´ıznakem copy.is remove smaz´ana fyzicky z repliky, je smaz´ana i jej´ı kopie z datab´aze a pokud neexistuje jiˇz ˇz´adn´a kopie zdroje, je smaz´an i objekt a zdroj pˇrestane existovat. T´ımto zp˚ usobem se pˇredejde situaci, kdy v dobˇe smaz´an´ı bude nˇekter´ y ze server˚ u nedostupn´ y a zdroj by se z tohoto serveru obnovil zpˇet na ostatn´ı servery.
4.11.2
Aktualizace zdroje
Zdroj copyα na replice α je povaˇzov´an za neaktu´aln´ı, pokud je splnˇena alespoˇ n jedna z n´asleduj´ıc´ıch podm´ınek: • Pokud neexistuje z´aznam o copyα , zdroj byl vytvoˇren na jin´e replice a mus´ı b´ yt nahr´an na repliku α v nejnovˇejˇs´ı verzi. • Pokud ∃copyi .version > object.version a copyi .version > copyα .version, existuje jin´a novˇejˇs´ı verze zdroje neˇz copyα a je nutn´e zdroj na replice α aktualizovat. 42
N´avrh modelu synchronizace
Aktualizace
• Pokud copyα .version < object.version, je zdroj na replice α neaktu´aln´ı kv˚ uli pˇredchoz´ımu v´ ypadku a nezdaˇril´e aktualizaci na verzi object.version.
Obr´azek 4.12: Pouˇzit´ı Thomas Write Rule pro aktualizaci Aktualizace zdroj˚ u je prov´adˇena vˇzdy od koˇrene stromu po listy, aby se pˇredeˇslo pˇr´ıpad˚ um, kdy chceme nahr´at na repliku zdroj, ale rodiˇcovsk´a kolekce zat´ım neexistuje, coˇz by vyvolalo chybu a ne´ uspˇeˇsnou replikaci. Aktualizaci je jednoduˇse moˇzn´e prov´est s pouˇzit´ım Thomas Write Rule tak, ˇze nalezneme nejnovˇejˇs´ı verzi zdroje, kterou zreplikujeme na ostatn´ı repliky. Tento jednoduch´ y algoritmus je ovˇsem ˇcistˇe state-transfer a neˇreˇs´ı konflikty v operac´ıch, coˇz je v poˇra´dku napˇr´ıklad pro nestrukturovan´e dokumenty, do kter´ ych nen´ı moˇzn´e zasahovat. Pokud bychom ovˇsem stejn´ y algoritmus pouˇzili pro strukturovan´e dokumenty, napˇr´ıklad kontakt, tak by pˇri zmˇenˇe jm´ena na replice α a telefonu na replice β byla na repliky propagov´ana jen jedna zmˇena a druh´a zmˇena by byla zahozena a navr´acena do p˚ uvodn´ıho stavu jak zobrazuje obr´azek 4.12.
4.11.3
Detekce konflikt˚ u
Abychom vylepˇsili algoritmus uveden´ y v sekci 4.11.2, je nutn´e implementovat zpracov´an´ı konflikt˚ u. Detekce konflikt˚ u je jiˇz vyˇreˇsena ukl´adan´ ymi verzemi. Konflikt nast´av´a, jakmile existuje v´ıce jak jedna verze kopie copy.version vyˇsˇs´ı neˇz object.version, coˇz znamen´a, ˇze nastala v´ıce neˇz jedna operace u ´pravy zdroje. Obr´azek 4.13 pˇredstavuje ˇctyˇri moˇzn´e pˇr´ıklady stavu verz´ı kopi´ı zdroje. V prvn´ım pˇr´ıpadˇe byla detekov´ana pouze jedna zmˇena a operace nen´ı konfliktn´ı, je moˇzn´e prov´est klasick´ y state-transfer pˇrenos nejnovˇejˇs´ı verze. Pˇr´ıpad dvˇe zobrazuje dvˇe konfliktn´ı operace zmˇeny na serverech A a B, kdy je nutn´e konflikt vyˇreˇsit a zreplikovat slouˇcen´ y zdroj na vˇsechny repliky. Pˇr´ıklad tˇri obsahuje tˇri odliˇsn´e verze kopi´ı, ale pouze jedna je novˇejˇs´ı neˇz aktu´aln´ı verze zdroje, jelikoˇz server C je neaktu´aln´ı. V tomto pˇr´ıpadˇe je detekov´ana jen jedna operace u ´pravy, tud´ıˇz nenastal konflikt. V posledn´ım pˇr´ıpadˇe nebyla provedena ˇz´adn´a zmˇena, jen server A je neaktu´aln´ı. Opˇet je tedy moˇzn´e pouˇz´ıt pˇr´ım´ y state-transfer pˇrenos. 43
N´avrh modelu synchronizace
Aktualizace
Obr´azek 4.13: Moˇzn´e pˇr´ıpady aktualizace verz´ı
4.11.4
Zpracov´ an´ı konflikt˚ u
Jakmile je detekov´an konflikt, je nutn´e jej adekv´atnˇe vyˇreˇsit, aby nedoˇslo k ˇz´adn´e nebo k co nejmenˇs´ı ztr´atˇe proveden´ ych operac´ı. Bohuˇzel WebDAV protokol je ˇcistˇe state-transfer a oznamuje pouze, ˇze zmˇena ve zdroji nastala, ale jiˇz neˇr´ık´a, co pˇresnˇe se ve zdroji nebo vlastnostech zdroje zmˇenilo. Mus´ıme proto navrhnout vlastn´ı algoritmus, kter´ y bude umoˇzn ˇovat detekci zmˇen ve zdroj´ıch a bude plnˇe automatick´ y, jelikoˇz nen´ı moˇzn´e dotazovat se uˇzivatele. Aby bylo moˇzn´e zjistit, co se ve zdroji zmˇenilo, je nutn´e m´ıt k dispozici referenˇcn´ı verzi zdroje. Referenˇcn´ı verze je zdroj v p˚ uvodn´ı nezmˇenˇen´e verzi, neˇz byla na replice zmˇena provedena. Jako referenˇcn´ı zdroj je ide´alnˇe moˇzn´e pouˇz´ıt libovolnou kopii, pro kterou plat´ı copy.version = object.version, ˇcili libovolnou aktu´aln´ı a nezmˇenˇenou verzi zdroje. Jakmile je k dispozici referenˇcn´ı zdroj, je moˇzn´e zjistit, jak´e vlastnosti a atributy jsou ve zdroji nov´e, zmˇenˇen´e nebo smazan´e. Vstupem do ˇreˇsitele konflikt˚ u je referenˇcn´ı zdroj a konfliktn´ı zmˇeny a v´ ystupem je slouˇcen´a verze zdroje. Slouˇcen´ı prob´ıh´a iterativnˇe tak, ˇze konfliktn´ı zmˇeny jsou seˇrazeny vzestupnˇe dle verz´ı, a jsou porovn´av´any s referenˇcn´ı verz´ı zdroje. Na zaˇca´tku je nov´a verze zdroje stejn´a jako referenˇcn´ı verze zdroje a postupnˇe jsou detekovan´e zmˇeny propagov´any do slouˇcen´e verze. Mˇejme atribut α, referenˇcn´ı verzi zdroje R, zmˇenˇenou verzi zdroje A a novˇe vytv´aˇren´ y zdroj M . Nov´ y zdroj M je aktualizov´an bˇehem ˇreˇsen´ı konflikt˚ u podle n´asleduj´ıc´ıch pravidel: • Pokud R.α = A.α, je atribut nezmˇenˇen a tud´ıˇz vynech´an, aby nebyla pˇreps´ana jiˇz proveden´a zmˇena v M . Jeho hodnota se jiˇz v nov´em zdroji M nach´az´ı, jelikoˇz byla zkop´ırov´ana z referenˇcn´ı verze pˇriˇrazen´ım na zaˇca´tku. • Pokud R.α 6= A.α, je atribut zmˇenˇen a pˇreps´an v novˇe vytv´aˇren´em zdroji M.α := A.α. Pokud bude atribut zmˇenˇen i v dalˇs´ı verzi, bude hodnota opˇet pˇreps´ana. • Pokud ∃R.α a @A.α, byl atribut odstranˇen a je odstranˇen i z vytv´aˇren´eho zdroje M . Pokud bude v dalˇs´ı verzi zdroje atribut zmˇenˇen, bude znovu pˇrid´an, jelikoˇz 44
N´avrh modelu synchronizace
Aktualizace
smazan´ y atribut znamen´a pro uˇzivatele nastaven´ı atributu na pr´azdnou hodnotu, coˇz je v podstatˇe typ zmˇeny. • Pokud @R.α a ∃A.α, byl atribut novˇe pˇrid´an a je pˇrid´an i do vytv´aˇren´eho zdroje M.α = A.α. Pokud bude pˇrid´an i v dalˇs´ı verzi, bude hodnota stejnˇe jako v pˇr´ıpadˇe zmˇeny pˇreps´ana. Z pravidel vypl´ yv´a, ˇze operace pˇrid´an´ı a operace smaz´an´ı jsou variacemi operace zmˇeny. Pokud je atribut smaz´an, byla provedena operace zmˇeny na pr´azdnou hodnotu, a pokud je atribut pˇrid´an, byla provedena operace zmˇeny na nepr´azdnou hodnotu. Obr´azek 4.14 ilustruje v´ yˇse uveden´a pravidla na pˇr´ıkladˇe slouˇcen´ı dvou konfliktn´ıch zmˇen na serverech A a B v˚ uˇci referenˇcn´ımu zdroji na serveru C do nov´eho zdroje. Nov´ y zdroj, kter´ y vznikne slouˇcen´ım konfliktn´ıch zmˇen, je nutn´e oznaˇcit zcela novou verz´ı, aby byla splnˇena pravidla ze sekce 4.11.2.
Obr´azek 4.14: Zpracov´an´ı konfliktu dvou zmˇen v˚ uˇci referenˇcn´ımu zdroji Probl´em ovˇsem nast´av´a, pokud nem´ame k dispozici referenˇcn´ı verzi zdroje. Takov´ y pˇr´ıpad nastane, pokud jsou zmˇeny detekov´any na vˇsech replik´ach a tud´ıˇz ˇz´adn´ y ze zdroj˚ u nen´ı v aktu´aln´ı verzi. Pro tyto pˇr´ıpady by bylo nutn´e uchov´avat vˇzdy aktu´aln´ı verzi zdroje na lok´aln´ım disku, jelikoˇz protokol WebDAV neumoˇzn ˇuje z´ıskat dokument v poˇzadovan´e verzi, a je moˇzn´e si jednoduˇse pˇredstavit objem takto uchov´avan´ ych dat. Vznik takov´eho pˇr´ıpadu je ovˇsem velice nepravdˇepodobn´ y a kv˚ uli zanedbateln´e pravdˇepodobnosti nem´a smysl komplikovat a zvyˇsovat pamˇet’ovou n´aroˇcnost algoritmu. Tento probl´em je tedy zanedb´an a i kdyˇz nastane, je uspokojivˇe vyˇreˇsen, jak naznaˇcuje obr´azek 4.15. Zmˇena byla detekov´ana na vˇsech serverech A, B i C a nen´ı tud´ıˇz moˇzn´e z´ıskat referenˇcn´ı verzi zdroje ve verzi 1. Je moˇzn´e si povˇsimnou, ˇze hodnoty se pokaˇzd´e pˇrepisuj´ı novˇejˇs´ı verz´ı, jelikoˇz je vˇzdy detekov´ano pˇrid´an´ı nov´eho atributu v˚ uˇci pr´azdn´emu referenˇcn´ımu zdroji. Operace zmˇeny ani odstranˇen´ı atribut˚ u nejsou detekov´any. Algoritmus ˇreˇsen´ı konflikt˚ u bez referenˇcn´ıho objektu by bylo moˇzn´e vylepˇsit tak, ˇze by se nov´e atributy pˇrid´avali i do pr´azdn´eho referenˇcn´ıho objektu. Bylo by tak moˇzn´e 45
N´avrh modelu synchronizace
Pl´anovaˇc
Obr´azek 4.15: Zpracov´an´ı konfliktu tˇr´ı zmˇen bez referenˇcn´ıho zdroje detekovat v dalˇs´ıch sluˇcovan´ ych verz´ıch zmˇeny v hodnot´ach atribut˚ u. Probl´em by ovˇsem nastal, pokud by v dalˇs´ıch verz´ıch zdroje atribut chybˇel, jelikoˇz by bylo detekov´ano odstranˇen´ı atributu. Nen´ı totiˇz moˇzn´e automaticky urˇcit, zda je spr´avnˇe operace odstranˇen´ı nebo pˇrid´an´ı. Nejlepˇs´ı je zvolit takov´ y kompromis, kter´ y bude co nejm´enˇe destruktuvn´ı, a takov´ ym je pr´avˇe vypnut´ı detekce odstranˇen´ı. Uˇzivatel se sn´az vyrovn´a s t´ım, ˇze data byla nechtˇenˇe vyplnˇena, neˇz ˇze data zmizela. Navrhnut´ y algoritmus je moˇzn´e pouˇz´ıt jak pro vlastnosti zdroje, tak pro strukturovan´e dokumenty, u kter´ ych jsou vlastnosti nav´ıc hierarchicky vnoˇreny. Pro nestrukturovan´e dokumenty nem´a smysl, jelikoˇz nedok´aˇzeme rozpoznat vnitˇrn´ı strukturu. Algoritmus by se dal d´ale rozˇs´ıˇrit o detekci operac´ı na u ´rovni textov´ ych hodnot jednotliv´ ych atribut˚ u, napˇr´ıklad odstranˇen´ı slova a z´aroveˇ n pˇrid´an´ı slova na jin´e replice. Toto rozˇs´ıˇren´ı by vˇsak bylo pˇr´ıliˇs sloˇzit´e a nespolehliv´e v komplikovan´ ych situac´ıch, coˇz by mohlo zp˚ usobit vznik nesmysln´ ych dat.
4.12
Pl´ anovaˇ c
Sekce 4.6 uvedla hned tˇri moˇzn´e zp˚ usoby synchronizace Kerio Connect server˚ u - pomalou synchronizaci, zmˇenovou synchronizaci a aktivn´ı synchronizaci. Jednotliv´e metody synchronizace je nutn´e pl´anovat tak, aby byly vˇsechny zmˇeny dostateˇcnˇe rychle propagov´any, ale servery nesm´ı b´ yt pˇret´ıˇzeny. Jelikoˇz nen´ı moˇzn´e protokolem WebDAV zjistit moment´aln´ı zat´ıˇzen´ı server˚ u, je nutn´e synchronizaci pl´anovat intuitivnˇe a inteligentnˇe: • Pomal´a synchronizace znaˇcnˇe zatˇeˇzuje jak server, tak synchronizaˇcn´ı proces, protoˇze mus´ı prohledat veˇsker´e kolekce a dokumenty v nich a sp´arovat je mezi sebou. Naˇstˇest´ı je nutn´e ji spouˇstˇet pouze jednou, server totiˇz zmˇeny spolehlivˇe oznamuje pˇri kaˇzd´e zmˇenov´e synchronizaci, protoˇze se vˇzdy pt´ame oproti posledn´ımu u ´spˇeˇsn´emu stavu.
46
N´avrh modelu synchronizace
Pl´anovaˇc
• Zmˇenov´a synchronizace je oproti pomal´e synchronizaci mnohem m´enˇe n´aroˇcn´a, ale st´ale je nutn´e prohledat veˇsker´e kolekce na vˇsech serverech. Pokud se nahromad´ı velk´e mnoˇzstv´ı zmˇen, je srovnateln´a s pomalou synchronizac´ı. Je proto nutn´e ji spouˇstˇet dostateˇcnˇe ˇcasto, aby nedoˇslo k n´ahl´emu zahlcen´ı synchronizace, ale ne tak ˇcasto, aby doˇslo k pˇret´ıˇzen´ı serveru hled´an´ım zmˇen. • Aktivn´ı synchronizace je nejm´enˇe n´aroˇcn´a ze vˇsech metod. Ale nen´ı moˇzn´e ji aplikovat na vˇsechny zdroje, jelikoˇz by dotazov´an´ı na zmˇeny vyvolalo pˇr´ıliˇsnou z´atˇeˇz serveru. Je proto nutn´e ji kombinovat se zmˇenovou synchronizac´ı. Spouˇstˇen´ı tˇechto metod je potˇreba naˇcasovat tak, aby nedoˇslo k pˇr´ıliˇsn´emu zat´ıˇzen´ı serveru ˇcast´ ym spouˇstˇen´ım synchronizac´ı nebo naopak skokov´emu pˇret´ıˇzen´ı serveru pˇri nahromadˇen´ı operac´ı. Spr´avn´e ˇcasov´an´ı je nutn´e zvolit dle konkr´etn´ıho ˇreˇsen´ı a struktury synchronizaˇcn´ıho stromu.
4.12.1
Heuristick´ a synchronizace
Jelikoˇz zmˇenov´a synchronizace prohled´av´a vˇsechny sloˇzky a je natolik n´aroˇcn´a, ˇze nejde spouˇstˇet ˇcasto, a aktivn´ı synchronizace je moˇzn´e aplikovat pouze na nˇekter´e sloˇzky, je pˇrid´ana nov´a synchronizaˇcn´ı metoda s inteligenc´ı. Heuristick´a metoda vybere nejpravdˇepodobnˇejˇs´ı kolekci, ve kter´e mohlo doj´ıt ke zmˇenˇe, a provede synchronizaci t´eto kolekce. Jelikoˇz doch´az´ı k hled´an´ı zmˇen jen v jedn´e kolekci, je moˇzn´e tuto synchronizaci spouˇstˇet ˇcastˇeji a tud´ıˇz doc´ılit rychl´e propagace zmˇen a rozloˇzen´ı z´atˇeˇze. Vzorcem p = object.members ∗
time − copy.last searched at delay
z´ısk´ame poˇrad´ı p ve v´ ysledku vyhled´av´an´ı pro kaˇzdou kolekci. Promˇenn´a time je aktu´aln´ı ˇcasov´a znaˇcka a delay je poˇcet sekund mezi heuristick´ ymi synchronizacemi. Poˇcet ˇclen˚ u je pˇr´ımo u ´mˇern´ y poˇctu proveden´ ych heuristick´ ych synchronizac´ı od ˇcasu posledn´ı synchronizace v dan´e kolekci. Vzorec by bylo moˇzn´e doplnit o hodnotu object.depth hloubky ve stromˇe, ale tato hodnota nen´ı smˇerodatn´a, protoˇze hluboko vnoˇren´a kolekce s velk´ ym mnoˇzstv´ım dokument˚ u m˚ uˇze b´ yt stejnˇe v´ yznamn´a, jako kolekce se stejn´ ym mnoˇzstv´ım na prvn´ı u ´rovni. V´ ypoˇcet klade d˚ uraz na to, aby pˇri pouˇzit´ı pouze heuristick´e synchronizace mohlo doj´ıt k synchronizaci vˇsech kolekc´ı a pr´avˇe proto je u ´mˇernou hodnotou ˇcas posledn´ı synchronizace. Synchronizov´any jsou kolekce s nejvyˇsˇs´ım poˇrad´ım.
4.12.2
Rychlost propagace zmˇ en
Rychlost propagace zmˇen je z´avisl´a na um´ıstˇen´ı zdroje, kter´ y byl zmˇenˇen, a na pl´anovaˇci operac´ı. Nejmenˇs´ım moˇzn´ ym ˇcasem propagace je zpoˇzdˇen´ı mez´ı heuristickou nebo aktivn´ı synchronizac´ı. Nejvyˇsˇs´ım moˇzn´ ym ˇcasem propagace je zpoˇzdˇen´ı mezi zmˇenovou synchronizac´ı, kter´a detekuje veˇsker´e zmˇeny. Pr˚ umˇernou rychlost propagace je vˇsak moˇzn´e urˇcit aˇz se znalost´ı konkr´etn´ı struktury zdroj˚ u na serveru a jejich typ˚ u.
47
5 Implementace Z´avˇereˇcnou ˇca´st´ı t´eto pr´ace je navrˇzenou architekturu a algoritmus synchronizace z kapitoly 4 implementovat a otestovat v podobˇe spustiteln´eho programu a ovˇeˇrit tak jeho funkˇcnost a efektivitu. Implementace prob´ıh´a pˇr´ımo proti existuj´ıc´ım Kerio Connect server˚ um, na kter´ ych je moˇzn´e celou implementaci dostateˇcnˇe otestovat. Implementace mus´ı b´ yt pˇrenositeln´a mezi r˚ uzn´ ymi platformami jako Linux/UNIX, Windows a MAC OS. Bˇeh programu prob´ıh´a vˇzdy na pozad´ı bez grafick´eho rozhran´ı a pˇriˇcinˇen´ı uˇzivatele, do budoucna by totiˇz program mˇel b´ yt souˇca´st´ı Kerio Connect serveru.
5.1
Programov´ e prostˇ redky
Moˇzn´e programov´e prostˇredky splˇ nuj´ıc´ı v´ yˇse uveden´e poˇzadavky jsou Java SE nebo C++. Oba programovac´ı jazyky jsou objektovˇe orientovan´e. Java SE vˇsak vynik´a svoj´ı jednoduchost´ı a vysoko´ urovˇ nov´ ymi prostˇredky, je tak´e velice snadno pˇrenositeln´a na r˚ uzn´e platformy. Java SE je orientov´ana na rapidn´ı v´ yvoj za cenu neefektivn´ıho pouˇzit´ı prostˇredk˚ u. Oproti tomu C++ programovac´ı jazyk je urˇcen pro implementaci kritick´ ych aplikac´ı s poˇzadavkem na v´ ykon. Nedostatek vysoko´ urovˇ nov´ ych prostˇredk˚ u kompenzuje efektivita a rychlost pouˇzit´ı n´ızko´ urovˇ nov´ ych prostˇredk˚ u. Nev´ yhodou C++ je ovˇsem zhorˇsen´a pˇrenositelnost d´ıky pˇr´ım´emu pouˇzit´ı prostˇredk˚ u operaˇcn´ıho syst´emu. Pro u ´ˇcely implementace se pˇresto v´ıce hod´ı pr´avˇe C++, jelikoˇz je moˇzn´e velice efektivnˇe vyuˇz´ıvat programov´e prostˇredky a vytvoˇrit tak v´ ykonn´ y synchronizaˇcn´ı program, coˇz je d˚ uleˇzit´ ym mˇeˇr´ıtkem. Nav´ıc Kerio Connect server je naps´an tak´e v C++.
5.2
Knihovny
Pˇri v´ yvoji modern´ıch aplikac´ı je kladen d˚ uraz na pouˇzit´ı jiˇz existuj´ıc´ıch ˇreˇsen´ı m´ısto vlastn´ı implementace. Existuj´ıc´ı knihovny jsou otestov´any a odladˇeny mnoh´ ym pouˇz´ıv´an´ım a ˇcasto jsou multiplatformn´ı, je proto velice jednoduch´e je pouˇz´ıt v nov´e aplikaci. Poˇzadavky, kter´e jsou kladeny na knihovny pro pouˇzit´ı v t´eto pr´aci, jsou: • Knihovna mus´ı b´ yt vyd´ana pod licenc´ı LGPL, MIT, Apache nebo BSD, aby bylo moˇzn´e vyuˇz´ıt knihovnu pro komerˇcn´ı u ´ˇcely a nebylo nutn´e distribuovat zdrojov´e k´ody programu, • Knihovna mus´ı b´ yt dobˇre zdokumentov´ana. • V´ yvoj knihovny mus´ı b´ yt st´ale ˇziv´ y, aby bylo zaruˇceno, ˇze knihovna je st´ale pouˇz´ıvan´a, odladˇen´a a nen´ı zastaral´a. • Knihovna by mˇela b´ yt Thread-Safe, aby se pˇredeˇslo probl´em˚ um pˇri pˇr´ıpadn´em pouˇzit´ı v´ıcevl´aknov´eho programu. • Knihovna mus´ı b´ yt multiplatformn´ı, aby bylo moˇzn´e program pˇreloˇzit pro operaˇcn´ı syst´emy UNIX/Linux, Windows a MAC OS. 48
Implementace
Knihovny
Sqlite 3.7.11 SQLite je C knihovna, kter´a implementuje transakˇcn´ı SQL datab´azi bez nutnosti serveru a konfigurace. SQLite je nejrozˇs´ıˇrenˇejˇs´ı SQL datab´azov´ y syst´em na svˇetˇe. Tato knihovna se v´ ybornˇe hod´ı pro reprezentaci perzistentn´ı relaˇcn´ı datab´aze pˇredstaven´e v kapitole 4.5, pro podporu synchronizaˇcn´ıho procesu. SQLite verze 3 je vyd´av´ana bez licence. Neon 0.29.6 Neon je HTTP a WebDAV klientsk´a knihovna pouˇz´ıvaj´ıc´ı rozhran´ı v jazyce C. Knihovna obsahuje jak n´ızko´ urovˇ nov´e funkce pro komunikaci protokolem HTTP tak vysoko´ urovˇ nov´e funkce pro komunikaci protokolem WebDAV. Knihovna je vyd´av´ana pod licenc´ı LGPL. Libxml 2.7.8 Jelikoˇz WebDAV pouˇz´ıv´a XML technologii, je nutn´e naj´ıt knihovnu, kter´a by umˇela jednoduˇse parsovat XML dokumenty. Takovou knihovnou je Libxml2, kter´a obsahuje SAX parser pro ˇcten´ı obsahu XML dokument˚ u. V´ yhodou knihovny je tak´e jej´ı pˇr´ım´a podpora v knihovnˇe Neon. Libxml2 je vyd´av´ana pod licenc´ı MIT. OpenSSL 1.0.1 Knihovna OpenSSL implementuje Secure Sockets Layer (SSL v2/v3) a Transport Layer Security (TLS v1) protokoly a mimo jin´e i vˇseobecn´e kryptografick´e algoritmy. Tuto knihovnu pˇr´ımo implementuje Neon pro komunikaci prostˇrednictv´ım HTTPS protokolu. OpenSSL je vyd´av´ana pod licenc´ı Apache. Log4cpp 0.3.4 Log4cpp je C++ knihovna pro flexibiln´ı logov´an´ı do soubor˚ u, standardn´ıho v´ ystupu a jin´ ych c´ıl˚ u. Jedn´a se o pˇreps´an´ı zn´am´e Log4j Java knihovny do C++ prostˇred´ı s d˚ urazem na zachov´an´ı rozhran´ı. Log4cpp umoˇzn ˇuje efektivn´ı logov´an´ı na r˚ uzn´ ych u ´rovn´ıch d´ıky konfiguraˇcn´ım soubor˚ um. Knihovna je pouˇz´ıv´ana pro veˇsker´ y v´ ystup do soubor˚ u nebo konzole. Log4cpp je vyd´av´ana pod licenc´ı BSD.
49
Implementace
5.3
Architektura
Architektura
Architektura aplikace je dekomponov´ana do ˇctyˇr komponent, kter´e jsou pops´any v n´asleduj´ıc´ıch sekc´ıch. Komponenty jsou pops´any pouze z vnˇejˇsku a pˇresnou implementaci je moˇzn´e dohledat v dobˇre zdokumentovan´ ych zdrojov´ ych souborech. Cel´a aplikace je koncipov´ana jako proces s jedn´ım vl´aknem s moˇznost´ı bˇehu na pozad´ı bez uˇzivatelsk´eho rozhran´ı.
5.3.1
WebDAV klient
Prvn´ı komponentou aplikace je nadstavba knihovny Neon implementuj´ıc´ı potˇrebn´e metody a funkce WebDAV protokolu a zapouzdˇruje je do jednoduch´ ych metod a objekt˚ u. Diagram na obr´azku 5.1 pˇredstavuje objektov´ y model WebDAV komponenty.
Obr´azek 5.1: Objektov´ y model WebDAV klienta Pˇri pouˇz´ıv´an´ı WebDAV klienta je nutn´e zn´at pouze tˇr´ıdu Connection, kter´a obsahuje implementaci vol´an´ı vˇsech potˇrebn´ ych WebDAV metod. Tˇr´ıda se star´a o vytv´aˇren´ı a udrˇzov´an´ı HTTP spojen´ı na server, jeho zruˇsen´ı pˇri ukonˇcen´ı vol´an´ı a tak´e o autentifikaci a ovˇeˇren´ı certifik´atu serveru. Zpracov´an´ı prob´ıh´a ˇcistˇe proudovˇe, aby nemohlo doj´ıt k vyˇcerp´an´ı operaˇcn´ı pamˇeti u rozs´ahl´ ych poˇzadavk˚ u a odpovˇed´ı. Tˇr´ıda Connection definuje sadu v´ yjimek, kter´e jsou vyvol´any, jakmile nastane chyba uvnitˇr klienta: • UnauthorizedException - autentifikace se nezdaˇrila, • NotFoundException - zdroj nebyl nalezen, • ConnectionException - spojen´ı se nepodaˇrilo nav´azat nebo bylo zruˇseno. Pˇri vol´an´ı vˇetˇsiny metod je jako n´avratov´a hodnota vr´acena instance tˇr´ıdy Response zapouzdˇruj´ıc´ı odpovˇed’ serveru - hlaviˇcky, n´avratov´ y k´od a tˇelo odpovˇedi. Pokud je n´avratov´ y k´od odpovˇedi 207 Multistatus, je odpovˇed’ d´ale zpracov´av´ana tak, ˇze obsahuje instanci tˇr´ıdy MultiStatus reprezentuj´ıc´ı hromadnou odpovˇed’ serveru. Tˇr´ıda MultiStatus zajiˇst’uje z´aroveˇ n pˇreˇcten´ı XML tˇela odpovˇedi a vytvoˇren´ı ˇca´steˇcn´e odpovˇedi pro kaˇzd´ y jednotliv´ y vnitˇrn´ı stav hromadn´e odpovˇedi jako instanci tˇr´ıdy MultiStatusResponse.
50
Implementace
Architektura
Pokud maj´ı b´ yt v odpovˇedi vr´aceny vlastnosti zdroje, jsou vˇzdy uloˇzeny v ˇca´steˇcn´ ych odpovˇed´ıch 207 Multistatus n´avratov´eho k´odu. Instance tˇr´ıdy MultiStatusResponse se proto star´a o dalˇs´ı zpracov´an´ı ˇca´steˇcn´e odpovˇedi a pˇreˇcten´ı vˇsech vlastnost´ı, kter´e jsou nalezeny. Vlastnosti jsou uloˇzeny jako p´ar jm´eno a hodnota v datov´em kontejneru PropertySet, kter´ y je moˇzn´e pouˇz´ıt i pro n´asledn´ y z´apis vlastnost´ı na server. Kolekce mohou obsahovat speci´aln´ı strukturovanou vlastnost security descriptor, kter´a je ve WebDAV klientu reprezentov´ana jako instance tˇr´ıdy SecurityDescriptor. Transakˇcn´ı mechanismus je zapouzdˇren do tˇr´ıdy Lock, kter´a se star´a o zpracov´an´ı metod LOCK a UNLOCK se speci´aln´ım tvarem XML odpovˇedi. Tˇr´ıda z´aroveˇ n uchov´av´a veˇsker´e transakce platn´e pro aktu´aln´ı spojen´ı a automaticky pˇrid´av´a hlaviˇcku If do poˇzadavk˚ u vˇsech metod, kter´e jsou vol´any v r´amci transakce, dokud nen´ı transakce ukonˇcena metodou UNLOCK.
5.3.2
Objektov´ y model
Aby bylo moˇzn´e jednoduˇse pracovat s datab´az´ı, kter´a je nutn´a pro ukl´ad´an´ı perzistentn´ıch dat, jak bylo naznaˇceno v sekci 4.5, je pˇripojen´ı do datab´aze a pr´ace s datab´az´ı zapouzdˇreno do ORM tˇr´ıd. Instance tˇechto tˇr´ıd reprezentuj´ı jeden z´aznam v datab´azi a zapouzdˇruj´ı SQL dotazy ve sv´ ych metod´ach. Napˇr´ıklad pro uloˇzen´ı z´aznamu do datab´aze tak nen´ı nutn´e vytv´aˇret SQL dotaz, ale pˇr´ımo zavolat metodu save, kter´a se o vˇse postar´a a vr´at´ı n´avratov´ y k´od proveden´ı operace nad datab´az´ı. Naproti tomu statick´e metody pracuj´ı s celou datab´az´ı a slouˇz´ı pro vyhled´av´an´ı a hromadn´e u ´pravy.
Obr´azek 5.2: Objektov´ y model mapov´an´ı datab´aze na objekty ORM Komponenta se skl´ad´a ze tˇr´ı tˇr´ıd, kter´e reprezentuj´ı kaˇzd´a jednu z tabulek datab´aze, a jednoho spoleˇcn´eho abstraktn´ıho pˇredka, kter´ y definuje obecn´e metody a z´akladn´ı rozhran´ı ORM tˇr´ıd, jak zobrazuje objektov´ y model na obr´azku 5.2. Vˇsechny potˇrebn´e SQL dotazy a vol´an´ı jsou takto uloˇzeny na jednom m´ıstˇe a je moˇzn´e je velice jednoduˇse a efektivnˇe spravovat nebo rozˇsiˇrovat. Pokud se zmˇen´ı sch´ema datab´aze, je nutn´e upravit pouze tyto tˇr´ıdy. Konzistence datab´aze je automaticky udrˇzov´ana pˇri kaˇzd´em vytvoˇren´ı ovladaˇce datab´aze. Pokud je zjiˇstˇeno, ˇze datab´aze je poˇskozena, je cel´ y proces synchronizace restartov´an a datab´aze vypr´azdnˇena, ˇc´ımˇz doch´az´ı k vyvol´an´ı pomal´e synchronizace a obnoven´ı procesu synchronizace. Poˇskozen´ı datab´aze je nahl´aˇseno vyvol´an´ım v´ yjimky DatabaseCorruptedException.
5.3.3
Reprezentace zdroj˚ u
Dalˇs´ı komponentou aplikace je mnoˇzina tˇr´ıd reprezentuj´ıc´ı zdroje WebDAV serveru - kolekce a strukturovan´e i nestrukturovan´e dokumenty. Zdroje jsou reprezentov´any hierar51
Implementace
Architektura
chicky, jak ukazuje objektov´ y model na obr´azku 5.3. Z´akladem je obecn´e rozhran´ı Base, kter´e definuje z´akladn´ı metody vˇsech tˇr´ıd pro reprezentaci zdroj˚ u.
Obr´azek 5.3: Objektov´ y model reprezentace zdroj˚ u D´ıky t´eto architektuˇre je moˇzn´e jednoduˇse implementovat model synchronizace, kter´ y je pro vˇsechny zdroje naprosto shodn´ y, a pouˇz´ıt pouze metody rozhran´ı a specifick´e vlastnosti r˚ uzn´ ych zdroj˚ u pokr´ yt aˇz na u ´rovni implementace metod rozhran´ı v jednotliv´ ych tˇr´ıd´ach. Jedn´a se o vyuˇzit´ı polymorfismu z objektovˇe orientovan´eho programov´an´ı. Tov´arn´ı tˇr´ıda Factory rozhoduje o vytvoˇren´ı konkr´etn´ı instance tˇr´ıdy na z´akladˇe obdrˇzen´ ych vlastnost´ı zdroje. Pˇr´ıkladem m˚ uˇze b´ yt implementace nahr´an´ı zdroje na serveru, kdy pˇri nahr´an´ı kolekce je nutn´e pouˇz´ıt metodu MKCOL, kdeˇzto u dokumentu mus´ıme vytvoˇrit transakci a pouˇz´ıt metodu PUT. U klasick´e implementace by se algoritmus nepˇrehlednˇe vˇetvil pˇri kaˇzd´e odliˇsnosti. Aplikace je nav´ıc snadno rozˇsiˇriteln´a o nov´e typy zdroj˚ u pˇrid´an´ım nov´e tˇr´ıdy a jej´ı implementace do stromu bez nutnosti z´asahu do synchronizaˇcn´ıho algoritmu.
5.3.4
Synchronizace
Posledn´ı a tak´e hlavn´ı komponentou je implementace synchronizaˇcn´ıho algoritmu z kapitoly 4. Komponenta vyuˇz´ıv´a vˇsechny pˇredchoz´ı komponenty a logicky z nich skl´ad´a fin´aln´ı synchronizaˇcn´ı proces.
Obr´azek 5.4: Objektov´ y model synchronizace Tˇr´ıda ChangeResolver implementuje algoritmy ze sekce 4.8, kter´e se staraj´ı o detekci a z´apis nalezen´ ych operac´ı do datab´aze. Nalezen´e zmˇeny jsou zpracov´any tˇr´ıdou 52
Implementace
Testov´ an´ı
ChangeUpdater, kter´a se postar´a o detekci a odstranˇen´ı konflikt˚ u s pouˇzit´ım komponenty reprezentace zdroj˚ u a aktualizuje neaktu´aln´ı repliky. Zm´ınˇen´e dvˇe tˇr´ıdy logicky spojuje hlavn´ı tˇr´ıda Synchronizer implementuj´ıc´ı vˇsechny ˇctyˇri synchronizaˇcn´ı metody, jeˇz jsou pl´anov´any ˇcasovaˇcem ve tˇr´ıdˇe Scheduler popsan´ ym bl´ıˇze v sekci 4.12. Objektov´ y model komponenty je zobrazen na obr´azku 5.4.
5.4
Testov´ an´ı
Z´akladn´ı testov´an´ı implementace prob´ıhalo mezi dvˇema Kerio Connect servery α a β na r˚ uzn´ ych m´ıstech s´ıtˇe propojen´e internetem. N´asleduj´ıc´ı seznam obsahuje v´ yˇcet vˇsech testovac´ıch pˇr´ıpad˚ u, kter´e byly navrhnuty a pouˇzity pro ovˇeˇren´ı funkˇcnosti implementace: • Kolekce – – – – – – – – –
Pˇrid´an´ı nov´e kolekce Pˇrejmenov´an´ı kolekce ´ Uprava pr´av kolekce Pˇresunut´ı kolekce o u ´roveˇ n v´ yˇse Pˇresunut´ı kolekce o u ´roveˇ n n´ıˇze Pˇrejmenov´an´ı dvou kolekc´ı proti sobˇe na stejn´a jm´ena Smaz´an´ı kolekce Smaz´an´ı a ihned pˇrid´an´ı stejn´e kolekce pˇred detekc´ı Jm´eno kolekce s pouˇzit´ım vˇsech povolen´ ych znak˚ u
• Konfliktn´ı kolekce – – – – – – – – – – – – –
Pˇrid´an´ı konfliktn´ı kolekce Vytvoˇren´ı ˇclensk´e kolekce v konfliktn´ı kolekci Vytvoˇren´ı ˇclensk´e kolekce v nekonfliktn´ı kolekci ´ Uprava pr´av konfliktn´ı kolekce ´ Uprava pr´av nekonfliktn´ı kolekce Pˇrejmenov´an´ı konfliktn´ı kolekce Pˇrejmenov´an´ı nekonfliktn´ı kolekce Pˇresunut´ı konfliktn´ı kolekce Pˇresunut´ı nekonfliktn´ı kolekce Pˇrejmenov´an´ı 2 konfliktn´ıch kolekc´ı proti sobˇe na stejn´a jm´ena Smaz´an´ı konfliktn´ı a ihned pˇrid´an´ı nekonfliktn´ı kolekce pˇred detekc´ı Smaz´an´ı konfliktn´ı kolekce Smaz´an´ı nekonfliktn´ı kolekce
• Dokumenty – – – – – – –
Pˇrid´an´ı nov´eho dokumentu Pˇresunut´ı dokumentu ´ Uprava dokumentu Konfliktn´ı u ´prava na v´ıce replik´ach Konfliktn´ı u ´prava na vˇsech replik´ach Zkop´ırov´an´ı dokumentu Smaz´an´ı dokumentu 53
Implementace
5.5
Z´atˇeˇzov´y test
Z´ atˇ eˇ zov´ y test
Po ovˇeˇren´ı a doladˇen´ı funkˇcnosti mezi dvˇema servery byla aplikace nakonfigurov´ana pro synchronizaci deseti Kerio Connect server˚ u, aby mohla b´ yt d˚ ukladnˇe otestov´ana ˇsk´alovatelnost. V t´eto konfiguraci bylo moˇzn´e ovˇeˇrit i odolnost v˚ uˇci v´ ypadk˚ um v s´ıti a doˇcasnˇe nedostupn´ ym server˚ um. Pro d˚ ukladn´e z´atˇeˇzov´e otestov´an´ı byl jeden ze server˚ u naplnˇen 3.000 n´ahodn´ ymi testovac´ımi zdroji a byla provedena replikace mezi vˇsemi deseti servery. Synchronizaˇcn´ı proces byl spuˇstˇen na samostatn´e stanici oddˇelenˇe od server˚ u s hardwarovou konfigurac´ı uvedenou v tabulce 5.1. Komponenta Procesor Poˇcet vyuˇziteln´ ych jader Operaˇcn´ı pamˇet’ Pˇripojen´ı k internetu Klidov´e zat´ıˇzen´ı CPU
Synchronizaˇ cn´ı proces AMD Phenom X4 2.4 GHz 1 512 MB 1 GB Ethernet 0%
Kerio Connect server Intel Xeon 3.73 GHz 1 1024 MB 1 GB Ethernet 2%
Tabulka 5.1: Hardwarov´a konfigurace testovac´ıch stanic a server˚ u Profilov´an´ı prvn´ı pomal´e synchronizace, kter´a replikovala zdroje na devˇet dalˇs´ıch replik, je moˇzn´e vidˇet v tabulce 5.2. Je moˇzn´e si povˇsimnout alarmuj´ıc´ı hodnoty re´aln´eho ˇcasu, po kter´ y synchronizace bˇeˇzela. Ostatn´ı hodnoty jsou vˇsak velice uspokojiv´e. Synchronizace vyuˇz´ıvala procesor na maxim´alnˇe 42 % s pouˇzitou operaˇcn´ı pamˇet´ı do 40 ˇ str´aven´ MB. Cas y na procesoru je tak´e velice n´ızk´ y, je 83 kr´at niˇzˇs´ı neˇz re´aln´ y ˇcas bˇehu synchronizace. Z namˇeˇren´ ych hodnot jednoduˇse vypl´ yv´a, ˇze synchronizaˇcn´ı proces 98 % ˇcasu ˇcekal a nepracoval s procesorem. Sledovan´ a veliˇ cina nejmenˇ s´ı nejvˇ etˇ s´ı stˇ redn´ı Re´aln´ y ˇcas 9h 20m Procesorov´ y ˇcas 6m 48s CPU zat´ıˇzen´ı 0% 28 % 1% Pamˇet’ 3,5 MB 39 MB 39 MB CPU zat´ıˇzen´ı serveru 2% 18 % 6% Tabulka 5.2: Profilov´an´ı prvn´ı pomal´e synchronizace Prvn´ı podezˇren´ı samozˇrejmˇe padlo na komunikaci s Kerio Connect servery. Aby bylo moˇzn´e pˇresnˇe identifikovat u ´zk´e m´ısto synchronizace, byly vˇsechny ˇcasto pouˇz´ıvan´e WebDAV metody profilov´any pro z´ısk´an´ı pˇrehledu o jejich chov´an´ı, jak zachycuje tabulka 5.3. Stejn´e hodnoty byly zjiˇstˇeny i z log˚ u Kerio Connect serveru, coˇz vyvrac´ı moˇznost komunikaˇcn´ıho zpoˇzdˇen´ı. Na prvn´ı pohled je moˇzn´e odhalit u ´zk´e m´ısto synchronizace - metoda PUT. Metoda PUT se vyuˇz´ıv´a pˇri vytv´aˇren´ı nebo u ´pravˇe dokument˚ u na replice, je to tedy nejv´ıce pouˇz´ıvan´a metoda hned po metodˇe GET. Pˇri prvn´ı pomal´e synchronizaci byla metoda pouˇzita pˇribliˇznˇe 27 tis´ıc kr´at (3.000 dokument˚ u * 9 replik), coˇz po vyn´asoben´ı pr˚ umˇern´ ym ˇcasem 54
Implementace
Urychlen´ı
Metoda SEARCH GET PUT MKCOL LOCK UNLOCK
Odezva nejmenˇ s´ı nejvˇ etˇ s´ı stˇ redn´ı 100ms 1,4s 500ms 10ms 40ms 20ms 0,7s 1,4s 1s 10ms 16ms 13ms 8ms 10ms 9ms 9ms 10ms 9ms
Tabulka 5.3: Profilov´an´ı ˇcasto pouˇz´ıvan´ ych WebDAV metod 1 sekunda na poˇzadavek ˇcin´ı 7,5 hodiny. Jednoduˇse tedy synchronizace 7,5 hodiny ˇcekala na proveden´ı metody PUT a pokud pˇriˇcteme pouˇzit´ı dalˇs´ıch metod, z´ısk´ame zjiˇstˇen´ ych 98 % nevyuˇzit´eho ˇcasu. Sledovan´ a veliˇ cina nejmenˇ s´ı nejvˇ etˇ s´ı stˇ redn´ı Re´aln´ y ˇcas 18m 13s Procesorov´ y ˇcas 2m 38s CPU zat´ıˇzen´ı 1% 28 % 22 % Pamˇet’ 3,5 MB 13 MB 11 MB CPU zat´ıˇzen´ı serveru 2% 18 % 3% Tabulka 5.4: Profilov´an´ı druh´e pomal´e synchronizace Po restartov´an´ı perzistentn´ı datab´aze a opˇetovn´em spuˇstˇen´ı pomal´e synchronizace jiˇz byly dosaˇzeny mnohem pˇr´ıznivˇejˇs´ı hodnoty ˇcasu bˇehu aplikace, jak ukazuje tabulka 5.4. Niˇzˇs´ı hodnoty jsou samozˇrejmˇe zp˚ usobeny chybˇej´ıc´ımi replikacemi dokument˚ u, jelikoˇz vˇsechny dokumenty jiˇz na vˇsech replik´ach existuj´ı a dokumenty jsou pouze sp´arov´any a shled´any jako aktu´aln´ı na vˇsech replik´ach. Server je v´ıce optimalizov´an pro stahov´an´ı dokument˚ u, coˇz je patrn´e ze zat´ıˇzen´ı serveru. Ostatn´ı synchronizaˇcn´ı metody, zmˇenov´a synchronizace, aktivn´ı synchronizace a heuristick´a synchronizace, jsou nen´aroˇcn´e d´ıky mal´emu poˇctu replikuj´ıc´ıch dokument˚ u, pokud samozˇrejmˇe nedojde k nahr´an´ı velk´eho objemu dat, coˇz u emailov´eho serveru nen´ı typic´ ym m´ıstem cel´e synchronizace je tedy replikace novˇe vytvoˇren´eho k´ ym pˇr´ıpadem uˇzit´ı. Uzk´ nebo zmˇenˇen´eho dokumentu na ostatn´ı repliky pˇri velk´em poˇctu replik nebo velk´em poˇctu operac´ı.
5.6
Urychlen´ı
Synchronizaˇcn´ı proces je navrhnut jako jednovl´aknov´ y a to z d˚ uvodu, ˇze p´arov´an´ı pˇri detekci mus´ı prob´ıhat sekvenˇcnˇe, jinak by mohlo doj´ıt k nespr´avn´emu sp´arov´an´ı a zaveden´ı nechtˇen´e duplikace. Pokud by p´arov´an´ı prob´ıhalo paralelnˇe, muselo by b´ yt kaˇzd´e hled´an´ı a n´asledn´ y z´apis do datab´aze uzavˇren do transakce, coˇz by zp˚ usobovalo exkluzivn´ı zamyk´an´ı tabulek a v podstatˇe sekvenˇcn´ı bˇeh. Urychlen´ı by zde samozˇrejmˇe bylo moˇzn´e, ale nebude m´ıt takov´ y efekt jako u druh´e f´aze synchronizace - aktualizace. 55
Implementace
Urychlen´ı
Urychlen´ı je moˇzn´e ide´alnˇe dos´ahnout zaveden´ım paralelizace pˇri replikaci stejn´eho dokumentu mezi v´ıce replik, jelikoˇz repliky jsou nez´avisl´e a na kaˇzd´e m˚ uˇze b´ yt spuˇstˇena operace PUT bez jak´ehokoliv zpomalen´ı nebo zv´ yˇsen´ı z´atˇeˇze na stranˇe serveru. Dalˇs´ı prostor pro paralelizaci se nach´az´ı pˇri sekvenˇcn´ım prov´adˇen´ı vˇsech operac´ı nad jednotliv´ ymi zdroji. Jelikoˇz jiˇz zn´ame koncov´ y stav proveden´ı operac´ı, kter´e byly detekov´any v prvn´ı f´azi synchronizace, m˚ uˇzeme vˇsechny nov´e nebo zmˇenˇen´e zdroje rozdˇelit mezi v´ıce paraleln´ıch proces˚ u.
Obr´azek 5.5: Pˇr´ıklad urychlen´ı synchronizace 400 operac´ı mezi 5 replik Diagram na obr´azku 5.5 ukazuje pˇr´ıklad urychlen´ı synchronizace pro 400 nov´ ych nebo zmˇenˇen´ ych zdroj˚ u. Detekce zdroj˚ u prob´ıh´a opˇet sekvenˇcnˇe, aby se pˇredeˇslo chybn´emu sp´arov´an´ı. Ovˇsem seznam nalezen´ ych operac´ı je rozdˇelen mezi ˇctyˇri pracovn´ı vl´akna, kter´a je paralelnˇe vykon´avaj´ı. Rozdˇelit seznam prac´ı je moˇzn´e aˇz ve chv´ıli, kdy je dokonˇcena detekce zmˇen ze vˇsech replik, jinak by mohlo doj´ıt k chybn´e replikaci operace, protoˇze by se napˇr´ıklad pˇrepsala nedetekovan´a operace. Pro kaˇzdou jednotlivou operaci je po vyˇreˇsen´ı konflikt˚ u a pˇr´ıpravˇe zdroje k aktualizaci vytvoˇrena sada aktualizaˇcn´ıch vl´aken, kter´a paralelnˇe provedou aktualizaci zdroje na vˇsechny servery souˇcasnˇe, ˇc´ımˇz dojde k eliminaci sekvenˇcn´ıho ˇcek´an´ı na dokonˇcen´ı metody PUT. Nelze ovˇsem oˇcek´avat, ˇze ˇc´ım v´ıce vl´aken vytvoˇr´ıme, t´ım vˇetˇs´ıho urychlen´ı dos´ahneme, pro vl´akna proto plat´ı n´asleduj´ıc´ı pravidla: • Poˇcet pracovn´ıch vl´aken se odv´ıj´ı od velikosti pr´ace, kterou je potˇreba prov´est. Nem´a napˇr´ıklad smysl vytv´aˇret deset vl´aken pro deset operac´ı, kdy kaˇzd´e provede pouze jednu operaci, jelikoˇz vytvoˇren´ı vl´aken m´a jistou reˇzii. Vl´akno m´a smysl vytv´aˇret pro deset a v´ıce operac´ı. • Poˇcet pracovn´ıch vl´aken je limitov´an propustnost´ı datab´aze a Kerio Connect serveru, jelikoˇz pracovn´ı vl´akna prov´ad´ı v´ıce paraleln´ıch operac´ı PUT na jedn´e replice, coˇz m˚ uˇze zp˚ usobit n´ar˚ ust z´atˇeˇze na serveru. Pracovn´ı vl´akna tak´e prov´ad´ı z´apis do sd´ılen´e datab´aze, kter´a se pˇri z´apisech zamyk´a. Pˇri velk´em poˇctu vl´aken by doˇslo k zahlcen´ı syst´emu a moˇzn´emu zpomalen´ı. • Poˇcet aktualizaˇcn´ıch vl´aken je rovn´ y poˇctu replik, mezi kter´e m´a b´ yt provedena replikace zdroje. Smysl m´a ovˇsem vytv´aˇret vl´akno pouze pro dokumenty, u kter´ ych byl zmˇenˇen obsah a bude pouˇzita metoda PUT, kter´a zp˚ usobuje nejvˇetˇs´ı zpomalen´ı. Jinak by reˇzie vytvoˇren´ı vl´akna pˇrev´ yˇsila uˇziteˇcnou hodnotu vl´akna.
56
Implementace
Dlouhodob´y test
• Celkov´ y poˇcet vl´aken nen´ı omezen poˇctem procesor˚ u, jelikoˇz vl´akna nejsou v´ ypoˇcetnˇe v´az´ana, ale budou vyuˇz´ıvat ˇcas, ve kter´em ostatn´ı vl´akna ˇcekaj´ı na dokonˇcen´ı komunikace s WebDAV serverem. Je moˇzn´e oˇcek´avat znaˇcn´e urychlen´ı zejm´ena pˇri synchronizaci velk´eho mnoˇzstv´ı replik, jelikoˇz vˇsechny repliky budou aktualizov´any paralelnˇe. V ide´aln´ım pˇr´ıpadˇe je moˇzn´e oˇcek´avat urychlen´ı rovn´e poˇctu replik, coˇz samozˇrejmˇe z d˚ uvod˚ u reˇzie a transakc´ı v datab´azi nen´ı re´aln´e. Dalˇs´ı urychlen´ı zp˚ usob´ı pouˇzit´ı pracovn´ıch vl´aken, jelikoˇz servery nejsou plnˇe vyt´ıˇzeny pˇri pouˇzit´ı pouze jedn´e metody sekvenˇcnˇe. U pracovn´ıch vl´aken je vˇsak nutn´e d´avat pozor na pˇret´ıˇzen´ı server˚ u. Po implementaci urychlen´ı byla spuˇstˇena opˇet pomal´a synchronizace se stejn´ ymi daty jako v pˇr´ıpadˇe z´atˇeˇzov´ ych test˚ u. V´ ysledky profilov´an´ı urychlen´e pomal´e synchronizace s r˚ uzn´ ym poˇctem pracovn´ıch vl´aknem zobrazuje tabulka 5.5. Synchronizace byla d´ıky pouˇzit´ı paraleln´ıho nahr´av´an´ı dokument˚ u urychlena 7 kr´at pro 10 Kerio Connect server˚ u, coˇz je pomˇernˇe znaˇcn´ y rozd´ıl oproti neurychlen´e variantˇe. Pˇri pouˇzit´ı v´ıce pracovn´ıch vl´aken je urychlen´ı d´ale zvyˇsov´ano, ale je moˇzn´e si povˇsimnout znaˇcn´eho n´ar˚ ustu zat´ıˇzen´ı procesoru na stranˇe serveru. Poˇcet pracovn´ıch vl´aken by bylo moˇzn´e d´ale zvyˇsovat, ale urychlen´ı jiˇz nebude tak v´ yrazn´e a mus´ıme si uvˇedomit, ˇze nen´ı moˇzn´e Kerio Connect server plnˇe zat´ıˇzit jen prov´adˇen´ım synchronizace. Server mus´ı b´ yt st´ale schopn´ y vyˇrizovat poˇzadavky klient˚ u a pˇrij´ımat poˇstu. Poˇ cet pracovn´ıch vl´ aken Re´aln´ y ˇcas Procesorov´ y ˇcas CPU zat´ıˇzen´ı CPU zat´ıˇzen´ı serveru Urychlen´ı
1 2 3 4 5 1h 20m 1h 5m 50m 59s 39m 25s 34m 32s 6m 38s 6m 43s 6m 48s 6m 51s 6m 59s 24 % 26 % 27 % 31 % 32 % 12 % 23 % 31 % 42 % 49 % 7 8,6 11 14,3 16,4
Tabulka 5.5: Profilov´an´ı urychlen´e pomal´e synchronizace s r˚ uzn´ ym poˇctem pracovn´ıch vl´aken Urychlen´ı se projevilo i u vˇsech ostatn´ıch synchronizaˇcn´ıch metod, nejen u pomal´e synchronizace. Pomal´a synchronizace je vˇsak nejhorˇs´ım pˇr´ıpadem synchronizace a bylo nutn´e se na ni zamˇeˇrit.
5.7
Dlouhodob´ y test
Posledn´ım proveden´ ym testem byl dlouhodob´ y test pro ovˇeˇren´ı, zda synchronizaˇcn´ı proces dok´aˇze bezprobl´emovˇe bˇeˇzet nˇekolik dn´ı bez pˇrest´an´ı. Test byl spuˇstˇen oproti dvoum testovac´ım server˚ um ve stejn´e konfuguraci jako pˇri z´atˇeˇzov´em testu (viz sekce 5.5). Pro odzkouˇsen´ı ˇca´steˇcnˇe re´aln´e z´ateˇze, byl vytvoˇren gener´ator n´ahodn´ ych dokument˚ u, kter´ y generoval kaˇzd´ ych 10 sekund jeden dokument na server, ˇc´ımˇz simuloval pouˇz´ıv´an´ı serveru. Synchronizaˇcn´ı proces tak po celou dobu bˇehu mohl detekovat a synchronizovat nov´e dokumenty mezi servery. Nastaven´ı ˇcas˚ u pro pl´anovaˇc synchronizaˇcn´ıch metod je uvedeno v tabulce 5.6. Jeden ze server˚ u byl pˇri spuˇstˇen´ı synchronizace pr´azdn´ y a druh´ y obsahoval 3000 n´ahodn´ ych dokument˚ u. 57
Implementace
Dlouhodob´y test
Zmˇ enov´ a synchronizace Aktivn´ı synchronizace Heuristick´ a synchronizace 1 hodina 30 sekund 60 sekund Tabulka 5.6: Nastaven´ı pl´anovaˇce pro dlouhodob´ y test
Obr´azek 5.6: Graf z´atˇeˇze pˇri dlouhodob´em testu Test byl spuˇstˇen po dobu 48 hodin a hlavn´ı sledovanou veliˇcinou bylo zat´ıˇzen´ı server˚ u jak uv´ad´ı graf na obr´azku 5.6. Graf v prvn´ı hodinu naznaˇcuje pr˚ ubˇeh pomal´e synchronizace, pˇri kter´e se pˇreneslo 3000 dokument˚ u na pr´azdn´ y server. Pr˚ ubˇeh dalˇs´ıch 47 hodin je st´al´ y a zat´ıˇzen´ı server˚ u se aˇz na v´ yjimky drˇz´ı pod hodnotou 0, 1, coˇz je velice dobr´ y v´ ysledek. Viditeln´e v´ ykyvy hodnot jsou zp˚ usobeny prov´adˇen´ım zmˇenov´e synchronizace. Hodnota zat´ıˇzen´ı znaˇc´ı na kolik je cel´ y server vyt´ıˇzen a kolik poˇzadavk˚ u je moˇzn´e jeˇstˇe vyˇr´ıdit (jedn´a se o ukazatel load z Unix syst´em˚ u). Obsah obou synchronizovan´ ych server˚ u byl po skonˇcen´ı synchronizaˇcn´ıho procesu shodn´ y, coˇz dokazuje spr´avnost replikace. Gener´ator n´ahodn´ ych dokument˚ u vygeneroval po celou dobu testu dalˇs´ıch 2720 dokument˚ u.
58
6 Z´avˇer Navrˇzen´ y a implementovan´ y optimistick´ y replikaˇcn´ı algoritmus spolehlivˇe synchronizuje sd´ılen´ y obsah mezi servery vˇcetnˇe vˇsech jejich vlastnost´ı. Poˇrad´ı operac´ı pˇri replikaci se ˇr´ıd´ı kombinac´ı s´emantick´e metody na z´akladˇe povahy operac´ı a syntaktick´e metody re´aln´eho ˇcasu, kdy nen´ı moˇzn´e spr´avnˇe ˇradit operace, pokud nejsou servery ˇcasovˇe synchronizov´any. Algoritmus d´ale detekuje konflikty pˇri editaci stejn´eho zdroje na v´ıce serverech souˇcasnˇe a automaticky je ˇreˇs´ı tak, aby nedoˇslo ke ztr´atˇe proveden´ ych operac´ı, i kdyˇz se jedn´a o state-transfer protokol. Oˇsetˇreny jsou i r˚ uzn´e chybov´e stavy server˚ u, jako napˇr´ıklad konfliktn´ı kolekce nebo doˇcasnˇe nedostupn´ y server. Jak uk´azal z´atˇeˇzov´ y test, m´a synchronizace s pouˇzit´ım WebDAV rozhran´ı jist´e v´ ykonnostn´ı probl´emy. Metoda PUT m´a pr˚ umˇernou dobu odpovˇedi 1 sekunda, coˇz pˇri potˇrebˇe replikovat velk´e mnoˇzstv´ı dokument˚ u znaˇcnˇe zpomaluje synchronizaci. Probl´em byl do jist´e m´ıry vyˇreˇsen urychlen´ım aplikace pouˇzit´ım paraleln´ıch vl´aken, kter´e spust´ı v´ıce metod PUT na serveru soubˇeˇznˇe, jelikoˇz server nen´ı jednou metodou plnˇe vyt´ıˇzen. Synchronizace je tak libovolnˇe ˇsk´alovateln´a co se t´ yˇce mnoˇzstv´ı server˚ u, kter´e m˚ uˇze synchronizovat. Zhorˇsen´ y v´ ykon se projev´ı aˇz pˇri nutnosti replikovat velk´ y poˇcet zdroj˚ u a proto je nutn´e spr´avnˇe nastavit pl´anovaˇc tak, aby nedoch´azelo ke skokov´emu pˇret´ıˇzen´ı. N´avrh algoritmu byl znaˇcnˇe omezen jak moˇznostmi WebDAV protokolu a jeho implementace Kerio Connect serverem, tak i nemoˇznost´ı zasahovat do implementace Kerio Connect serveru, coˇz by v nˇekter´ ych pˇr´ıpadech znaˇcnˇe zefektivnilo procesy. Algoritmus nedok´aˇze pˇri pomal´e synchronizaci sp´arovat dokument, kter´ y byl pˇred sp´arov´an´ım na jin´e replice zmˇenˇen. P´arov´an´ı prob´ıh´a podle obsahu dokumentu a zmˇenˇen´ y dokument se od p˚ uvodn´ıho liˇs´ı, ˇc´ımˇz doch´az´ı k duplikaci obsahu. Pomal´a synchronizace vˇsak m´a b´ yt spuˇstˇena pouze jednou pro inicializaci synchronizace, ˇc´ımˇz se d´a probl´emu jednoduˇse vyhnout. Pˇri velk´ ych objemech dat m˚ uˇze doj´ıt k v´ yrazn´emu zpomalen´ı, jelikoˇz protokol WebDAV je state-transfer a je nutn´ y vˇzdy pˇrenos cel´eho zmˇenˇen´eho dokumentu. Vlastnost state-transfer tak´e zp˚ usobuje, ˇze server nev´ı a neoznamuje, kde pˇresnˇe v dokumentu zmˇena nastala. Navrˇzen´ y algoritmus vˇsak umoˇzn ˇuje lokalizovat zmˇeny v dokumentu pouˇzit´ım referenˇcn´ıho dokumentu a dok´aˇze tak ˇreˇsit pˇr´ıpadn´e konflikty slouˇcen´ım nalezen´ ych zmˇen. Protokol WebDAV je vhodn´ y pro synchronizaci replik a to zejm´ena d´ıky sv´e jednoduchosti, moˇznostem zabezpeˇcen´ı a spolehlivosti v Kerio Connect serveru. V´ ykon synchronizaˇcn´ıho procesu je pˇritom pˇr´ımo u ´mˇern´ y rychlosti obsluhy WebDAV metod, je tedy moˇzn´e vylepˇsit Kerio Connect WebDAV rozhran´ı pro dosaˇzen´ı pˇr´ıznivˇejˇs´ıch v´ ysledk˚ u. Implementace algoritmu je proveden´a v programovac´ım jazyce C++ a efektivnˇe vyuˇz´ıv´a pˇridˇelen´e programov´e prostˇredky. Aplikaci je moˇzn´e rozs´ahle nastavit pro dosaˇzen´ı maxim´aln´ıho potenci´alu dle konkr´etn´ı instance distribuovan´e dom´eny. Synchronizace je tak i bez z´asahu do Kerio Connect serveru v´ yznamn´ ym vylepˇsen´ım distribuovan´e dom´eny.
59
Seznam zkratek CVS DNS HTTP HTTPS HTTPU MIME NTP ORM RFC SAX SQL SVN TCP TLS URI URL WebDAV XML
Concurrent Versions System Domain Name System HyperText Transfer Protocol HyperText Transfer Protocol Secure HTTP protokolem UDP Multipurpose Internet Mail Extensions Network Time Protokol Object Relation Mapping Request for Comments Simple API for XML Structured Query Language Subversion Transmission Control Protocol Transport Layer Security Uniform Resource Identifier Uniform Resource Locator Web Distributed Authoring and Versioning Extensible Markup Language
60
Literatura [Connect] Kerio: Kerio Connect Dostupn´e na adrese: http://www.kerio.cz/cz/connect [Cormack] Gordon V. Cormack: A Calculus for Concurrent Update. Department of Computer Science, University of Waterloo, 1995 [Ghemawat] Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung: The Google File System, 2003 Google [Gilbert] Seth Gilbert, Nancy Lynch: Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services. Laboratory for Computer Science, Massachusetts Institute of Technology, Cambridge, MA 02139, 2000 [Lamport] Leslie Lamport: Time, Clocks, and the Ordering of Events in a Distributed System. Massachusetts Computer Associates, Inc., 1978 [Log4cpp] Short introduction to Apache log4cx Dostupn´e na adrese: http://logging.apache.org/log4cxx/ [MSDN] Microsoft Developer Network: WebDAV Reference Dostupn´e na adrese: http://msdn.microsoft.com/en-us/library/aa486282%28v=exchg.65%29.aspx/ [Preguica] Nuno Preguic,a, Marc Shapiro, Caroline Matheson: Semantics-based reconciliation for collaborative and mobile environments. Dep. Inform´atica, FCT, Universidade Nova de Lisboa, Portugal, Microsoft Research Ltd., Cambridge, UK, 2010 [Ramsey] Norman Ramsey, El¨od Csirmaz: An Algebraic Approach to File Synchronization. Foundations of Software Engineering, 2001 [RFC1945] RFC 1945: Hypertext Transfer Protocol – HTTP/1.0 Dostupn´e na adrese: https://tools.ietf.org/html/rfc1945 [RFC2426] RFC 2426: vCard MIME Directory Profile Dostupn´e na adrese: http://www.ietf.org/rfc/rfc2426.txt [RFC2445] RFC 2445: Internet Calendaring and Scheduling Core Object Specification (iCalendar) Dostupn´e na adrese: http://www.ietf.org/rfc/rfc2445.txt 61
LITERATURA
LITERATURA
[RFC2616] RFC 2616: Hypertext Transfer Protocol – HTTP/1.1 Dostupn´e na adrese: https://tools.ietf.org/html/rfc2616 [RFC2818] RFC 2818: HTTP Over TLS Dostupn´e na adrese: http://www.ietf.org/rfc/rfc2818.txt [RFC2822] RFC 2822: Internet Message Format Dostupn´e na adrese: http://www.ietf.org/rfc/rfc2822.txt [RFC4918] RFC 4918: HTTP Extensions for Distributed Authoring - WEBDAV Dostupn´e na adrese: http://www.ietf.org/rfc/rfc4918.txt [Saito] Yasushi Saito, Mark Shapiro: Optimistic Replication. ACM Computing Survey, Vol. V, No. N, 3 2005 [Thomas] Robert H. Thomas: A Majority Consensus Approach to Concurrency Control for Multiple Copy Databases. Bolt Beranek and Newman, Inc., 1979 [W3C] W3C: HTTP - Hypertext Transfer Protocol Dostupn´e na adrese: http://www.w3.org/Protocols/ Massachusetts Computer Associates, Inc.
62
A Uˇzivatelsk´a pˇr´ıruˇcka Program je moˇzn´e pˇreloˇzit a spustit na platform´ach UNIX/Linux, Mac OS a Windows pro 32 i 64 bitov´e procesory. Minim´aln´ı syst´emov´e poˇzadavky programu jsou: • procesor Intel Celeron 1,6 GHz nebo ekvivalentn´ı, • 512 MB RAM, • 100 MB voln´ ych na disku.
A.1
Instalace
Pˇred spuˇstˇen´ım instalace je nutn´e veˇsker´e soubory a sloˇzky na pˇriloˇzen´em CD zkop´ırovat na zapisovateln´e m´edium, ide´alnˇe pevn´ y disk, jelikoˇz jsou generov´any soubory uvnitˇr sloˇzek.
A.1.1
UNIX/Linux
K instalaci a pˇrekladu synchronizaˇcn´ıho procesu pro syst´em Linux je nutn´e nainstalovat n´asleduj´ıc´ı n´astroje a bal´ıˇcky: • • • • •
g++ make libslite3-dev liblog4cpp5-dev libneon27-dev
Pˇredchoz´ı bal´ıˇcky je moˇzn´e jednoduˇse nainstalovat u Debian syst´em˚ u pˇr´ıkazem apt-get uvodu moˇzn´e nainstalovat install n´azev bal´ıˇcku. Pokud nechcete nebo nen´ı z nˇejak´eho d˚ bal´ıˇcky knihoven lib*, je moˇzn´e pouˇz´ıt dodan´e zdrojov´e soubory a knihovny pˇreloˇzit. K pˇrekladu knihoven slouˇz´ı skript install-libraries.sh um´ıstˇen´ y v adres´aˇri unix/. Skript spust´ıte jednoduˇse pˇr´ıkazem bash install-libraries.sh (pouˇzijte sudo, pokud nejste pˇrihl´aˇseni jako superuser) a automaticky jsou pˇreloˇzeny vˇsechny potˇrebn´e knihovny pro pˇreklad hlavn´ıho programu. Po u ´spˇeˇsn´e instalaci vˇsech potˇrebn´ ych knihoven program pˇreloˇz´ıte pˇr´ıkazem make proveden´ ym v adres´aˇri unix/. Vznikne tak pˇreloˇzen´ y spustiteln´ y soubor unix/sync.
A.1.2
Windows
K instalaci a pˇrekladu na operaˇcn´ım syst´emu Windows je pˇripraven projekt pro volnˇe dostupn´e Microsoft Visual Studio 2008 Express (d´ale jen VC8) um´ıstˇen´ y v adres´aˇri windows/. Soubor projektu windows/KerioConnectSyncWin/KerioConnectSyncWin.vcproj jednoduˇse otevˇrete ve VC8 a dostanete projekt se vˇsemi potˇrebn´ ymi knihovnami. Projekt pˇreloˇz´ıte pˇr´ıkazem Build a vznikne nov´ y spustiteln´ y soubor v adres´aˇri Release/ nebo Debug/, podle zvolen´eho profilu, s n´azvem KerioConnectSyncWin.exe vˇcetnˇe vˇsech potˇrebn´ ych knihoven pro spuˇstˇen´ı. 63
Uˇzivatelsk´a pˇr´ıruˇcka
A.1.3
Nastaven´ı
MAC OS
Pˇreklad pro operaˇcn´ı syst´em MAC OS prob´ıh´a obdobnˇe jako pro platformu Linux. Nejdˇr´ıve je nutn´e nainstalovat vˇsechny potˇrebn´e z´avislosti skriptem bash unix/install-libraries.sh (pouˇzijte sudo, pokud nejste pˇrihl´aˇseni jako superuser). Spustiteln´ y program unix/sync opˇet dostaneme spuˇstˇen´ım pˇr´ıkazu make v adres´aˇri unix/.
A.2
Nastaven´ı
Pˇred prvn´ım spuˇstˇen´ım synchronizaˇcn´ıho procesu je nutn´e nastavit chov´an´ı procesu a hlavnˇe c´ılov´e servery, kter´e maj´ı b´ yt procesem synchronizov´any. K nastaven´ı programu slouˇc´ı XML konfiguraˇcn´ı soubor config.xml, kter´ y m˚ uˇze vypadat napˇr´ıklad n´asledovnˇe: 1 2 3 database.sqlite 4 tmp/ 5 6 <enabled>1 7 <max nb workers>5 8 <min job worker>10 9 10 <delays> 11 60 12 20 13 <poll>20 14 15 <synchronize> 16 17 18 19 20 https://195.113.184.42:443/public 21 <user>u1 22 <password>∗∗∗ 23 cert/kerio−connect−42 24 25 26
kde • database - libovoln´a cesta k souboru, na kter´e bude uloˇzena datab´aze synchronizaˇcn´ıho procesu. Datab´aze bude vytvoˇrena automaticky. • temporary storage - synchronizaˇcn´ı proces potˇrebuje pro svou ˇcinnost pr˚ ubˇeˇznˇe ukl´adat doˇcasn´e soubory na disk, tyto soubory vytv´aˇr´ı do nastaven´e sloˇzky. Sloˇzka mus´ı b´ yt pˇr´ıstupn´a pro z´apis.
64
Uˇzivatelsk´a pˇr´ıruˇcka
Spuˇstˇen´ı
• acceleration - synchronizaˇcn´ı proces je moˇzn´e urychlit, jak je pops´ano v sekci 5.6, pouˇzit´ım vl´aken. Vl´akna jsou ve v´ ychoz´ım nastaven´ı vypnuta, ale je moˇzn´e jejich pouˇzit´ı zapnout nastaven´ım enabled na hodnotu 1. Zapnut´ım urychlen´ı se budou automaticky vytv´aˇret aktualizaˇcn´ı vl´akna. Pro vytv´aˇren´ı pracovn´ıch vl´aken slouˇz´ı nastaven´ı max nb workers pro urˇcen´ı nejvyˇsˇs´ıho poˇctu pracovn´ıch vl´aken a min job worker pro nastaven´ı nejmenˇs´ıho poˇctu operac´ı, kter´e budou jednotliv´a vl´akna zpracov´avat. • delays - pro optimalizaci pl´anovaˇce synchronizace je moˇzn´e nastavit jednotliv´e ˇcasy v cel´ ych sekund´ach mezi spouˇstˇen´ım synchronizaˇcn´ıch metod. Pouˇzijte complete pro nastaven´ı ˇcasu mezi spuˇstˇen´ım kompletn´ı synchronizace, heuristic pro heuristickou metodu a poll pro aktivn´ı synchronizaci. • locations - proces m˚ uˇze synchronizovat libovoln´e mnoˇzstv´ı Kerio Connect server˚ u. Jednotliv´e servery je moˇzn´e nastavit vloˇzen´ım elementu location. Nastaven´ı kaˇzd´eho serveru obsahuje: – uri - URI c´ılov´eho serveru do koˇrenov´e kolekce synchronizace vˇcetnˇe protokolu a portu, – user - uˇzivatelsk´e jm´eno pokud je vyˇzadov´ana autentifikace, – password - heslo pro uˇzivatelsk´e jm´eno, – certificate - soubor certifik´atu, pokud je pouˇzit protokol HTTPS a certifik´at serveru nen´ı ovˇeˇren certifikaˇcn´ı autoritou a je nutn´e jej ovˇeˇrit ruˇcnˇe. • synchronize - synchronizaˇcn´ı proces je moˇzn´e omezit na vybran´e kolekce v koˇrenu synchronizace vˇsech server˚ u. Je moˇzn´e vloˇzit libovoln´ y poˇcet folder element˚ u s relativn´ı cestou ke kolekci, kter´a m´a b´ yt v r´amci procesu synchronizov´ana.
A.3
Spuˇ stˇ en´ı
Jakmile je program nastaven XML konfigurac´ı, je moˇzn´e jej spustit pouˇzit´ım spustiteln´eho souboru vytvoˇren´eho pˇri instalaci synchronizaˇcn´ıho procesu. Program je pouze konzolov´ y a je moˇzn´e jej spustit na pozad´ı. Pr˚ ubˇeˇzn´e v´ ystupy programu jsou zobrazov´any na standardn´ı v´ ystup a z´aroveˇ n ukl´ad´any do log soubor˚ u. Pro vynucen´ı pomal´e synchronizace pˇri existuj´ıc´ı datab´azi je moˇzn´e pouˇz´ıt pˇrep´ınaˇc -slow“ za pˇr´ıkazem pro spuˇstˇen´ı pro” gramu, napˇr´ıklad: 1 ./sync −slow
Log soubor zaznamen´avaj´ıc´ı bˇeh aplikace je uloˇzen standardnˇe v log/run.log a statistiky synchronizace jsou uloˇzeny v souboru log/stats.log. Aplikace um´ı logovat r˚ uzn´e u ´rovnˇe hl´aˇsen´ı pro r˚ uzn´e kategorie, vˇse je moˇzn´e jednoduˇse nastavit u ´pravou souboru logging.properties, kter´ y lze libovolnˇe zmˇenit podle n´avodu pro Log4cpp [Log4cpp]. Pro bˇeˇzn´ y provoz aplikace je urˇcena u ´roveˇ n hl´aˇsen´ı NOTICE. Aplikace dˇel´ı hl´aˇsen´ı do ˇsesti kategori´ı: • sql - SQL dotazy a operace, • webdav - WebDAV klient, • sync - synchronizaˇcn´ı procesy, detekce a aktualizace zmˇen, 65
Uˇzivatelsk´a pˇr´ıruˇcka
Spuˇstˇen´ı
• merge - ˇreˇsitel konflikt˚ u, • parse - ˇcten´ı strukturovan´ ych dokument˚ u, • stat - statistiky operac´ı.
66