Próbuję zrozumieć, dokładnie jakie typy problemów rozwiązuje Apache ZooKeeper ("ZK"), a być może ich Recipes page jest najlepszym miejscem do rozpoczęcia.Przepisy ZooKeepera i Apache Kuratora
pierwsze, robię następujące założenia:
- The Heca API (dostępne zarówno w języku Java i C) naraża these 7 simple methods które następnie pozwalają budować swoje własne wzorce użytkowania, znane jako " ZK Recipes”
- to wtedy do ciebie, aby korzystać z tych ZK recepty na rozwiązanie problemów w rozproszonych programowania sobie
- Albo, zamiast budowania wlasne ZK Recipes, można po prostu użyć tych, które są dostarczane z Apache Curator
- Tak czy inaczej, używasz ZK Receptury (ponownie, własnej roboty lub dostarczone przez kuratora) do rozwiązywania problemów obliczeniowych rozproszonych
wierzę Apache Kafka jest przykładem tego, gdzie Kafka wykorzystuje ZK stworzyć distributed Queue (który jest jednym z wymienionych ZK Recipes). Więc jeśli moje założenia są poprawne, ZK ujawnia te metody API, a twórcy Apache Kafki użyli ZK bezpośrednio lub użyli Kuratora do implementacji "Kolejki" ZK Recipe.
Jeśli którekolwiek z powyższych założeń jest błędne, proszę zacząć od poprawienia mnie! Zakładając, że jestem bardziej lub mniej na torze:
Patrząc na listę ZK Recipes, widzę następujące (niepełny):
- Bariery
- Zamki
- Lider wyborcze
Aby docenić te przepisy i rozwiązania, które prezentują, najpierw muszę docenić problem, który rozwiązują! Rozumiem, co to jest blokada z podstawowej współbieżności Java, ale po prostu nie widzę przypadku użycia, kiedy "rozproszony blokada" byłaby kiedykolwiek potrzebna. Jeśli chodzi o wybory, to wszystko, co mogę wymyślić - jako przypadek użycia dla potrzebującego to na pierwszym miejscu - byłoby, gdybyś tworzył aplikację, którą chciałbyś wysłać z wbudowaną funkcją master/slave lub primary/secondary . Być może w takim przypadku użyłbyś ZK do wprowadzenia własnego przepisu "Wybór liderów", lub po prostu skorzystania z Kuratora Leader Latch po wyjęciu z pudełka. Co do Barier, nie widzę, jak te są inne niż blokady. Tak więc pytam:
- Czy mój problem z urządzeniem nadrzędnym/niewolnikiem lub pierwotnym/wtórnym jest dokładnym przypadkiem użycia przepisu wyborczego przywódcy ZK?
- Jaki byłby przykład rozproszonego zamka? Jaki problem (y) rozwiązuje?
- Ditto for Barriers: i jaka jest różnica między zamkami i barierami?
Dziękuję - kiedy mówisz "* Powiedzmy, że masz system rozproszony, w którym wszystkie konfiguracje są sprawdzone w ZooKeeper ... *", nie rozumiem, co masz na myśli przez "* konfigurację *". Masz na myśli "pliki konfiguracyjne?" Na przykład, jeśli 'myapp.war' zwykle bierze plik konfiguracyjny' myapp.conf' w środowisku wykonawczym, czy mówisz, że ZK może być używane do przechowywania 'myapp.conf' dla wszystkich węzłów z' myapp.war'? Czy masz na myśli coś innego? – DirtyMikeAndTheBoys
Zamiast używać pliku myapp.conf, możesz użyć ZK lub, gdy uruchomisz aplikację, zapisać wszystkie konfiguracje myapp.conf w ZK, a następnie będą dostępne dla całego systemu. W ten sposób możesz również zaktualizować je w czasie wykonywania. Jeśli użytkownik aplikacji może na przykład zmienić konfigurację systemu, może zostać zapisany na ZK zamiast tylko w pamięci - która jest trwała. –
Jeszcze raz dziękuję @Uri Shalit (+1 znowu) - Przykro mi, ale muszę poprosić o jeszcze jedną obserwację tutaj: w jaki sposób chciałbym zapisać 'myapp.conf' w ZK? Czy ZK ma bazę danych, której używa (jeśli tak, to co to jest DB)? Jakie metody API powinienem wywołać, aby zapisać/zaktualizować konfiguracje 'myapp.conf'? Na przykład, powiedzmy, że jedna konfiguracja to 'appPort', która w' myapp.conf' jest przechowywana jako 'appPort = 9200'. Jaki jest przykład wywołania API, które mógłbym zrobić, aby zaktualizować 'appPort' na, powiedzmy, 9300? Dzięki jeszcze raz! – DirtyMikeAndTheBoys