mongodb: zestaw replik z modułem równoważenia obciążenia

9

Czy istnieje opcja równoważenia obciążenia za pomocą zestawów replik mongodb? Nie proszę o HAProxy lub podobny, ale o wbudowaną funkcję od mongodb. Nie można znaleźć wskazówek na ten temat w dokumentacji.

ledy
źródło

Odpowiedzi:

11

Jeśli używasz shardingu, to „moduł równoważenia obciążenia” jest procesem mongo - w rzeczywistości przypomina bardziej router - zachowuje kopię bazy danych konfiguracji w pamięci i może podejmować decyzje na podstawie klucza fragmentu.

Jeśli masz na myśli równoważenie obciążenia między identycznymi zestawami replik lub członami zestawu, pojawia się żądanie funkcji, aby mongo obsłużyli również ten scenariusz ( https://jira.mongodb.org/browse/SERVER-1594 ), jednak podane sposób, w jaki działają sterowniki, nie jest tak naprawdę konieczny (spowodowałoby to, że sterowniki byłyby mniej złożone).

W jednym zestawie replik nie można rozpowszechniać zapisów, wszystkie muszą przejść do podstawowego. Możesz już rozpowszechniać odczyty do drugorzędnych, korzystając z Preferencji odczytu, jeśli uznasz to za stosowne. Sterownik śledzi, co jest pierwotne, a co wtórne i odpowiednio kieruje zapytania.

Adam C.
źródło
2

„Równoważenie obciążenia” osiąga się poprzez dzielenie na fragmenty. Przez dzielenie faktycznie rozdzielasz zapisy / aktualizacje na poszczególne odłamki. Nie ma konkretnego algorytmu, który robi to, ponieważ mongo pozwala podzielić dane na partycje według dowolnej kombinacji klawiszy. Najlepsze algorytmy partycjonowania to te, które zawierają kombinację wpisów sekwencyjnych i losową.

Na przykład identyfikator użytkownika można podzielić na partycje w następujący sposób

xx-sha1(user email) 
xx = time sequence

Należy pamiętać, że aby wdrożyć sharding, musisz mieć trzy serwery konfiguracji i węzły danych. Węzły danych można pogrupować w zestawy replik w celu zapewnienia nadmiarowości i można ich używać (tylko jeśli jest to możliwe) do odczytu danych z obiektów pomocniczych. Mówię tylko wtedy, gdy możesz odczytać dane, ponieważ replikacja jest wykonywana asynchronicznie, więc nie ma gwarancji, że nowe dane będą dostępne w czasie zapytania na serwerach pomocniczych.

Pamiętaj, że algorytm partycjonowania zależy wyłącznie od Ciebie i powinien odpowiadać potrzebom Twojej aplikacji. Powinieneś także rozważyć, czy chcesz tylko zapisać dane i tylko od czasu do czasu czytasz, czy też musisz je przeczytać zaraz po ich napisaniu.

silviud
źródło