3

私は、3 つの異なるサーバーとして概念化できる Web ベースのファイル管理システムを設計しています。

  1. ユーザーがファイルを「アップロード」して管理するシステム インターフェイス (PHP に組み込まれている) をホストするサーバー (実際のファイルはここに格納されず、すべてメタ ファイルです)。
  2. 作業用のファイルが置かれる別のステージング サーバー。
  3. 作業していないときにファイルが保存されるファイルストア。

3 つのサーバーはすべて、同じ内部ネットワーク上で *nix ベースになります。Windows ベースのユーザーは、Web インターフェイスを使用して、サーバー 1 上のファイルの初期エントリを作成します。このファイルは、ユーザーのローカル ドライブからサーバー 3 に「アップロード」されます (ファイルが現在どこにも存在しない場合)。ネットワーク) または内部ネットワーク上の別のネットワーク ドライブ。

私の質問は、私がやりたいことを達成するための最良のプログラム的アプローチに関連しています。

ユーザーがネットワークからファイルをアップロードする (Web フォーム経由でソースを選択する) と、ファイルはユーザーを通過するのではなく、ネットワーク間転送としてサーバー 3 に転送されます (これは、標準の HTTP フォーム アップロードとして送信されます)。各マシンに FTP サーバーをセットアップし、場所間でファイルを FXP しようとすることはできますが、これはサーバー 1 (グローバル ネットワーク アクセスを持つ) でコマンドを実行してクロスネットワーク転送を実行するよりも望ましい方法ですか?

2 番目の問題は、これらが非常に大きなファイルであり、少なくともそれぞれ 1 ~ 2 ギガバイトであるため、転送がすぐに行われないことです。transfer のステータスをポーリングし、これを Web インターフェイスに返して、ユーザーが何が起こっているかを知る方法が必要です。

または、このアップロードをユーザーの現在のビューに対して非同期で実行することもできますが、転送のステータスを確認して完了を確認する方法が必要です。

では、FXP ソリューションを使用する場合、ポーリングはどのように実現できるのでしょうか? シェルからファイルの移動/コピー コマンドを使用する場合、任意の形式のポーリングが可能ですか? PHP/JQuery ソリューションは非常に受け入れられます。

この質問に対する私の最後の部分は、Windows ネットワーク ドライブのマッピングに関するものです。ユーザーは、任意に指定されたマップされたドライブからドライブをマップ (およびそこからファイルを選択) することができます。それらの G:\ は \server4\some\location\therein に関連付けられている可能性がありますが、おそらく、Web フォームを介してサーバーに指定されたドライブ パスは、G:\ ファイル パスのみを送信します。マップされたネットワーク ドライブの「実際のパス」を特定する方法はありますか?

ファイルが処理されているときにサーバー 3 からサーバー 2 にファイルをステージングするために、任意のソリューションが使用されます。これらの巨大なファイルが最初にユーザーのローカル マシンを通過する必要がないことに重点が置かれています。

コメントがある場合はお知らせください。不明な点がある場合は、この質問をより一貫性のあるものにするよう努めます。

4

2 に答える 2

0

iam rightがこのアーキテクチャである場合:

ここに画像の説明を入力してください

画像を拡大

1.)

まず、「サーバー間転送」の問題を解決しましょう。NFSによってサーバー2と3からサーバー1にファイルシステムをマウントすることでこの問題を解決します

https://help.ubuntu.com/8.04/serverguide/network-file-system.html

したがって、PHPはファイルをファイルシステムに直接保存でき、ファイルが実際にどのサーバーにあるかを知る必要はありません。

/etc/exports
of Server 2 + 3
/directory/with/files 192.168.IPofServer.1 (rw,sync)

exportfs -ra


/etc/fstab 
of Server 1
192.168.IPofServer.2:/var/lib/data/server2/ /directory/with/files  nfs rsize=8192,wsize=8192,timeo=14,intr
192.168.IPofServer.3:/var/lib/data/server3/ /directory/with/files  nfs rsize=8192,wsize=8192,timeo=14,intr

mount -a

2.)

