https://zookeeper.apache.org/doc/current/zookeeperOver.html
Zookeeper repliceert standaard al uw gegevens naar elk knooppunt en laat klanten de gegevens bekijken op wijzigingen. Wijzigingen worden zeer snel (binnen een bepaalde tijd) naar klanten verzonden. U kunt ook "kortstondige knooppunten" maken, die binnen een bepaalde tijd worden verwijderd als een client de verbinding verbreekt. ZooKeeper is sterk geoptimaliseerd voor lezingen , terwijl schrijven erg traag is (omdat ze over het algemeen naar elke client worden verzonden zodra het schrijven plaatsvindt). Ten slotte is de maximale grootte van een "bestand" (znode) in Zookeeper 1 MB, maar meestal zijn het enkele strings.
Alles bij elkaar genomen betekent dit dat de dierenverzorger niet bedoeld is om veel gegevens op te slaan, en zeker geen cache. In plaats daarvan is het voor het beheren van hartslagen/weten welke servers online zijn, het opslaan/bijwerken van de configuratie en mogelijk het doorgeven van berichten (hoewel als je grote #s berichten hebt of hoge doorvoervereisten, zoiets als RabbitMQ veel beter zal zijn voor deze taak).
Kortom, ZooKeeper (en Curator, die erop is gebouwd) helpt bij het omgaan met de mechanica van clustering - hartslagen, het distribueren van updates/configuratie, gedistribueerde vergrendelingen, enz.
Het is niet echt vergelijkbaar met Redis, maar voor de specifieke vragen...
-
Het ondersteunt geen enkele berekening en voor de meeste datasets kunnen de gegevens niet met enige prestatie worden opgeslagen.
-
Het wordt gerepliceerd naar alle knooppunten in het cluster (er gaat niets boven Redis-clustering waar de gegevens kunnen worden gedistribueerd). Alle berichten worden atomair volledig verwerkt en gesequenced, dus er zijn geen echte transacties. Het kan worden GEBRUIKT om clusterbrede vergrendelingen voor uw services te implementeren (daar is het zelfs erg goed in), en er zijn veel vergrendelingsprimitieven op de znodes zelf om te bepalen welke knooppunten er toegang toe hebben.
-
Natuurlijk, maar ZooKeeper vult een niche. Het is een hulpmiddel om een gedistribueerde applicatie leuk te laten spelen met meerdere instanties, niet voor het opslaan/delen van grote hoeveelheden gegevens. Vergeleken met het gebruik van een IMDG voor dit doel, zal Zookeeper sneller zijn, hartslagen en synchronisatie op een voorspelbare manier beheren (met veel API's om dit deel gemakkelijk te maken), en heeft het een "push" -paradigma in plaats van "pull", dus knooppunten zijn zeer snel op de hoogte van wijzigingen.
Het citaat uit de gekoppelde vraag...
Een canoniek voorbeeld van het gebruik van Zookeeper is berekening met gedistribueerd geheugen
... is, IMO, een beetje misleidend. Je zou het gebruiken om de berekening te orkestreren, niet om de gegevens te verstrekken. Stel dat u bijvoorbeeld rijen 1-100 van een tabel moet verwerken. Je zou 10 ZK-knooppunten kunnen plaatsen, met namen als "1-10", "11-20", "21-30", enz. Client-applicaties zouden automatisch door ZK op de hoogte worden gebracht van deze wijziging, en de eerste zou " 1-10" en stel een kortstondig knooppunt in clients/192.168.77.66/processing/rows_1_10
De volgende aanvraag zou dit zien en naar de volgende groep gaan om te verwerken. De feitelijke gegevens die moeten worden berekend, worden elders opgeslagen (bijv. Redis, SQL-database, enz.). Als het knooppunt halverwege de berekening faalde, zou een ander knooppunt dit kunnen zien (na 30-60 seconden) en de taak weer oppakken.
Ik zou echter zeggen dat het canonieke voorbeeld van ZooKeeper de leidersverkiezing is. Laten we zeggen dat je 3 nodes hebt -- een is master en de andere 2 zijn slaves. Als de master uitvalt, moet een slave-knooppunt de nieuwe leider worden. Dit soort dingen is perfect voor ZK.