2013-05-03 17 views
13

kiedykolwiek użył koduCzy Amazon S3 ma pulę połączeń?

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

tylko jedna instancja s3 jest tworzony podczas gdy dziesiątki wątków będzie przesyłać obrazy s3.putObject(). W informacji o zrzutach mogłem zobaczyć, że jeden wątek zablokowałby jedyną instancję s3, podczas gdy inne czekały.

Więc myślę, że być może będzie szybciej, jeśli mogę użyć poniższy kod:

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

Everytime system otrzyma losowy s3 instancji, a następnie przesłać obraz.

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

Wygląda na to, że system zwolnił. Dlaczego tak się stało? Być może jedyna instancja s3 już korzystała z puli połączeń? Jestem zdezorientowany.

Odpowiedz

27

Każdy klient w pakiecie AWS SDK dla języka Java (w tym klient Amazon S3) aktualnie utrzymuje własną pulę połączeń HTTP. Możesz dostroić maksymalny rozmiar puli połączeń HTTP za pomocą the ClientConfiguration class, która może zostać przekazana do konstruktorów obiektów klienta.

Zalecamy udostępnianie obiektów klienta ze względu na koszty i narzut posiadania zbyt wielu pul połączeń HTTP, które nie są efektywnie wykorzystywane. Powinieneś zobaczyć lepszą wydajność, gdy współużytkujesz obiekty klienta w takich wątkach.

+0

Dzięki za pomoc. masz rację. –

+1

dla mniej piśmiennych wśród nas ... czy mówisz, że Mark_H ** nie powinien ** tworzyć tablicy klientów S3? Sugerujesz, że powinien użyć jednego klienta S3 i przekazać go innym wątkom? – mmcrae

+0

Nawiązujesz tutaj do metody setMaxConnections? – rogerdpack