私は、データベースバックアップをazureのブロブコンテナにアップロードするアプリケーションを用意しています。晴れブロブのアップロード速度を制限する方法
私はブロブコンテナに転送されている一方で、それは絶対にそのネットワーク上の他のすべてを殺す、11Mbpsの
の平均速度ですべてがしかし、正常に動作している、サイズが8ギガバイトの周りのファイルをアップロードしています。
私の質問はですので、アップロード速度を紺色に制限する方法はありますか?
私は、データベースバックアップをazureのブロブコンテナにアップロードするアプリケーションを用意しています。晴れブロブのアップロード速度を制限する方法
私はブロブコンテナに転送されている一方で、それは絶対にそのネットワーク上の他のすべてを殺す、11Mbpsの
の平均速度ですべてがしかし、正常に動作している、サイズが8ギガバイトの周りのファイルをアップロードしています。
私の質問はですので、アップロード速度を紺色に制限する方法はありますか?
Azure Storage自体は、特定のスロットル設定を提供しません。ただし、ブロブのアップロードは基本的に一連のRESTベースのブロックブロブPUT
操作であるため、独自のアップロード実装を行い、ブロックを特定のBLOBにアップロードする頻度を選択することで、独自の調整を行うことができます。
ダビッドありがとう、私は今これをインパクトしようとするつもりです! –
デビッド、あなたは車輪を再発明するためにこの男をお勧めします。 –
@SaschaGottfried私はそのようなことはまったく勧めていません。 OPが望む機能は存在しません。しかし、ブロックアップロードプロトコルでは、ブロックを管理することができます(ブロックをアップロードするための記事がたくさんあります - それを再考する必要はありません)。 –
ネットワークインターフェイスで最大アップロード帯域を設定する方が良いかもしれません。これは、クライアントアプリケーションに対して完全に透過的で、優れた設計目標です。別のQoSネットワーク内のソフトウェアはカスタム調整なしで動作します。
このSO question is about limiting network speedには、この目的のためのツールがいくつか記載されています。データベースバックアップを実行しているマシンがWindowsを使用している場合は、BWMeterのようなものを試してネットワーク速度を制限してください。
インターネットゲートウェイ(WAN/DSLルータ)がトラフィックシェーピングを実行するようにネットワークを構成する方がはるかに優れた戦略です。それが十分にうまくいくかどうかは、製品によって異なります。
どちらの方法も、アプリケーションにカスタムスロットルを実装する代替方法に比べて、長期的にはコストが低くなるはずです。
あなたの質問では、どのプログラミング言語(または生のREST)でアップロードスピードの調整が必要かを指定していません。しかし、正式なAzureストレージ.NET SDK(Microsoft.WindowsAzure.Storage)を使用してこれを行う方法が見つかりました。
SDK自体には明示的なスピードスロットル機能はありません。しかしながら、のようなUpload*Async()
の機能は、IProgress<StorageProgress>
の実装をとることによって進捗報告をサポートし、そのReport()
メソッドを定期的に呼び出す。 それはそれを同期的に呼び出すようです。
Report()
に遅延を入れてアップロード速度を抑えることができます。さらに良い点は、Report
がBytesTransferred
に関する情報を提供していることです。したがって、進行状況ハンドラが継続時間を追跡している場合。次に、現在のアップロード速度を見積もり、それを使って正確にスロットルを調整します。
以下は、この考え方の例です。これは単なるアイディアのデモです。私は3分以内にまとめました。レート推定とスロットルアルゴリズムはかなり粗く、十分にテストされていません。ここで
は指数関数的には私もput below code snippet as a gistより良いバージョン管理とコラボレーションのためにあなたが
await blob.UploadFromFileAsync(
@"some_file.dat",
null, null, null,
new RateThrottleProgress(300 * 1024), // throttle at 300kb/s
CancellationToken.None);
それを使用する方法を
class RateThrottleProgress : IProgress<StorageProgress>
{
private readonly DateTime start = DateTime.Now;
private readonly long maxbps;
private long baseDelay, delay;
public RateThrottleProgress(long maxbps)
{
this.maxbps = maxbps;
baseDelay = 10;
delay = baseDelay;
}
public void Report(StorageProgress value)
{
double duration = (DateTime.Now - start).TotalSeconds;
double bps = value.BytesTransferred/duration;
if (bps > maxbps) delay *= 2;
else delay = Math.Max(baseDelay, delay/2);
Console.WriteLine($"current estimated upload speed: {bps/1024.0} KB/s. delay: {delay} ms");
Thread.Sleep(TimeSpan.FromMilliseconds(delay));
}
}
バックオフスロットラーの実装です。効果で
スロットル:
current estimated upload speed: 287.486007463505 KB/s. delay: 10 ms
current estimated upload speed: 290.086402388889 KB/s. delay: 10 ms
current estimated upload speed: 292.685419108659 KB/s. delay: 10 ms
current estimated upload speed: 295.28201245662 KB/s. delay: 10 ms
current estimated upload speed: 297.876060423937 KB/s. delay: 10 ms
current estimated upload speed: 300.469027029562 KB/s. delay: 20 ms
current estimated upload speed: 302.927815243916 KB/s. delay: 40 ms
current estimated upload speed: 305.112558483135 KB/s. delay: 80 ms
current estimated upload speed: 306.778888691779 KB/s. delay: 160 ms
current estimated upload speed: 307.367196107083 KB/s. delay: 320 ms <-- speed starts to drop from here...
current estimated upload speed: 305.910611140488 KB/s. delay: 640 ms
current estimated upload speed: 300.564767027164 KB/s. delay: 1280 ms
current estimated upload speed: 288.206861583389 KB/s. delay: 640 ms
current estimated upload speed: 283.672713628354 KB/s. delay: 320 ms
current estimated upload speed: 282.668039190231 KB/s. delay: 160 ms
current estimated upload speed: 283.351226090087 KB/s. delay: 80 ms
current estimated upload speed: 284.861107569046 KB/s. delay: 40 ms
current estimated upload speed: 286.781960850501 KB/s. delay: 20 ms
current estimated upload speed: 288.910675693183 KB/s. delay: 10 ms
current estimated upload speed: 291.140146046991 KB/s. delay: 10 ms
current estimated upload speed: 293.358817316007 KB/s. delay: 10 ms
これは、Azureの問題、あなたの最後のではなく、ネットワーク構成の問題のような音はありません。あなたはQoSを調査する必要があります。 –
アップロードが十分速く、ネットワークは正常です。問題はそれが少し速すぎてアップロードしている、私は何とかそれを絞るしたいと思います。 –
"ネットワーク上の他のすべてが絶対に抹殺されます" - このため、QoSを調査することをお勧めします。明らかにあなたのネットワークは綺麗ではありません。 –