0

ここでは、シナリオの基本について説明します。1 つのソース サーバーから、おそらく 25 の異なるサーバー (サーバーあたり 400 の dest フォルダー) に存在する約 10,000 の異なる宛先フォルダーに (私の C# アプリ内で) コピーする必要がある小さなデータ ブロック (10MB) があります。私はすべてのアクセス権などを持っていますが、私の唯一の問題は、どの方法が最も高速で最も効率的かを決定することです。完了するまでの時間は、どの回答よりも優先されます。残念ながら、それが何であるかとして、他の「解決策」を受け入れることはできません。ごめん。

私のオプションのいくつかは次のとおりです。

  1. 非同期コピー コマンドを使用して、ソースから 10,000 の宛先にデータをコピーします。
  2. ソースから 25 台のサーバーのそれぞれにデータをコピーしてから、サーバー上の各場所からそれぞれのサーバー上の最終的な 10,000 個の宛先フォルダーに非同期的にコピーします。
  3. その他のオプション??

論理的な観点からは、オプション 2 が最も理にかなっているように見えますが、入力に興味があります。非ローカル コピー コマンドが OS によってどのように処理されるかはわかりません。プログラムは、ネットワークを経由して送信元サーバーを経由し、送信先に戻りますか?

ありがとう。

4

4 に答える 4

2

簡単な解決策は、はい、File.Copy() を使用して 25 台のサーバーのそれぞれのルートの場所に 1 回コピーすることです。次に、各サーバーにコマンドをプッシュして、そのルートの場所からターゲットの 400 の場所にデータをコピーするように指示します。コマンドの正確な形式は、サーバーのタイプによって異なります。

UNIX サーバーの場合は、SSH または SCP 経由でコマンドを送信します。

FTP サーバーの場合、同じデータを再アップロードするよりも効率的なリモートからリモートへのコピー コマンドを提供するサーバーもあります。

Windows サーバーの場合は、.CMD ファイル、または PowerShell などを使用できます (詳細については、こちらを参照してください: https://serverfault.com/questions/116166/windows-how-to-start-a-file- copy-job-on-a-remote-server-without-passing-through )

ただし、実際に 25 台のサーバーを自分で制御する場合は、「ドロップ フォルダー」を監視するコマンド ライン プログラムを作成するだけです。ドロップ フォルダーで 10 MB のファイルを受信するたびに、そのファイルを 400 の対象の場所に自動的に伝達します。

于 2012-07-18T17:34:08.737 に答える
1

これは、かなり一般的な運用要件です。

過去にrobocopyを使用して非常にうまく解決しました(xcopyよりもはるかに堅牢です)。

1 つのソースから 10,000 台の個別のサーバーにコピーすると、1 つのソースの NIC が飽和状態になります。各サーバーにドロップオフ フォルダーを配置し、各サーバーでドロップオフ フォルダー内の変更を検索して、そのサーバー上のさまざまなターゲット フォルダーにコピーすることをお勧めします。

于 2012-07-18T17:24:06.523 に答える
0

ネットワーク (最初のディストリビューターのハード ドライブが低速であるか、サーバー間でギガビット以上のイーサネットを実行している場合を除く) が最大の問題になります。帯域幅を分割するには、ピラミッドのようなスキームを実装することをお勧めします。

たとえば、データをコピーする必要があるすべてのサーバーのリストを取得し、接続が最も高速な N 個のサーバーを削除し、残りのリストを同じサイズの N 個のリストに分割します。リストとともにペイロードを削除されたサーバーに送信します。サーバーは、データと、データの転送先のサーバーのリストを受け入れます。次に、サーバーはリストを取得し、すべてのサーバーがデータのコピーを取得するまで手順を繰り返します。

明らかに、これはすべてネットワーク トポロジに依存し、N のさまざまな値を試してどれが最速かを確認する必要がありますが、これが最適化された P2P 配信のしくみです。最初に最速のピアにデータを送信し、他のピアに再送信させます。

于 2012-07-18T17:32:25.113 に答える
0

Eric J が言及したドロップオフ フォルダーのアイデアを実装したとしても (これは一般的には良いアイデアです)、依然としてディスク I/O に拘束されるため、宛先の物理メディアに相対的な速度になります。

ここで重要な質問があります。このデータが 10,000 個のディレクトリに保存されたら、このデータを変更するつもりですか? 答えが「いいえ」の場合は、10,000 の宛先を各サーバーのドロップオフ ディレクトリにシンボリック リンクすることを強く検討してください。

于 2012-07-18T17:32:54.850 に答える