2013-05-03 32 views
13

tôi từng sử dụng mãAmazon S3 có hồ bơi kết nối không?

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

Chỉ một ví dụ s3 được tạo ra trong khi hàng chục chủ đề sẽ tải lên hình ảnh bằng cách s3.putObject(). Trong các thông tin dump, tôi có thể thấy rằng một sợi sẽ khóa ví dụ duy nhất s3 trong khi những người khác đang chờ đợi.

Vì vậy, tôi nghĩ rằng có thể nó sẽ nhanh hơn nếu tôi sử dụng mã bên dưới:

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

Mỗi lần hệ thống sẽ nhận được một trường hợp s3 ngẫu nhiên và sau đó tải lên các hình ảnh.

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

Nhưng có vẻ như hệ thống chậm lại. Tại sao điều đó xảy ra? Có lẽ cá thể duy nhất s3 đã sử dụng hồ bơi kết nối? Tôi bị bối rối.

Trả lời

27

Mỗi khách hàng trong SDK AWS cho Java (bao gồm cả máy khách Amazon S3) hiện đang duy trì hồ bơi kết nối HTTP riêng của nó. Bạn có thể điều chỉnh kích thước tối đa của nhóm kết nối HTTP thông qua the ClientConfiguration class có thể được chuyển vào các trình tạo đối tượng khách hàng.

Chúng tôi khuyên bạn nên chia sẻ các đối tượng khách hàng, vì chi phí và phí tổn của việc có quá nhiều kết nối HTTP không được sử dụng hiệu quả. Bạn sẽ thấy hiệu suất tốt hơn khi bạn chia sẻ các đối tượng khách hàng trên các chủ đề như thế này.

+0

Cảm ơn sự giúp đỡ của bạn. bạn đúng rồi. –

+1

cho chúng ta ít biết chữ ... bạn có nói rằng Mark_H ** không nên ** tạo một mảng khách hàng S3 không? Bạn có gợi ý anh ta nên sử dụng một máy khách S3 đơn lẻ và chuyển nó tới các luồng khác nhau không? – mmcrae

+0

Bạn đề cập đến phương pháp setMaxConnections ở đây, tôi đoán? – rogerdpack

Các vấn đề liên quan