2013-07-31 27 views
5

Używam spymemcached & HashAlgorithm.KETAMA_HASH do połączenia z pulą memcached 5 węzłów.Jak obsługiwać odzyskiwane węzły memcached przy użyciu spymemcached i HashAlgorithm.KETAMA_HASH

Moje zrozumienie jest, gdy używamy spójnego algorytmu mieszającego jak, gdy węzeł jest w dół, nie musimy się martwić jak klucz zostanie ponownie rozdzielone (z min. Uderzenia)

Co zrobić, jeśli podczas dolny węzeł ma dołączyć do puli. Co muszę zrobić?

Czy muszę się upewnić, że nieaktualne dane muszą zostać usunięte? A może mój program wymaga specjalnej obsługi w tym przypadku?

Odpowiedz

4

Biorąc pod uwagę, że dokument ten jest dokładna: http://info.couchbase.com/rs/northscale/images/Couchbase_WP_Dealing_with_Memcached_Challenges.pdf

Jeśli istnieją jakiekolwiek zakłócenie sieci, oraz jeden lub więcej klientów decyduje, że zwłaszcza serwer memcached nie jest już dostępne, zostaną one automatycznie powtarzać jakieś dane do pozostałe węzły, nawet jeśli oryginalny nadal jest dostępny. Jeśli węzeł ostatecznie powróci do usługi (na przykład po rozwiązaniu problemu z awarią sieci), dane w tym węźle będą nieaktualne, a klienci bez zaktualizowanych informacji o ponownym mapowaniu serwerów kluczy odczytają nieaktualne dane.

Zakładając, to jest nadal aktualne: http://lists.danga.com/pipermail/memcached/2007-April/003852.html byłoby bezpieczne odświeżania/przepłukać węzeł przed dodaniem go do tyłu. Wymuszenie usunięcia węzła w celu usunięcia wszystkich nieaktualnych wpisów.

+0

Rozumiem, że muszę wypłukać wszystkie nieaktualne dane we wszystkich węzłach. Czemu? Ponieważ niektórzy klienci mogą widzieć uszkodzony węzeł, ale niektórzy klienci mogą nadal zakładać, że węzeł nie działa. Biorąc pod uwagę, że klienci mogą mieszać klucz w innym węźle, może wystąpić niespójność danych. Ale ten problem jest trudny, chyba że mamy sposób, aby zablokować wszystkie memcached węzły i wykonać kolor - aby uniknąć wyścigu. – Howard

+0

Na podstawie mojej opinii uważam, że nadal bezpiecznie można opróżnić tylko węzeł. Jest czysty, jeśli jest jakikolwiek wniosek do węzła, spowoduje brak, dodanie nowych i świeżych informacji. Jeśli klient uzna, że ​​jest niedziałający, będzie mieszał się z innym węzłem, co również skutkuje brakiem. Jeśli tak się stanie, oba węzły mają na przykład klucz "foo". Kiedy węzeł zakończony powraca do tego klienta, należy go ponownie przepłukać. Oto trochę więcej na ten temat: http://www.caiapps.com/duplicate-key-problem-in-memcache-php/ –

+1

tak, ale to, co powiedziałeś, jest ważne tylko wtedy, gdy masz pojedynczego klienta, ale wiele serwerów. nie ma sposobu, aby skoordynować różnych klientów, aby korzystać z tego samego zestawu memcached serwerów w danym czasie (załóżcie przy użyciu spójnego hashowania). – Howard