0

1 台のサーバーにある 100 GB のファイルを、ネットワーク内の 100 台の他のサーバーに 1 Gbps 回線で転送したいと考えています。それを行う最良の方法は何ですか?私の解決策は、ファイルをk台のサーバー(たとえば9台)にコピーし、残りの(100-9)台のサーバーを9台のサーバーのそれぞれに割り当てることです。これは、ファイルを 1 つのサーバーから 100 のサーバーに順番にコピーするよりも優れたソリューションです。私の質問は、 k を決定する方法ですか?またはkの最も効率的な値を決定するための計算は何ですか. より良い解決策があれば提案してください。申し訳ありませんが言及するのを忘れていました..トレントは使用できません。すべての企業が torrent を許可しているわけではありません。これはインタビューの質問です。あなたの応答に感謝します。ありがとう

4

9 に答える 9

4

一度に 1 つのサーバーにしかコピーできないと仮定すると、次のようになります。

  1. メイン サーバーがサーバー S1 にコピーされます。
  2. S1 が S2 にコピー (1 コピー)
  3. S1 は S3 にコピーし、S2 は S4 にコピーします (2 つのコピーを並行して)
  4. S1 は S5 にコピー、S2 は S6 にコピー、S3 は S7 にコピー、S4 は S8 にコピー (並列で 4 つのコピー)

等々..

したがって、コピー数のパターンは次のようになります: 2 pow 0、2 pow 1、2 pow 2 など

1 + 2 + 4 + 8 + 16 + 32 + 64 > 100

したがって、S1 が実行しなければならないコピーの数は、次の式で求めることができます。

(2 pow k >= 100)  and (2 pow (k-1) < 100)

この場合、k は 7 に評価されます (最初のコピーの後)。

于 2013-05-19T04:36:17.667 に答える
1

1 つの意見は、ネットワーク上でファイルをマルチキャストすることです。この方法では、最初のサーバーはファイルを 1 回だけ送信します (他のサーバーはファイルを同時に受信します)。非常にトリッキーになる可能性がありますが、これが最速の方法だと思います。おそらく、1 台のコンピューターがパケットを失ったときにどうするか、独自のカスタム プロトコルを考案する必要があります。

https://github.com/windsurfer/C-Sharp-Multicast

于 2013-05-19T04:50:16.367 に答える
1

nファイルがコピーされるサーバーがあるとします。コピーを並行して実行できる場合、つまり、コピーの最初のラウンドの後、kファイルのコピーを持つサーバーが存在する場合、あなたのアプローチは正しいです。kこれらのサーバーから残りのサーバーへのコピーをn-k並行して実行できる場合、このアプローチは理想的です。

の値はk次のように求めることができます。

k 2 ≤ nおよび(k+1) 2 > nkとなるように選択します。

于 2013-05-19T04:29:48.167 に答える
0

Divide and Conquer について考えることができます

100 (50,50) -> (25 , 25) -> (12 , 13) -> (6 , 6) -> (3 ,3) -> (1 , 2) ..ストップ

コピー機能がローカル リソース (サーバー 1 からサーバー 2 など) を使用しようとすると、サーバー 1 リソースが使用されると想定しています。

サーバー 1 からサーバー 2 および 3 (合計 3 サーバー) サーバー 1 から 4 、2 から 5 、3 から 6 (合計 6 サーバー) サーバー 1 から 7 、2 から 8 、3 から 9....6 ~ 12 (合計 12 サーバー)

では、スレッド マネージャが Server 1 を Server 51 に、Server 2 を Server 52 に、... Server 50 を Server 100 にコピーするとします。

于 2013-05-19T04:37:07.267 に答える
0

bittorrent を使用して LAN 経由でファイルを配布する場合、torrent ソフトウェアが負荷分散を処理します。つまり、「k」を事前に計算する必要はありません。クライアントにはutorrentを使用することをお勧めしますが、どのクライアントでも使用できます。 トラッカーなどの設定のチュートリアルはこちら

bittorrent を使用する利点は、受信サーバーがファイル全体を取得する前に、ファイルのチャンクの配布を開始できることです。

于 2013-05-19T04:27:13.953 に答える
0
  1. ファイルを bzip して、可能な限り圧縮します
  2. 他のすべてのマシンに再同期します
  3. ランチに行き、スタックの次の作業に取り掛かります。

時間制限は言及されていないので、なぜそれを想定するのですか。それは自分にとって物事を難しくするだけです。

于 2013-05-19T20:17:29.907 に答える
0

単純な仮定の下では、これを動的計画法の問題として扱うことができます。i = 1.. k の場合、k 個のコピーを生成する最速の方法を見つけます。各ステップで、前のステップで kt 個のコピーを生成するのにかかった時間を考慮してから、t 個のコピー操作を並行して実行するために 1 つのステップを追加します。ここで、t は k - t より大きくないほうがよいです。

k が 2 の累乗の場合、1 ステップで 2 部 (オリジナルを数えて)、2 部で 4 部... 7 部で 128 部作成できます。これは 9 部よりも高速です。 1 台のマシンで 9 つのコピーを実行すると、1 つの宛先にコピーする場合の 9 倍の時間がかかると仮定します。

ただし、これはすべて、コピーにかかる時間がソースの発信帯域幅のみに依存することを前提としています-実際には、すべてのネットワークリンクが互いに近く、同じであるため、同時に複数のコピーを実行すると速度が低下するリスクがあると予想されますまたは、ネットワーク リンクが大きく離れているが異なるため、異なるリンクを介したコピーにかかる時間が異なります。

また、sneakernet を検討する必要があります。リムーバブル USB またはリムーバブル ハード ドライブにコピーし、別のローカル コピーのためにデバイスを目的の場所に移動します。歴史的に、既存のスニーカーネットの有効な帯域幅を計算せずに、スニーカーネットの親戚をネットワーク リンクに置き換えようとすると、十分なネットワーク帯域幅が提供されずに失敗しました。

于 2013-05-19T04:32:27.650 に答える