https://zookeeper.apache.org/doc/current/zookeeperOver.html
Som standard replikerer Zookeeper alle dine data til hver node og lader klienter se dataene for ændringer. Ændringer sendes meget hurtigt (inden for et begrænset tidsrum) til kunderne. Du kan også oprette "ephemeral nodes", som slettes inden for en bestemt tid, hvis en klient afbryder forbindelsen. ZooKeeper er meget optimeret til læsning , mens skrivninger er meget langsomme (da de generelt sendes til hver klient, så snart skrivningen finder sted). Endelig er den maksimale størrelse af en "fil" (znode) i Zookeeper 1 MB, men typisk vil de være enkeltstrenge.
Tilsammen betyder det, at zookeeper ikke er beregnet til at gemme for meget data, og bestemt ikke en cache. I stedet er det til styring af hjerteslag/vide, hvilke servere der er online, lagring/opdatering af konfiguration og muligvis meddelelsesoverførsel (men hvis du har et stort antal meddelelser eller høje gennemstrømningskrav, vil noget som RabbitMQ være meget bedre til denne opgave).
Dybest set hjælper ZooKeeper (og Curator, som er bygget på det) med at håndtere mekanikken ved klyngedannelse -- hjerteslag, distribution af opdateringer/konfigurationer, distribuerede låse osv.
Det er ikke rigtig sammenligneligt med Redis, men for de specifikke spørgsmål...
-
Den understøtter ikke nogen beregning, og for de fleste datasæt vil den ikke være i stand til at gemme dataene med nogen ydeevne.
-
Det replikeres til alle noder i klyngen (der er intet som Redis-klyngning, hvor dataene kan distribueres). Alle meddelelser behandles atomært fuldt ud og er sekventeret, så der er ingen reelle transaktioner. Det kan bruges til at implementere klyngedækkende låse til dine tjenester (det er det faktisk meget godt til), og der er en masse låsende primitiver på selve znoderne for at kontrollere, hvilke noder der får adgang til dem.
-
Selvfølgelig, men ZooKeeper fylder en niche. Det er et værktøj til at få distribuerede applikationer til at spille godt med flere instanser, ikke til lagring/deling af store mængder data. Sammenlignet med at bruge en IMDG til dette formål, vil Zookeeper være hurtigere, styre hjerteslag og synkronisering på en forudsigelig måde (med en masse API'er til at gøre denne del let), og har et "push"-paradigme i stedet for "pull", så noder er underrettes meget hurtigt om ændringer.
Citatet fra det linkede spørgsmål...
Et kanonisk eksempel på Zookeeper-brug er distribueret hukommelsesberegning
... er, IMO, en smule misvisende. Du ville bruge det til at orkestrere beregningen, ikke give dataene. Lad os f.eks. sige, at du skulle behandle række 1-100 i en tabel. Du kan sætte 10 ZK noder op, med navne som "1-10", "11-20", "21-30" osv. Klientapplikationer vil automatisk blive underrettet om denne ændring af ZK, og den første ville have fat i " 1-10" og indstil en flygtig node clients/192.168.77.66/processing/rows_1_10
Den næste ansøgning ville se dette og gå til den næste gruppe at behandle. De faktiske data, der skal beregnes, vil blive lagret andetsteds (dvs. Redis, SQL-database osv.). Hvis noden fejlede halvvejs gennem beregningen, kunne en anden node se dette (efter 30-60 sekunder) og hente jobbet igen.
Jeg vil dog sige, at det kanoniske eksempel på ZooKeeper er ledervalg. Lad os sige, at du har 3 noder -- den ene er mester og de 2 andre er slaver. Hvis masteren går ned, skal en slaveknude blive den nye leder. Denne type ting er perfekt til ZK.