2012-02-24 35 views
5

Tôi đang đặt một số lượng lớn các mục nhỏ vào S3 bằng cách sử dụng API REST. Trọng tải trung bình là ~ 10 byte.Amazon S3: yêu cầu PUT tối đa mỗi giây

Các mục được tất cả đi vào một xô, và đã ngẫu nhiên tên (ví dụ: không có thứ tự từ điển)

Từ EC2, tôi đã được quản lý với tốc độ 4-500 mỗi giây. Tôi đang sử dụng một thread thread của 96 chủ đề, với 64 kết nối TCP.

Tôi thỉnh thoảng nhận được HTTP 500, nhưng chưa nhận được 503 - có nghĩa là để cho biết rằng khách hàng làm chậm tốc độ yêu cầu.

Có ai biết những gì tôi thực tế có thể đạt được không? Tôi biết đường ống giữa EC2 và S3 có thể quản lý một thông lượng 20 MB/s, vì vậy tôi hy vọng sẽ làm tốt hơn một chút.

Trả lời

1

Sẽ không có gì ngạc nhiên khi bạn thấy hiệu suất kém bằng cách sử dụng REST để chuyển cho các tải trọng nhỏ như vậy.

Cách để làm tốt hơn là cơ cấu lại bản chất của giao thức hoặc bộ nhớ của bạn để chi phí giao dịch không phải là yếu tố chi phối.

Thật vậy, kích thước của đường ống là loại không quan trọng đối với câu hỏi của bạn khi bạn đang điền hoàn toàn với chi phí HTTP; ví dụ nếu bạn có thể tăng gấp đôi thông lượng của kết nối, bạn có thể gửi gấp đôi chi phí vô dụng với hiệu quả không thay đổi trong dữ liệu có thể sử dụng.

+1

Tôi nhận thấy rằng phần lớn dữ liệu được truyền là thông tin HTTP. Tôi không kiểm soát được giao thức; S3 chỉ là REST và HTTP. Thật không may là không có chức năng batch cho S3 và do tính chất của ứng dụng của tôi; việc đóng gói các khối dữ liệu nhỏ thành dữ liệu lớn là không khả thi. – user756079

+0

Có lý do nào khiến bạn không đưa những thứ này vào SimpleDB, điều này có hỗ trợ các hoạt động đặt hàng loạt không? Họ có cần truy cập trực tiếp qua HTTP không? – Daan

+0

@ user756079 - Tôi biết bạn không có quyền kiểm soát giao thức truyền tải, nhưng bạn có quyền kiểm soát những gì bạn gửi qua kênh đó. Vì có một yếu tố bạn không thể thay đổi, bạn phải làm việc với những gì bạn có thể có nghĩa là xem xét lại nội dung (và kích thước) của tải trọng của bạn. – msw

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