Java 응용 프로그램은 다음과 같이 간단하게 설명 할 수 있습니다.Java 응용 프로그램을 확장 가능하고 내결함성있게 만드는 방법은 무엇입니까?
SOAP 인터페이스가있는 Tomcat 서버에서 실행되는 웹 응용 프로그램입니다. 이 응용 프로그램은 JPA/Hibernate를 사용하여 MySQL 데이터베이스에 데이터를 저장합니다. 저장된 데이터는 사용자 목록, 호스트 목록 및 파일 시스템의 거대한 파일 (10GB)을 가리키는 URI 목록으로 구성됩니다. 전체 시스템은 내 응용 프로그램이 실행되는 중앙 서버와 많은 수의 작업자 호스트로 구성됩니다. 사용자는 SOAP 인터페이스에 연결하여 시스템이 특정 작업자 호스트에 속한 파일을 복사하도록 요청할 수 있습니다. 그런 다음 특정 방법으로 데이터를 분석 할 수 있습니다 (NFS를 사용할 수 없으므로 데이터를 작업자 호스트의 로컬 디스크 저장 공간). 그런 다음 데이터베이스는 작업자 호스트가 자신의 파일을 저장하는 각 사용자를 저장합니다.
현재 Tomcat 응용 프로그램과 MySQL 데이터베이스가있는 하나의 중앙 서버와 10 개의 작업자 호스트와 약 30 명의 사용자가 작업자 호스트를 통해 분산 저장된 100 개의 파일 (평균 10GB)을 사용하여 실행 중입니다.
그러나 앞으로는 시스템을 100-1000 배로 확장해야합니다. 따라서 10000 명의 사용자, 100000 개의 파일 및 10000 개의 호스트를 처리해야 할 수도 있습니다. 그리고 시스템은 또한 내결함성이 있어야합니다. 그래서 하나의 중앙 서버 (현재 시스템의 단일 지점)가 없지만 여러 서버가있을 수 있습니다. 또한 작업자 호스트 중 하나가 실패하면 시스템에 통지해야하므로 해당 서버의 파일을 복사하려고 시도하지 않습니다.
내 질문은 지금 다음과 같습니다. 응용 프로그램을 확장 가능하고 내결함성을 갖출 수있는 Java 기술은 무엇입니까? 어떤 아키텍처를 추천 하시겠습니까? 시스템의 모든 파일, 호스트 및 사용자에 대한 모든 정보를 한 곳에서 저장하는 거대한 데이터베이스가 있어야합니까? 아니면 데이터베이스를 여러 호스트에 더 잘 분산하고 어떻게 든 동기화해야합니까?