本当に大きなファイルのアップロードの進行状況を取得します。httpアップロードの進行状況バーが表示される可能性があります。ただし、再開機能の場合は、フラッシュプラグインを使用する必要があります。

http://fineuploader.com/#demo

https://github.com/valums/file-uploader

または、apc拡張機能を使用して自分でビルドすることもできます

http://www.amwsites.com/blog/2011/01/use-a-combination-of-jquery-php-apc-uploadprogress-to-show-progress-bar-during-an-upload/

3.)

サーバーがネットワークドライブからファイルをロードできるようにします。これは、Javaアプレットを使用して実際のネットワークパスを特定し、これをサーバーに送信して、サーバーがバックグラウンドでファイルをフェッチできるようにします。しかし、私はこれまでこのように考えたことはなく、それ以上の情報もありません。

于 2013-01-16T15:19:43.700 に答える
0

私の知る限り (間違っている可能性もあります)、マップされたドライブの UNC パスをブラウザーから特定する標準的な方法はありません。

これを行う唯一の方法は、Web ページ内で何らかのコントロールを行うことです。ActiveX またはフラッシュの可能性があります。ActiveX がこれを行っているのを見たことがありますが、フラッシュは見ませんでした。

過去に、ユーザーのマップされたドライブの UNC パスを知る必要がある Web ベースのシステムを設計するとき、ドライブをサーバー側に保存された UNC パスに変換する必要がありました。どのドライブがどの UNC パスにマップされるかを知るという贅沢はありました。ユーザーが任意のパスを設定できる場合、これは明らかに機能しません。

わかりました、私は先延ばしにして実際の仕事を避けているので、これについて少し考えました。

私は決して Linux の専門家ではなく、これから説明するシステムは私の頭の中で思いついたものであり、あなたがどんな種類のものにも入れたいとは思わないものです。生産の。ただし、正しい道を進むのに役立つ場合があります。

つまり、Interface Server (LAMP スタックだと思いますか?)、Staging Server と File Store Server の 3 つのサーバーがあります。クライアント マシンとネットワーク共有もあります。この設計のために、ネットワーク共有は、ファイル ストアが scp できる nix ボックスでホストされます。

ファイルなどに関する情報を追跡および保存するフロントエンド Web サイトを作成します。これにより、どのファイルがコピーされているか、どのファイルがステージングにあるかなどの詳細も保持されます。

また、ファイル ストア サーバーで実行されているある種のサービスも必要です。これをファイル コピー サービスと呼びます。これは、ネットワーク共有をホストしているサーバーからファイルをコピーする責任があります。

さて、users ファイルが実際にどのパスにあるかをどのように把握するかという問題がまだ残っています。ユーザーが自分のドライブをマッピングするのを止めて、一貫したドライブ文字を使用するように強制できる場合は、ドライブ文字をサーバー上の UNC パスに変換しておくことができます。できない場合は、それを理解させます。Windows ドメインにいる場合は、グループ ポリシーを使用してドライブ マッピングを強制できます。

とにかく、システムのプロセスは次のように機能します。

  1. ユーザーはシステムに移動し、ファイルを選択します
  2. インターフェイス サーバーはファイル パスを取得し、ファイル ストア サーバー上のファイル コピー サービスを呼び出します。
  3. ファイル コピー サービスは、ファイルをホストするサーバーに接続し、コピーを開始します。それらがすべて nix ボックスである場合、SCP のようなものを簡単に使用できます。今、私は実際にそれを行う方法を調べていませんが、SCP がコピーしているため、SCP から完全なパーセンテージの現在の合計を取得できない場合は、非常に驚​​くでしょう. この実行中の合計を使用して、ファイル コピー サービスはインターフェイス サーバー上のデータベースを更新し、ユーザーがインターフェイス サーバーからこれを確認できるようにします。

ファイル コピー サービスを使用して、ファイル ストアからステージング サーバーにファイルを移動することもできます。

私が言ったように、非常に大雑把に考えました。上記は機能しますが、システムの設定方法などに大きく依存します.

とはいえ、これを行うソフトウェアが存在するはずです。見ましたか?

于 2013-01-11T16:05:44.603 に答える