Zookeeper je podprojekt Hadoopa in čeprav izhaja iz Hadoopa, sem ugotovil, da Zookeeper vse pogosteje uporablja distribuirane okvire zunaj Hadoopa. Danes želim govoriti o Zookeeperju, ta članek ne bo govoril o tem, kako uporabljati Zookeeper, ampak o praktičnih aplikacijah Zookeeperja, katere vrste aplikacij lahko igrajo prednosti Zookeeperja in nazadnje o vlogi, ki jo lahko Zookeeper igra v porazdeljeni arhitekturi spletnih strani. Zookeeper je zelo zanesljiv koordinacijski sistem za velike distribuirane sisteme. Iz te definicije vemo, da je Zookeeper usklajen sistem, ki deluje na porazdeljene sisteme. Zakaj distribuirani sistemi potrebujejo koordinacijski sistem? Razlogi so naslednji:
Razvoj distribuiranega sistema je zelo zahtevna naloga, ki se predvsem odraža v "delni odpovedi" distribuiranega sistema. "Delna okvara" se nanaša na prenos informacij med dvema vozliščema v omrežju; če omrežje odpove, pošiljatelj ne more vedeti, ali je prejemnik prejel sporočilo, vzrok za to napako je zapleten; prejemnik je morda prejel sporočilo pred omrežno napako ali pa je sprejemnikov proces mrtev. Edini način, da pošiljatelj dobi pravo sliko, je, da se ponovno poveže s sprejemnikom in ga vpraša, zakaj je prišlo do napake, kar je problem "delne okvare" v razvoju distribuiranih sistemov.
Zookeeper je okvir za reševanje "delnih okvar" distribuiranih sistemov. Zookeeper ne dovoljuje porazdeljenim sistemom, da se izognejo težavam z "delno okvaro", vendar omogoča porazdeljenim sistemom, da te težave pravilno obravnavajo ob delnih okvarah, tako da lahko distribuirani sistemi delujejo normalno.
Pogovorimo se o praktični uporabi Zookeeperja:
Scenarij 1: Obstaja skupina strežnikov, ki odjemalcu zagotavljajo določeno storitev (na primer, strežniška stran porazdeljene spletne strani, ki sem jo prej ustvaril, je grozd, sestavljen iz štirih strežnikov za zagotavljanje storitev front-end gruči), in upamo, da bo odjemalec lahko našel strežnik v strežniškem gruči vsakič, ko ga odjemalec zahteva, da bo strežnik lahko odjemalcu zagotovil storitve, ki jih odjemalec zahteva. Za ta scenarij moramo imeti seznam strežnikov v našem programu, iz katerega vsakič, ko ga odjemalec zahteva, preberemo seznam strežnikov. Potem tega podseznama seveda ni mogoče shraniti na enem samem strežniku vozlišča, sicer se bo vozlišče zataknilo in celoten gručič bo odpovedal, in upamo, da bo ta seznam takrat zelo dostopen. Če je strežnik na seznamu shranjevanja pokvarjen, lahko drugi strežniki takoj zamenjajo pokvarjenega strežnika, pokvarjeni strežnik pa se lahko odstrani s seznama, tako da se lahko neuspešen strežnik umakne iz delovanja celotnega grozda, pri čemer vse te operacije ne bo izvajal odpovedani strežnik, temveč običajni strežnik v gruči. To je aktivna distribuirana podatkovna struktura, ki lahko aktivno spreminja stanje podatkovnih elementov, ko se spremenijo zunanji pogoji. Ogrodje Zookeeper nudi to storitev. Ime te storitve je: Unified Naming Service, ki je zelo podobno storitvi JNDI v javaEE.
Scenarij 2: Porazdeljena storitev zaklepanja. Ko distribuiran sistem manipulira s podatki, na primer z branjem podatkov, analizo podatkov in na koncu spreminjanjem podatkov. V distribuiranem sistemu so te operacije lahko razporejene na različna vozlišča v gruči, nato pa nastane problem skladnosti v procesu obdelave podatkov; če je ta nekonsistentna, dobimo napačen rezultat operacije; v enem samem procesnem programu je problem konsistentnosti enostaven za rešitev, vendar je težje doseči distribuirani sistem, ker so operacije različnih strežnikov v porazdeljenem sistemu v neodvisnih procesih, vmesni rezultati in procesi operacij pa se morajo prenašati skozi omrežje. Potem je veliko težje doseči doslednost operacij podatkov. Zookeeper ponuja storitev zaklepanja, ki rešuje ta problem in nam omogoča zagotavljanje doslednosti podatkovnih operacij pri izvajanju porazdeljenih podatkovnih operacij.
Scenarij 3: Upravljanje konfiguracije. V distribuiranem sistemu bomo aplikacijo storitev namestili na n strežnikov ločeno, konfiguracijske datoteke teh strežnikov pa so enake (na primer, v okviru distribuiranih spletnih strani, ki sem ga zasnoval, so na strežniški strani 4 strežniki, programi na 4 strežnikih so enaki, konfiguracijske datoteke pa so enake), če se nastavitve konfiguracijskih datotek spremenijo, moramo te konfiguracijske datoteke spreminjati eno za drugo, če je treba zamenjati, so strežniki razmeroma majhni, te operacije niso preveč težavne, Če imamo veliko število distribuiranih strežnikov, kot je Hadoop grozd velikega internetnega podjetja s tisoči strežnikov, je spreminjanje konfiguracijskih možnosti lahko nadležno in nevarno. V tem trenutku je Zookeeper zelo uporaben, lahko uporabimo Zookeeper kot zelo razpoložljiv konfiguracijski pomnilnik, to predamo Zookeeperju za upravljanje, kopiramo konfiguracijsko datoteko gruče na vozlišče datotečnega sistema Zookeeperja in nato uporabimo Zookeeper za spremljanje stanja konfiguracijske datoteke v vseh distribuiranih sistemih, ko ugotovimo, da se je konfiguracijska datoteka spremenila, Vsak strežnik bo prejel obvestilo od Zookeeperja za sinhronizacijo konfiguracijskih datotek v Zookeeperju, storitev Zookeeper pa bo prav tako zagotovila, da je sinhronizacija atomska, da se konfiguracijska datoteka vsakega strežnika pravilno posodobi.
Scenarij 4: Zagotavljanje funkcij za popravilo napak za distribuirane sisteme. Upravljanje grozdov je zahtevno, dodajanje storitve zookeeper v distribuirani sistem pa nam olajša upravljanje grozda. Najbolj zapletena stvar pri upravljanju grozda je upravljanje napak vozlišč; zookeeper lahko grozdu dovoli, da izbere zdravo vozlišče kot glavni, glavno vozlišče pozna trenutno stanje vsakega strežnika v gruči, ko pa vozlišče odpove, bo glavni strežnik obvestil druge strežnike v gruči, da se računalniške naloge razdelijo med različna vozlišča. Zookeeper lahko ne le najde napake, ampak tudi pregleda okvarjen strežnik, preveri, kakšna napaka je strežnik, če je napaka popravljena, lahko samodejno popravi ali obvesti sistemskega administratorja za napako, da lahko ta hitro najde težavo in popravi napako vozlišča. Morda imate še vedno vprašanje, kaj naj storim, če je glavni zaslon okvarjen? Zookeeper to prav tako upošteva, saj ima notranji "algoritem za izbiro vodij", mojstre je mogoče dinamično izbrati, in ko gospodar odpove, lahko takoj izbere novega mojstra za upravljanje grozda.
Pogovorimo se o funkcijah Zookeeperja:
ZooKeeper je poenostavljen datotečni sistem. To je nekoliko podobno Hadoopu, vendar datotečni sistem ZooKeeper upravlja majhne datoteke, medtem ko Hadoop upravlja zelo velike datoteke.
Zookeeper ponuja obilico "artefaktov", ki omogočajo številne operacije za usklajevanje podatkovnih struktur in protokolov. Na primer: distribuirane vrste, porazdeljene zaklepe in algoritem "izbire vodje" skupine vozlišč na isti ravni.
ZooKeeper je zelo dostopen, njegova lastna stabilnost je precej dobra, distribuirani grozdi se lahko zanašajo na upravljanje Zookeeper grozdov, ZooKeeper pa se uporablja za preprečevanje težav z okvaro posamezne točke pri distribuiranih sistemih.
Zookeeper uporablja ohlapno povezan način interakcije. To je najbolj očitno v dejstvu, da Zookeeper zagotavlja porazdeljene ključavnice, ki jih je mogoče uporabiti kot mehanizem za terminiranje, ki omogoča sodelujočim procesom, da odkrijejo in sodelujejo med seboj, ne da bi poznali druge procese (ali omrežje), in sodelujoče strani sploh ne potrebujejo obstajati hkrati, dokler pustijo sporočilo v Zookeeperju, in po koncu procesa lahko drug proces prebere to sporočilo, s čimer se loči odnos med vozlišči.
ZooKeeper zagotavlja skupni repozitorij za grozd, iz katerega lahko gruči centralno bere in zapisuje skupne informacije, s čimer se izogne programiranju skupnih operacij za vsako vozlišče in zmanjša težavnost razvoja distribuiranih sistemov.
Zookeeper je predvsem odgovoren za shranjevanje in upravljanje podatkov, ki so vsem pomembni, ter za sprejemanje registracije opazovalcev; ko se stanje teh podatkov spremeni, je Zookeeper odgovoren za obveščanje tistih opazovalcev, ki so se registrirali na Zookeeperju, da ustrezno odgovorijo, da dosežejo način upravljanja master/slave, podoben grozdu.
Vidimo lahko, da je Zookeeper zelo ugoden za razvoj porazdeljenih sistemov, kar lahko naredi porazdeljene sisteme bolj robustne in učinkovite.
Pred kratkim sem sodeloval v interesni skupini oddelka za hadoop, kjer sem v testnem okolju namestil Hadoop, Mapreduce, Hive in Hbase ter vnaprej namestil Zookeeper ob namestitvi hbase. Zookeeper lahko nudi storitve, zato je več kot polovica od teh 3 2, več kot polovica od 4 pa je prav tako dva, zato lahko namestitev treh strežnikov doseže učinek 4 strežnikov. Med učenjem Hadoopa menim, da je Zookeeper najtežji podprojekt za razumevanje, razlog ni v tem, da je tehnično odgovoren, ampak v tem, da mi je smer uporabe zelo zmedena, zato moj prvi članek o Hadoop tehnologiji začne s Zookeeperjem in ne govori o specifični tehnični implementaciji, vendar iz scenarijev uporabe Zookeeperja razumem področje uporabe Zookeeperja, mislim, da bo učenje Zookeeperja bolj učinkovito z polovico truda.
Razlog, zakaj želim danes govoriti o Zookeeperju, je, da dopolnim okvir distribuirane spletne strani iz mojega prejšnjega članka. Čeprav sem arhitekturo spletne strani zasnoval kot porazdeljeno strukturo, sem ustvaril tudi preprost mehanizem za obravnavo napak, kot je mehanizem srčnega utripa, vendar še vedno ni mogoče rešiti posamezne točke okvare gruče; če je strežnik okvarjen, bo odjemalec poskušal vzpostaviti povezavo s tem strežnikom, kar povzroči blokado nekaterih zahtevkov in tudi zapravljanje strežniških virov. Vendar trenutno ne želim spreminjati svojega ogrodja, ker vedno čutim, da bo dodajanje storitve Zookeeper obstoječim storitvam vplivalo na učinkovitost spletne strani. Na srečo je tudi naš oddelek naletel na takšno težavo, saj bo razvil zmogljiv okvir za oddaljene klice, ločil upravljanje grozdov in komunikacije ter centralno zagotavljal učinkovite in dostopne storitve.
Premeščeno iz ttp://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.html |