2012-09-28 2 views
3

사용자는 업로드 한 후 지정된 페이지에 표시 될 사진을 업로드 할 수있는 웹 응용 프로그램이 있습니다. 업로드 모듈은 이미지를 폭발 된 war 디렉토리 안에 넣습니다. webapp-root/uploads/ 이미지가 업로드되면 즉시 http://mydomain.com/uploads/123.png처럼 볼 수 있습니다.실행중인 JBoss 웹 응용 프로그램에 이미지 추가

이것은 하나의 응용 프로그램 서버에서 작동했지만, 우리는이 응용 프로그램을 부하가 분산 된 두 개의 서버에 배포해야했습니다. 따라서 사용자가 이미지를 업로드 할 때마다 FTP를 사용하여 서버간에 파일을 동기화하는 빠른 파일 동기화 모듈을 코딩했습니다. 기본적으로 사용자가 server1/uploads/에 이미지를 업로드하면 즉시 FTP를 통해 server2/uploads/으로 복사됩니다.

편집 (추가 업로드 과정) : server1/uploads/

  • 백그라운드 스레드에서 파일은 서버 1에서 FTP 동기화를 수행

    • 사용자 선택하여 이미지를 제출
    • 서버에 저장합니다 업로드가 이런 식입니다 ~ 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에 "여기에 새 이미지 파일이 있습니다"라고 말할 수있는 방법은 없습니까?

  • +0

    Jboss 인스턴스가 서로를 모르는 경우 (클러스터에있는 경우) 대신 데이터베이스에 업로드하는 것이 좋습니다. –

    +0

    예, 우리는이를 고려해 봤지만 (대체로 고려할 것입니다),이 단계에서 우리는 재 작업을 줄이는 대체 솔루션을 찾고 있습니다. –

    +0

    JBoss 인스턴스가 서로를 알고 있습니까? 그렇지 않으면 업로드 절차가 모든 인스턴스에 업로드되어야합니다. –

    답변

    0

    수신 서버의 손상된 파일로 문제를 좁혔습니다. 특정 드라이브의 파일 권한/암호화가 내 FTP 서버가 이미지를 성공적으로 복사하지 못하게하여 내 모든 동기화 된 이미지를 모든 이미지 뷰어에서 볼 수없는 이유입니다.

    이러한 사용자 권한 문제를 해결해야합니다. 한편 누군가가 다른 가능한 원인을 밝힐 수 있도록이 질문을 공개하겠습니다.

    관련 문제