2016-08-16 5 views
2

나는 푸른 하늘에 blob 컨테이너에 데이터베이스 백업을 업로드하는 응용 프로그램이 있습니다.azure blob 업로드 속도를 제한하는 방법

내가 덩어리가 컨테이너에 전송되는 동안

모든 것은, 그러나 잘 작동 11Mbps의 평균 속도, 크기 8기가바이트 주위에 파일을 업로드하고있어, 그것은 절대적으로 그 네트워크에있는 다른 모든 죽인다.

제 질문은 입니다. 업로드 속도를 하늘색으로 제한하는 방법이 있습니까?

+0

이 푸른 문제, 당신의 끝이 아니라 네트워크 구성 문제 같은 소리하지 않습니다. QoS를 조사해야합니다. –

+0

업로드가 빠르면 네트워크가 정상입니다. 문제는 업로드 속도가 너무 빠르기 때문에 어떻게 든 조절할 수 있다는 것입니다. –

+0

"그 네트워크의 다른 모든 것을 절대적으로 없앱니다."- 이것이 내가 QoS를 조사하는 이유입니다. 분명히 네트워크가 좋지 않습니다. –

답변

1

Azure Storage 자체는 특정 스로틀 설정을 제공하지 않습니다. 그러나 BLOB 업로드는 본질적으로 일련의 REST 기반 블록 BLOB PUT 작업이므로 주어진 업로드 구현을 수행하고 주어진 BLOB에 블록을 업로드하는 빈도를 선택하여 자체 조절을 수행 할 수 있습니다.

+0

데이비드 고맙다, 지금은이 임무를 수행하려고 노력할 것입니다! –

+0

David, 당신은 바퀴를 재발 명하기 위해이 사람을 추천했습니다. –

+0

@SaschaGottfried 나는 그런 것을 전혀 추천하지 않고있다. OP가 원하는 기능은 존재하지 않습니다. 그러나 블록 업로드 프로토콜을 사용하면 블록을 관리 할 수 ​​있습니다 (블록을 ​​업로드하는 것에 관한 많은 기사가 있으므로이를 다시 만들 필요가 없습니다). –

0

네트워크 인터페이스에서 최대 업로드 대역폭을 설정하는 것이 더 나은 방법 일 수 있습니다. 이것은 클라이언트 응용 프로그램과 좋은 디자인 목표에 대해 완전히 투명합니다. 다른 QoS 네트워크의 소프트웨어는 사용자 지정 스로틀없이 작동합니다.

SO question is about limiting network speed과이 도구를 나열합니다. 데이터베이스 백업을 실행하는 시스템이 Windows를 사용하는 경우 네트워크 속도를 제한하려면 BWMeter과 같은 것을 시도하십시오.

더 나은 전략은 인터넷 게이트웨이 (WAN/DSL 라우터)가 트래픽 쉐이핑을 수행하도록 네트워크를 구성하는 것입니다. 그것이 잘 작동하면 제품에 달려 있습니다.

두 가지 방법 모두 응용 프로그램에 사용자 지정 조절을 구현하는 대체 방법보다 장기적인 용어 비용이 적어야합니다.

0

귀하의 질문에 업로드 속도 제한을 달성하려는 프로그래밍 언어 (또는 원시 REST)를 지정하지 않았습니다. 하지만 공식 Azure 저장소 인 .NET SDK (Microsoft.WindowsAzure.Storage)를 사용하여이 작업을 수행 할 수있는 방법을 발견했습니다.

SDK 자체는 명시적인 속도 조절 기능을 제공하지 않습니다. 그러나 과 같은 Upload*Async() 함수는 IProgress<StorageProgress> 구현을 취하여 진행보고를 지원하고 주기적으로 Report() 메서드를 호출합니다. 그리고 동기식으로 호출하는 것으로 보입니다.

업로드 속도를 조절하기 위해 Report()에 지연을 넣을 수 있습니다. 더 나은 점은 ReportBytesTransferred에 대한 정보를 제공한다는 것입니다. 따라서 진행 핸들러가 지속 시간을 추적하는 경우. 그런 다음 현재 업로드 속도를 예측하고이를 사용하여 정확하게 조절할 수 있습니다.

아래는 이러한 아이디어를 보여줍니다. 이것은 단지 아이디어의 시위 일뿐입니다. 나는 그것을 3 분 안에 모은다. 속도 추정 및 스로틀 알고리즘은 매우 거칠고 잘 테스트되지 않았습니다. 여기

은 당신이

await blob.UploadFromFileAsync(
    @"some_file.dat", 
    null, null, null, 
    new RateThrottleProgress(300 * 1024), // throttle at 300kb/s 
    CancellationToken.None); 

지수 백 오프 Throttler 구현을 사용하는 것이 방법

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)); 
    } 
} 

나는 또한 put below code snippet as a gist 더 나은 버전 관리 및 협업을위한.효과

스로틀 :

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 
관련 문제