Пропускная способность с помощью azure-storage-java V10 из блокирующего потока - PullRequest
0 голосов
/ 05 марта 2019

Сценарий: подача большого двоичного объекта из Azure через RestController из-за доступа к файлу на основе ролей.

SharedKeyCredentials, HttpPipeline, ServiceURL и ContainerURL создаются один раз в конструкторе

public AzureSdkBlobStorageServiceImpl(AzureBlobStorageConfig azureBlobStorageConfig) throws InvalidKeyException {
    SharedKeyCredentials credential = new SharedKeyCredentials(azureBlobStorageConfig.getAccountName(), azureBlobStorageConfig.getAccountKey());
    HttpPipeline pipeline = StorageURL.createPipeline(credential, new PipelineOptions());
    ServiceURL serviceURL = new ServiceURL(azureBlobStorageConfig.getServiceUrl(), pipeline);
    containerURL = serviceURL.createContainerURL(azureBlobStorageConfig.getContainerName());
}

Попытка выполнитьиспользуйте SDK и возвращайте его только после загрузки большого двоичного объекта.

public Blob getBlob(String identifier) {
    BlockBlobURL blobURL = containerURL.createBlockBlobURL(identifier);

    ByteBuffer byteBuffer = FlowableUtil.collectBytesInBuffer(blobURL.download().blockingGet().body(new ReliableDownloadOptions()))
      .blockingGet();

    return new Blob(identifier, byteBuffer.array());
}

После предоставления getBlob (идентификатора строки) в качестве конечной точки отдыха все работает.

blob-urls.txt http://localhost:8084/blob/my-image.jpg

1.AzureSdkBlobStorageServiceImpl против 1 одновременного пользователя в течение 2 минут

осада -v -c 1 -t 2m -f blob-urls.txt

Transactions:                583 hits
Availability:             100.00 %
Elapsed time:             119.65 secs
Data transferred:        1103.75 MB
Response time:              0.20 secs
Transaction rate:           4.87 trans/sec
Throughput:             9.22 MB/sec
Concurrency:                1.00
Successful transactions:         583
Failed transactions:               0
Longest transaction:            0.97
Shortest transaction:           0.15

2.AzureSdkBlobStorageServiceImpl против 10 одновременных пользователей в течение 2 минут

осада -v -c 10 -t 2m -f blob-urls.txt

Transactions:                505 hits
Availability:             100.00 %
Elapsed time:             119.18 secs
Data transferred:         956.07 MB
Response time:              2.30 secs
Transaction rate:           4.24 trans/sec
Throughput:             8.02 MB/sec
Concurrency:                9.76
Successful transactions:         505
Failed transactions:               0
Longest transaction:            8.92
Shortest transaction:           0.17

3.AzureSdkBlobStorageServiceImpl против 100 одновременных пользователей в течение 2 минут

осада -v -c 100 -t 2m -f blob-urls.txt

Transactions:                723 hits
Availability:             100.00 %
Elapsed time:             119.88 secs
Data transferred:        1368.80 MB
Response time:             15.42 secs
Transaction rate:           6.03 trans/sec
Throughput:            11.42 MB/sec
Concurrency:               93.01
Successful transactions:         723
Failed transactions:               0
Longest transaction:           45.16
Shortest transaction:           0.51

Я не уверен, как это интерпретировать.

Глядя на прогоны 1 и 2, кажется, что все запросы к Azure ждут друг друга.

Однако в прогоне 3 пропускная способность выше.

При использовании хранилища Azure-java V10 SDK из блокирующего потока, мне нужно настроить базовый httpclient с большим количеством потоков?

Чтобы подвести итог

  • Я не могу изменить код вызова в данный момент, поэтому яугадайте, я вынужден сделать blockingGet ()?
  • Есть ли что-то, что я могу сделать, чтобы улучшить пропускную способность с помощью Azure-Storage-Java V10 SDK?
  • Я делаю это неправильно?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...