현재 비슷한 수준의 시스템 (전문가 수준)을 설정 중이며 이것이 내가 선택한 디자인입니다.
- 두 개의 Nginx로드 밸런서 (둘 다 활성, 둘 다 장애 조치, DNS 라운드 로빈과 균형 조정)
- 마스터 마스터 복제 모드의 두 MySQL 데이터베이스
- Tomcat 클러스터로서의 Tomcat 인스턴스 2 개
- Tomcat 클러스터의 캐싱 및 세션 상태 공유를위한 2 개의 Memcached 인스턴스
이를 통해 중복성, 고 가용성, 확장 가능한 솔루션을 얻을 수 있습니다.
적절한 하드웨어의로드 밸런서는 포화 된 1gbit 라인을 쉽게로드 밸런싱합니다. SSL 오프 로딩을하기에도 좋은 장소입니다.
세션 정보를 memcached에 저장할 수 있습니다. Tomcat 인스턴스가 실패하는 경우 다른 Tomcat 인스턴스가 관련 세션 정보를 검색 할 수 있으며 클라이언트는이를 알지 못합니다. 이것을 끈적 끈적한 세션과 결합하는 것을 잊지 마십시오. (네트워크 트래픽을 줄이려면)
Tomcat 클러스터링에는 memcached를 사용하지 않고도 실시간으로 클러스터간에 세션 정보를 공유 할 수있는 옵션이 있습니다. 성능은 현명하다고 생각하지만 Memcached를 사용하는 것이 좋습니다.
이러한 응용 프로그램에서 더 많은 전원이 필요한 경우 :
- Nginx :로드 밸런서를 더 추가하십시오. 그러나 이것이 곧 병목이 될 것이라고는 생각하지 않습니다.
- Tomcat : Tomcat 클러스터의 크기를 쉽게 늘리거나 더 많은 클러스터를 추가 할 수 있습니다
- MySQL : 읽기 전용 슬레이브를 추가하거나 클러스터 크기를 늘리십시오 (응용 프로그램에 따라 다르지만 REST 기반 응용 프로그램을 작성 했으므로 문제가되지 않습니다)
- Memcached : 더 많은 노드를 추가하면 Memcached의 확장 성이 상당히 좋습니다.
응용 프로그램이 어떻게 구축되는지, 큰 리소스가 무엇인지 모르지만 (부하 테스트 중) 데이터베이스로드가 높으면 응용 프로그램과 데이터베이스 사이에 캐시를 추가하면 성능이 크게 향상 될 수 있습니다. 그러나 쿼리가 항상 다르면 캐싱이 도움이되지 않는 모든 것이 캐싱 가능한 것은 아닙니다.
내 조언은 VMware Workbench (또는 Similair 가상화 소프트웨어)를 다운로드하고 간단한 설정을 만드는 것입니다. 로드 밸런싱이나 클러스터링이 없으며 기본 사항 만 작동합니다. 하나씩 더 많은 기능 (밸런싱, 캐싱, 클러스터링 등)을 추가하고 각 주제에 대해 약간의 조사를 수행해야 올바른 선택을 할 수 있습니다.
이 프로세스 동안 동일한 성능 테스트를 계속 실행하면 설정에서 X 를 사용하는 것이 Y 를 사용하는 것보다 낫 거나 캐싱에 미치는 영향 등 을 직접 확인할 수 있습니다 .
결국, 이와 같은 설정은 실제로 응용 프로그램과 클라이언트의 요구 사항에 따라 다르며 모든 것은 각자의 강점과 약점을 가진 다양한 방법으로 수행 할 수 있습니다.
또 다른 질문?
행운을 빕니다!
웨슬리