2012-02-19 15 views
8

Obecnie uruchamiam moją witrynę na jednym serwerze z MongoDB. Na moim serwerze mam dwa komponenty (1) przeszukiwacz, który działa co godzinę i dołącza dane do mojej instancji MongoDB (2) strony internetowej, która czyta z indeksu przeszukiwacza, a także zapisuje do DB personalizacji użytkownika. Przechodzę do Amazon EC2 w celu automatycznego skalowania, dzięki czemu serwer internetowy może automatycznie skalować, dzięki czemu mogę zwiększyć liczbę serwerów w miarę wzrostu ruchu w sieci. Nie potrzebuję automatycznego skalowania dla mojego robota. Stanowi to wyzwanie dla sposobu korzystania z MongoDB. Zastanawiam się, co moim najlepszym rozwiązaniem jest optymalizacja naSkalowanie MongoDB na EC2 czy powinienem po prostu przełączyć się na DynamoDB?

  • minimalne zmiany do mojego kodu (kod jest w Perlu)
  • możliwość łatwego dodawania/usuwania web-serwerów bez obaw o utratę danych w DB
  • niski koszt

w krótkiej perspektywie, DB na pewno będzie w stanie zmieścić się w pamięci na wszystkich machies ponieważ będzie poniżej 2 GB. Nie można przebudować DB personalizacji użytkownika, więc ważniejsze jest to, a indeks można z łatwością odbudować. Obecny indeks indeksowania MongoDB ma około 100 000 wpisów, które są wpisane w ~ 15 różnych kolumnach. Jest to budowane z myślą o szybkości, ponieważ pracuję nad witryną randkową online (którą można przeszukiwać na wiele sposobów).

mogę wymyślić kilka opcji

  1. Zastosowanie SimpleDB do sklepu personalizacji użytkownika i MongoDB dla indeksu. Czy indeks jest replikowany na wszystkich komputerach, jednak nie wiem zbyt wiele o replikacji MongoDB.
  2. Przenieś wszystko do SimpleDB
  3. Przenieś wszystko do DynamoDB

nie wiem zbyt wiele o SimpleDB i/lub DynamoDB. Opierając się na artykułach wydaje się, że DynamoDB byłby naturalnym wyborem, ale nie jestem pewien co do dobrego wsparcia perl, czy mogę mieć wszystkie kolumny, indeks, itp. Ktoś ma doświadczenie lub jakąś radę?

Odpowiedz

3

Możesz obsługiwać Mongo na jednym serwerze na EC2, z którym łączy się każde pole w farmie sieciowej. Następnie można łatwo obrócić kolejną instancję internetową, która korzysta z tego samego zestawu DB.

Obecnie mamy trzy serwery Mongo, gdy uruchamiamy zestaw replik, a kiedy dojdziemy do punktu, w którym musimy skalować poziomo z Mongo, uruchomimy kilka nowych instancji i odrzuci większe kolekcje.

+0

Dzięki Joe! Jest to bardzo wnikliwe. Aby wyjaśnić, czy dane Mongo są rozproszone na 3 komputerach lub czy są one replikowane na 3 komputerach? To bardzo dobry pomysł na oddzielenie skalowania moich serwerów sieciowych od skalowania Mongo. Czy występują jakieś przestoje podczas skalowania serwerów Mongo? Czy masz jakieś wskazówki/linki na temat dobrych sposobów na skalowanie Mongo, kiedy potrzebujesz większej pojemności? – ZenoriInc

+0

Używamy 3 oddzielnych maszyn z zestawem replik, jednym wzorcem, dwiema replikami. Jest to głównie dla automatycznego przełączania awaryjnego, więc jeśli nasz mistrz zginie, jedna z replik zostanie awansowana na mistrza. Dane w poszczególnych danych repliki są takie same. – Joe

+0

Jeśli chodzi o skalowanie danych, możesz użyć tzw. Shardingu. Tutaj dzielisz dane z jednej lub więcej kolekcji w wielu instancjach Mongo. Pozwala to na skalowanie w poziomie. Twoje dane są rozproszone na wielu fizycznych maszynach, a proxy informuje Mongo, dokąd się udać w oparciu o klucz odłamkowy. Skonfigurowaliśmy infrastrukturę, aby upewnić się, że wszystko działa, ale obecnie nie ma wystarczającej ilości danych, aby uzasadnić korzystanie z niej, gdy tylko uruchomimy te instancje. – Joe

3

Obecnie prowadzę swoją witrynę na jednym serwerze z MongoDB.

Po pierwsze, jest to duża czerwona flaga. Podczas pracy z produkcją zawsze zaleca się uruchomienie zestawu replik z co najmniej trzema pełnymi węzłami.

Replikacja zapewnia automatyczną redundancję i awarię.

możliwość łatwego dodawania/usuwania web-serwerów bez obaw o utratę danych w DB

MongoDB wspiera koncepcję zwaną sharding. Sharding umożliwia skalowanie w poziomie poprzez automatyczne dzielenie danych. Partycjonowanie odbywa się przez shard key.

Jeśli zamierzasz korzystać z funkcji odtrącania, przeczytaj dokładnie ten link: bardzo i rozpoznaj ograniczenia. W przypadku fragmentacji MongoDB musisz wybrać poprawny klucz, który umożliwi równomierne rozmieszczanie zapytań w obrębie odłamków.

Aktualny indeks indeksowania MongoDB ma około 100k wpisów, które są wpisane w ~ 15 różnych kolumnach.

To będzie problem z odłamywaniem. Sharding może skalować tylko zapytania korzystające z klucza Shard. Zapytanie na kluczu shard może być kierowane bezpośrednio do jednego komputera. Zapytanie o indeks pomocniczy trafia do wszystkich komputerów.

Masz 15 różnych indeksów, więc w zasadzie wszystkie te zapytania trafią do wszystkich odłamków. To nie będzie "bardzo dobrze skalować" w ogóle.

1

Pamiętaj, że w tej chwili EC2 nie ma 64-bitowych małych instancji, co sprawia, że ​​replikacja jest potencjalnie kosztowna. Ponieważ pamięć MongoDB mapuje pliki, 32-bitowy system operacyjny nie jest zalecany.

+1

W zeszłym tygodniu Amazon ogłosił w końcu 64-bitową wersję dla wszystkich rozmiarów instancji i nowego średniego rozmiaru – Bryce

1

Miałem bardzo złe doświadczenia z SimpleDB i uważam, że jest to w zasadzie błędne, więc chciałbym tego uniknąć.

Trzy jest dobrym biały papier, w jaki sposób skonfigurować MongoDB na Amazon EC2: http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

podejrzewam konfigurowania MongoDB na EC2 jest najszybszym rozwiązaniem w porównaniu do przepisywania-/ migrujące do DynamoDB.

Powodzenia!

Powiązane problemy