사용자는 업로드 한 후 지정된 페이지에 표시 될 사진을 업로드 할 수있는 웹 응용 프로그램이 있습니다. 업로드 모듈은 이미지를 폭발 된 war 디렉토리 안에 넣습니다. webapp-root/uploads/
이미지가 업로드되면 즉시 http://mydomain.com/uploads/123.png
처럼 볼 수 있습니다.실행중인 JBoss 웹 응용 프로그램에 이미지 추가
이것은 하나의 응용 프로그램 서버에서 작동했지만, 우리는이 응용 프로그램을 부하가 분산 된 두 개의 서버에 배포해야했습니다. 따라서 사용자가 이미지를 업로드 할 때마다 FTP를 사용하여 서버간에 파일을 동기화하는 빠른 파일 동기화 모듈을 코딩했습니다. 기본적으로 사용자가 server1/uploads/
에 이미지를 업로드하면 즉시 FTP를 통해 server2/uploads/
으로 복사됩니다.
편집 (추가 업로드 과정) : server1/uploads/
- 사용자 선택하여 이미지를 제출
- 서버에 저장합니다 업로드가 이런 식입니다 ~
server2/uploads/
(비동기 완료) - 반대로 server2
이 시점에서 나는 문제가있다.
URL http://mydomain.com
은 하드웨어 부하 분산 장치를 사용하여 server1 또는 server2를 가리 킵니다. 사용자가 server1에 이미지 test-image.png
을 업로드하면 (서버 2에 동기화 됨)로드 밸런서가 나를 server1 또는 server2로 안내하는지 여부에 관계없이 http://mydomain.com/uploads/test-image.png
을 통해 이미지에 액세스 할 수 있다고 가정합니다.
그러나 이것은 사실이 아닙니다. 이 예를 계속 진행하면 도메인이 server1을 가리킬 때 업로드 된 이미지는 http://mydomain.com/uploads/test-image.png
이 server1로 리디렉션 된 경우에만 볼 수 있으며 두 번째 사용자가 동일한 url에 액세스 할 때 깨진 링크로 표시되지만로드 밸런서가 server2.
그래서 war 디렉토리 안에 이미지를 FTP로 복사 할 때마다 JBoss가 두 번째 서버를 새로 고치지 않는 것처럼 보입니다. 이미지를 server1에 업로드하면 해당 서버의 JBoss 인스턴스가 아무런 문제없이 이미지 파일을 제공하기 때문에 다소 이상합니다.
수동으로 JBoss에 "여기에 새 이미지 파일이 있습니다"라고 말할 수있는 방법은 없습니까?
Jboss 인스턴스가 서로를 모르는 경우 (클러스터에있는 경우) 대신 데이터베이스에 업로드하는 것이 좋습니다. –
예, 우리는이를 고려해 봤지만 (대체로 고려할 것입니다),이 단계에서 우리는 재 작업을 줄이는 대체 솔루션을 찾고 있습니다. –
JBoss 인스턴스가 서로를 알고 있습니까? 그렇지 않으면 업로드 절차가 모든 인스턴스에 업로드되어야합니다. –