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