ユーザーが写真をアップロードして、アップロード後に指定したページに表示できるようにするWebアプリケーションがあります。アップロードモジュールは、爆発した戦争ディレクトリ内に画像を配置します。たとえばwebapp-root/uploads/
、画像がアップロードされると、のようにすぐに表示できるようになりhttp://mydomain.com/uploads/123.png
ます。
これは1つのアプリケーションサーバーで機能していましたが、結局のところ、このアプリを2つの負荷分散サーバーにデプロイすることになりました。そこで、ユーザーが画像をアップロードするたびに、FTPを使用してサーバー間でファイルを同期するクイックファイル同期モジュールをコーディングしました。基本的に、ユーザーがに画像をアップロードするとserver1/uploads/
、すぐにFTP経由でにコピーしますserver2/uploads/
。
編集(アップロードプロセスを追加):アップロードは次のようになります:
- ユーザーが画像を選択して送信
- サーバーはファイルをに保存します
server1/uploads/
- バックグラウンドスレッドはserver1から
server2/uploads/
(非同期で実行)へのFTP同期を実行します - server2の場合はその逆
この時点で、私は問題に直面しています。
URLhttp://mydomain.com
は、ハードウェアロードバランサーを使用してserver1またはserver2のいずれかを指します。ユーザーがイメージをserver1にアップロードした場合(サーバー2に同期された場合)、ロードバランサーがserver1またはserver2のどちらに誘導したかに関係なく、test-image.png
を介してイメージにアクセスできると想定します。http://mydomain.com/uploads/test-image.png
ただし、これは当てはまりません。例を続けると、ドメインがserver1を指しているときにアップロードされた画像は、server1にリダイレクトされた場合にのみ表示でき、2番目のユーザーが同じURLにアクセスしたが、ロードバランサーが彼をserver2に誘導したhttp://mydomain.com/uploads/test-image.png
場合はリンク切れとして表示されます。
そのため、warディレクトリ内のイメージをFTPコピーするたびに、JBossが2番目のサーバーを更新していないようです。server1に画像をアップロードすると、そのサーバー上のJBossインスタンスが問題なく画像ファイルを提供するため、これはちょっと奇妙なことです。
JBossに「ねえ、ここに新しい画像ファイルがあります」と手動で伝える方法はありますか?