2013-08-22 25 views
16

Pytanie 1: Wiem, że Redis ładuje wszystkie dane do pamięci, poprawiając w ten sposób szybkość odczytu/zapisu. Czy to oznacza, że ​​jeśli moja wielkość pamięci to 2G, maksymalny rozmiar zbioru danych nie powinien być większy niż 2G? Teraz moja baza danych ma dane 100G +, pamięć mojego serwera nie może być większa niż 32G, więc Redis nie nadaje się już dla mnie?Redis, dystrybuowane czy nie?

Pytanie 2: Czy Redis jest systemem rozproszonym, czy nie? Kiedy używam google do wyszukiwania właściwości CAP redis, mówi, że Redis nie jest systemem rozproszonym, więc nie ma nic wspólnego z CAP . Ale od Wikipedia, mówi, że ma architekturę master-slave, jeden master z wieloma urządzeniami slave. Jak mylące.

Odpowiedz

35

Jeśli chodzi o pytanie 1, Redis jest magazynem wewnętrznym z pewnymi możliwościami trwałości. Cały zestaw danych powinien zmieścić się w pamięci. Pojedyncze wystąpienie jest zatem ograniczone przez maksymalną pamięć twojego serwera. Teraz możesz również przesłać dane do kilku instancji Redis działających na wielu serwerach. Pod warunkiem, że masz na to budżet, możliwe jest przechowywanie 100 GB - 1 TB danych na zestawie skrzynek Redis. Pamiętaj, że sharding nie jest automatyczny: musi zostać zaimplementowany przez klienta lub aplikację. Wprowadza również pewne ograniczenia dotyczące operacji, które można wykonywać na danych (na przykład nie byłoby możliwe po stronie serwera, aby obliczyć punkty przecięcia dwóch zestawów hostowanych przez różne instancje Redis).

W przypadku pytania 2 pojedyncza instancja Redis nie jest systemem rozproszonym. Jest to zdalny, scentralizowany sklep. Teraz, korzystając z kilku instancji Redis, możesz zbudować system rozproszony. Ponieważ jest to podejście typu "zrób to sam", możesz zdecydować, że będzie to system CP lub AP.

Pojedyncza instancja może replikować swoją działalność do instancji podrzędnych (które są ostatecznie zgodne z wzorcem). Aplikacja może zawsze łączyć się z serwerem głównym w celu odczytu i zapisu. W takim przypadku możesz otrzymać system CP. Może również pisać na wzorcu i czytać ze wszystkich instancji (w tym niewolników), więc możesz uzyskać system AP. Powiedziałem "może", ponieważ do stworzenia takich systemów na Redis potrzeba sporo pracy.

Można mieszać replikację shardingu i master/slave w celu zbudowania potrzebnego systemu rozproszonego. Redis zapewnia jednak tylko podstawowe klocki. Zwłaszcza, że ​​oferuje bardzo mało do radzenia sobie z odpornością i HA (i adres P w twierdzeniu CAP). Tylko IMO, Redis sentinel nie wystarcza do obsługi konfiguracji HA Redis, ponieważ obejmuje tylko zarządzanie rolami. Musisz uzupełnić go o menedżera zasobów i umieścić dużą logikę w kliencie/aplikacji.

Istnieje trwający projekt o nazwie Redis Cluster, którego celem jest dostarczenie minimalistycznego gotowego do użycia systemu rozproszonego, ale nadal brakuje mu wielu rzeczy i nie można go jeszcze wykorzystać do celów produkcyjnych.

Jeśli potrzebujesz gotowego, rozproszonego sklepu, Redis prawdopodobnie nie jest dobrym rozwiązaniem. Będziesz lepiej obsługiwany przez Cassandrę, Riak, MongoDB, Couchbase, Aerospike, MySQL Cluster, Oracle NoSQL, etc ... Jednakże, jeśli chcesz zbudować swój własny wyspecjalizowany system, Redis jest doskonałym komponentem do budowania.

+0

Cóż, twoje informacje są bardzo ważne i na miejscu dla mnie. Z twojego opisu, redis naprawdę nie jest odpowiedni dla mnie, ponieważ mamy zainteresowanie budowaniem wyspecjalizowanego systemu, tylko gotową bazą danych NoSQL przechowującą 100G + dane. Teraz zwracam większą uwagę na mongoDB i couchDB. – wuchang

+1

Ponadto, myślę, że Redis jest dobrym rozwiązaniem dla ** buforowania ** i nie przechowywania wszystkich danych. Tak więc możliwe jest przechowywanie fragmentacji danych w celu częstego korzystania i dostępu. – Babak