Obecnie konfiguruję podobny system (na poziomie profesjonalnym) i taki projekt wybrałem:
- Dwa równoważniki obciążenia Nginx (oba aktywne, oba przełączanie awaryjne dla drugiego, zrównoważone za pomocą okrągłego robina DNS)
- Dwie bazy danych MySQL w trybie master master replikacji
- Dwie instancje Tomcat jako klaster tomcat
- Dwie instancje Memcached dla buforowania i udostępniania stanu sesji dla klastra Tomcat
Pozwoli to uzyskać nadmiarowe, skalowalne rozwiązanie o wysokiej dostępności.
Loadbalancery (na przyzwoitym sprzęcie) z łatwością wyrównają nasycenie nasyconej linii 1 Gb / s każda. Jest to również świetne miejsce do odciążania SSL.
Możesz zapisać informacje o sesji w memcached. W przypadku awarii instancji tomcat inna instancja tomcat może pobrać odpowiednie informacje o sesji, a klienci nic nie zauważą. Nie zapomnij też połączyć tego z lepkimi sesjami. (Aby ograniczyć ruch w sieci)
Klastrowanie Tomcat ma również opcję udostępniania informacji o sesji między klastrami w czasie rzeczywistym, bez korzystania z memcached. Chociaż myślę, że pod względem wydajności, używanie Memcached będzie lepsze.
Jeśli potrzebujesz więcej mocy w którejkolwiek z tych aplikacji:
- Nginx: Dodaj więcej modułów równoważących obciążenie, chociaż nie sądzę, że wkrótce będzie to wąskie gardło.
- Tomcat: możesz łatwo zwiększyć rozmiar klastra Tomcat lub dodać więcej klastrów
- MySQL: dodaj kilka urządzeń podrzędnych tylko do odczytu lub zwiększ rozmiar klastra (w zależności od aplikacji, ale ponieważ napisałeś aplikację opartą na REST, nie powinno to stanowić problemu)
- Memcached: dodaj więcej węzłów, Memcached skaluje się całkiem dobrze, jak sądzę.
Nie wiem, jak tworzona jest aplikacja i jakie są duże zasoby zasobów, ale jeśli zauważysz duże obciążenie bazy danych (podczas testów ładowania!), Dodanie pamięci podręcznej między aplikacją a bazą danych może z pewnością znacznie poprawić wydajność. Ale nie zapominaj, że nie wszystko jest możliwe do buforowania, jeśli twoje zapytania są zawsze inne, buforowanie nie pomoże (dużo)
Radzę pobrać VMware Workbench (lub oprogramowanie do wirtualizacji similair) i spróbować stworzyć prostą konfigurację. Bez równoważenia obciążenia i grupowania, tylko podstawy i praca stamtąd. Jeden po drugim dodaj kolejne funkcje (równoważenie, buforowanie, klastrowanie itp.) I upewnij się, że przeprowadziłeś badania na każdy temat, abyś wiedział, że dokonałeś właściwego wyboru.
Jeśli nadal będziesz przeprowadzać te same testy wydajności podczas tego procesu, możesz sam przekonać się, czy użycie X jest lepsze niż użycie Y w konfiguracji lub jaki wpływ będzie miało buforowanie itp.
Ostatecznie taka konfiguracja naprawdę zależy od wymagań aplikacji i jej klientów, wszystko można zrobić na różne sposoby, każdy z własnymi mocnymi i słabymi stronami.
Jakieś pytania?
Powodzenia!
Wesley