1

タイトルが示すように、私が達成したいのは、パッケージを与えられることです (通常、サイズは 500Mb から 1Gb の間で異なる場合があります)。同時に (同時に) 約 40 台のサーバーをコピーしたいと思います。その時点でコピーを実行するスクリプトなので、次の可能性を検討しています。

1- マルチプロセス ライブラリを使用し、コピー機能ごとに 1 つのプロセスを作成して、同時に実行できるようにします。-I/O のボトルネックが発生する可能性があると思いますが、プロセスは同じデータを共有できません。

2-私は単一のインターネット接続ではなく、巨大な企業 WAN を使用しています。

同じことを達成するためのより効果的な(より速い)方法が他にあるかどうか、誰か教えてもらえますか?または、それを解決する他の方法はありますか? (このタスクは 2 コアのワークステーションから実行できます)。

4

2 に答える 2

1

1)私はこれについての経験はありませんが、あなたのユースケースには合っているようです:

sendfile(2) は、あるファイル記述子から別のファイル記述子 (ソケット) にデータをコピーする「ゼロコピー」方法を提供するシステム コールです。「ゼロコピー」という用語は、2 つの記述子間のデータのコピーがすべてカーネルによって完全に行われ、ユーザー空間バッファーへのデータのコピーは行われないという事実を指します。これは、ソケット (FTP など) を介してファイルを送信する場合に特に便利です。

いつ使いたいですか? 基本的に、ネットワーク経由でファイルを送信するすべてのアプリケーションは sendfile(2) を利用できます。

2) 別のオプションは、トレント ライブラリを使用すること です。私は最近、Facebook が毎日のソフトウェア アップデートをトレント経由で配布していることを知りました (トレントについては 31:00 にスキップしてください)。

于 2012-04-16T22:38:14.477 に答える
0

マシンの接続が 1Gbit であると仮定します。運が良ければ 800Mbit/s が得られ、1G バイトをコピーするのに約 10 秒かかり、それらのマシンを更新するのに 6 ~ 7 分かかります。それが十分であれば、必要な唯一のことは、1Gbit を効率的に使用してその目標を達成することです (現在のスクリプトから何がわかりますか?OK 1Gbit は WAN では野心的かもしれませんが、同様の分析を行うことができます)。ここでマルチプロセッシングが役立つ場合もあれば、そうでない場合もあります... しかし、魔法のように帯域幅が増えるわけではありません。

十分でない場合は、次のいずれかを検討します。

  • P2P に移行します (ミクの回答を参照)。1 台のマシンにデータが少しあるとすぐに、それ自体の帯域幅を使用して他のマシンと共有できます。これがどの程度役立つかは、ネットワーク トポロジ (他のボトルネック ポイントの存在) にある程度依存します。

  • ネットワークが十分に制御されていて、適切にルーティングできる場合は、マルチキャストを調べてください (これは WAN ではほとんどありそうにないようですが、IPv6 のワンダーランドではいつか...)。同じデータを 40 回 (毎回同じと仮定して) コピーする代わりに、1 回ブロードキャストするだけで、すべての受信機が同時にそれを受信します。マルチキャスト UDP は信頼できません (IPTV 向けだと思います) が、マルチキャスト技術(OpenPGMMS 独自の実装など)を使用して信頼できるファイル転送ツールを構築する試みがありました。

于 2012-04-18T22:27:46.010 に答える