Ich richte gerade ein ähnliches System ein (auf professioneller Ebene), und dies ist das Design, das ich gewählt habe:
- Zwei Nginx-Loadbalancer (beide aktiv, beide Failover für den anderen, ausgeglichen mit DNS-Round-Robin)
- Zwei MySQL-Datenbanken im Master-Master-Replikationsmodus
- Zwei Tomcat-Instanzen als Tomcat-Cluster
- Zwei zwischengespeicherte Instanzen für Caching und Sitzungsstatusfreigabe für den Tomcat-Cluster
Dadurch wird eine redundante, hochverfügbare und skalierbare Lösung erreicht.
Die Loadbalancer (auf vernünftiger Hardware) können problemlos jeweils eine gesättigte 1-GBit-Leitung ausgleichen. Dies ist auch ein großartiger Ort für das SSL-Offloading.
Sie können Ihre Sitzungsinformationen in memcached speichern. Wenn eine Tomcat-Instanz ausfällt, kann eine andere Tomcat-Instanz relevante Sitzungsinformationen abrufen, und die Clients bemerken nichts. Vergessen Sie nicht, dies auch mit Sticky Sessions zu kombinieren. (Um den Netzwerkverkehr gering zu halten)
Tomcat-Clustering bietet auch die Option, Sitzungsinformationen in Echtzeit für den Cluster freizugeben, ohne Memcached zu verwenden. Obwohl ich die Leistung für sinnvoll halte, ist die Verwendung von Memcached besser.
Wenn Sie in einer dieser Anwendungen mehr Leistung benötigen:
- Nginx: Fügen Sie weitere Loadbalancer hinzu, obwohl ich nicht glaube, dass dies sehr bald der Engpass sein wird.
- Tomcat: Sie können den Tomcat-Cluster problemlos vergrößern oder weitere Cluster hinzufügen
- MySQL: Fügen Sie einige schreibgeschützte Slaves hinzu oder erhöhen Sie die Clustergröße (abhängig von Ihrer Anwendung, aber da Sie eine REST-basierte Anwendung geschrieben haben, sollte dies kein Problem sein).
- Memcached: Füge mehr Knoten hinzu, Memcached skaliert, glaube ich, ziemlich gut.
Ich weiß nicht, wie Ihre Anwendung aufgebaut ist und wie hoch die Ressourcenbelastung ist, aber wenn Sie eine hohe Datenbanklast (während Ihrer Belastungstests!) Feststellen, kann das Hinzufügen eines Caches zwischen der Anwendung und der Datenbank die Leistung erheblich verbessern. Aber vergessen Sie nicht, dass nicht alles zwischengespeichert werden kann. Wenn Ihre Abfragen immer unterschiedlich sind, hilft das Zwischenspeichern nicht (viel).
Mein Rat wäre, VMware Workbench (oder eine ähnliche Virtualisierungssoftware) herunterzuladen und zu versuchen, ein einfaches Setup zu erstellen. Kein Loadbalancing oder Clustering, nur die Grundlagen und die Arbeit von dort. Fügen Sie nacheinander weitere Funktionen hinzu (Balancing, Caching, Clustering usw.) und stellen Sie sicher, dass Sie zu jedem Thema Nachforschungen anstellen, damit Sie wissen, dass Sie die richtige Wahl getroffen haben.
Wenn Sie während dieses Vorgangs immer wieder dieselben Leistungstests durchführen, können Sie selbst feststellen, ob die Verwendung von X in Ihrem Setup besser ist als die Verwendung von Y , oder welche Auswirkungen das Caching usw. hat.
Letztendlich hängt ein solches Setup wirklich von den Anforderungen Ihrer Anwendung und ihrer Kunden ab. Alles kann auf verschiedene Arten durchgeführt werden, wobei jede ihre eigenen Stärken und Schwächen hat.
Sonst noch Fragen?
Viel Glück!
Wesley