Amazon S3 высокая загрузка ЦП с 100 вызовами PutObject (.NET)

Мы используем Amazon S3 для хранения до 500К данных. На экземпляре EC2 установлен веб-сервис.NET 4.0, который выполняет вызов PutObject с данными 500 КБ.

Проблема заключается в том, что когда мы делаем более 100 одновременных вызовов (с уникальными ключами S3) к этой услуге, соответственно к S3, и процессор экземпляра EC2 достигает 100%. Мы провели некоторое профилирование веб-службы и показали, что 99% времени обработки занимает метод AmazonS3Client.PutObject.

Мы попытались настроить клиент S3 для использования HTTP (вместо HTTPS по умолчанию), а также немного поиграли со схемой генерации ключей S3, но ничего не помогло. Эта статья очень медленно работает с Amazon S3 PutObject.

Наша ключевая схема S3: "111_[инкрементный идентификатор].txt"

Такое интенсивное использование ЦП не происходит, если мы используем более короткие данные - например, менее 1 КБ.

Можете ли вы дать нам некоторое руководство, что можно сделать, чтобы улучшить производительность процессора или где искать?

И вот исходный код для этого вызова:

string fileName = "111_" + Id + ".txt";
using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(RegionEndpoint.XXXX))
        {
            try
            {
PutObjectRequest request = new PutObjectRequest();
request.WithContentBody(dataRequest.Base64Data)
                 .WithBucketName(bucketName)
                 .WithKey(fileName);

S3Response response = client.PutObject(request);
response.Dispose();
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
              //Handle exceptiom...
            }
        }

Спасибо!

1 ответ

Я бы попробовал класс более высокого уровня TransferUtility, а не вызовы PutObject низкого уровня. http://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Transfer_TransferUtility.htm

Другие вопросы по тегам