Подтвердить что ты не робот

Есть ли у Amazon S3 пул соединений?

Я когда-либо использовал код

public static AmazonS3Client s3 = null;
...
BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
s3 =  new AmazonS3Client(c);

Создается только один экземпляр s3, в то время как десятки потоков загружают изображения с помощью s3.putObject(). В информации дампа я мог видеть, что один поток блокирует единственный экземпляр s3, пока остальные ждут.

Итак, я думаю, что, возможно, это будет быстрее, если я воспользуюсь следующим кодом:

BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
for(int i = 0; i < 10; i++)
    amazonS3[i] = new AmazonS3Client(c);

Каждый раз, когда система получает случайный экземпляр s3, а затем загружает изображение.

private static AmazonS3 getS3(){
    int i = (int)(Math.random() * 10); 
    return amazonS3[i];
}

Но похоже, что система замедляется. Почему это произошло? Может быть, единственный экземпляр s3 уже использовал пул соединений? Я смущен.

4b9b3361

Ответ 1

Каждый клиент в AWS SDK для Java (включая клиент Amazon S3) в настоящее время поддерживает собственный пул соединений HTTP. Вы можете настроить максимальный размер пула соединений HTTP через класс ClientConfiguration, который может быть передан в конструкторы клиентских объектов.

Мы рекомендуем использовать клиентские объекты из-за расходов и накладных расходов из-за слишком большого количества пулов соединений HTTP, которые не используются эффективно. Вы должны увидеть более высокую производительность при совместном использовании клиентских объектов в потоках.