Cách nhanh nhất để sao chép 400G tệp từ khối lượng lưu trữ khối đàn hồi ec2 sang s3 là gì?


21

Tôi phải sao chép 400G tệp từ khối lượng lưu trữ khối đàn hồi sang nhóm s3 ... Đó là khoảng 300k tệp ~ 1Mb

Tôi đã thử s3cmds3fuse , cả hai đều thực sự rất chậm .. s3cmd đã chạy trong một ngày hoàn chỉnh, cho biết nó đã sao chép xong và khi tôi kiểm tra xô, không có gì xảy ra s3cmd không bao giờ phàn nàn bất cứ điều gì)

S3Fuse đang hoạt động cho một ngày hoàn chỉnh khác và sao chép ít hơn 10% tệp ...

Có một giải pháp tốt hơn cho việc này?

Tôi đang chạy Linux (ubfox 12.04) tất nhiên


2
Nhiều điểm chuẩn (ví dụ: điểm này ) đã chứng minh 3 yếu tố xác định thông lượng cho S3: 1) kích thước tệp 2) số lượng luồng song song và 3) kích thước cá thể. Từ 64 đến 128 tải lên song song (đồng thời) các đối tượng 1MB nên bão hòa đường lên 1Gbps mà m1.xlarge có và thậm chí sẽ bão hòa đường lên 10Gbps của một đối tượng tính toán cụm (cc1.4xlarge). Cần có nhiều kịch bản với ý nghĩ này (ví dụ: cái này hoặc sửa đổi
s3cmd

1
s3 -allel-put đã lừa
aseba

Câu trả lời:


20

Có một số yếu tố chính xác định thông lượng từ EC2 đến S3:

  • Kích thước tệp - các tệp nhỏ hơn yêu cầu số lượng yêu cầu lớn hơn và nhiều chi phí hơn và truyền chậm hơn. Độ lợi với kích thước tệp (khi xuất phát từ EC2) không đáng kể đối với các tệp lớn hơn 256kB. (Trong khi đó, chuyển từ một địa điểm từ xa, với độ trễ cao hơn, có xu hướng tiếp tục cho thấy những cải tiến đáng kể cho đến giữa 1MiB và 2MiB).
  • Số lượng luồng song song - một luồng tải lên duy nhất thường có mức khá thấp trong suốt - thường dưới 5MiB / s. Thông lượng tăng theo số lượng luồng đồng thời và có xu hướng đạt đỉnh giữa 64 và 128 luồng. Cần lưu ý rằng các trường hợp lớn hơn có thể xử lý số lượng lớn hơn các luồng đồng thời.
  • Kích thước sơ thẩm - Theo thông số kỹ thuật của phiên bản , các phiên bản lớn hơn có nhiều tài nguyên chuyên dụng hơn, bao gồm phân bổ băng thông mạng lớn hơn (và ít biến đổi hơn) và nói chung là I / O - bao gồm cả đọc từ đĩa ephemeral / EBS - được gắn mạng. số giá trị cho mỗi loại là:
    • Rất cao: Lý thuyết: 10Gbps = 1250MB / s; Thực tế: 8,8Gbps = 1100MB / s
    • Cao: Lý thuyết: 1Gbps = 125MB / s; Thực tế: 750Mbps = 95MB / s
    • Trung bình: Lý thuyết: 250Mbps; Thực tế: 80Mbps = 10MB / s
    • Thấp: Lý thuyết: 100Mbps; Thực tế: 10-15Mbps = 1-2MB / s

Trong trường hợp chuyển một lượng lớn dữ liệu, có thể thực tế về mặt kinh tế khi sử dụng một thể hiện tính toán cụm, vì mức tăng hiệu quả trong thông lượng (> 10 lần) nhiều hơn chênh lệch về chi phí (2-3 lần).

Mặc dù các ý tưởng trên khá logic (mặc dù, nắp trên mỗi luồng có thể không), nhưng khá dễ dàng để tìm điểm chuẩn sao lưu chúng. Một chi tiết đặc biệt có thể được tìm thấy ở đây .

Việc sử dụng từ 64 đến 128 tải lên song song (đồng thời) các đối tượng 1MB sẽ bão hòa đường lên 1Gbps mà m1.xlarge có và thậm chí sẽ bão hòa đường lên 10Gbps của một đối tượng tính toán cụm (cc1.4xlarge).

Mặc dù khá dễ dàng để thay đổi kích thước cá thể, hai yếu tố còn lại có thể khó quản lý hơn.

  • Kích thước tệp thường được cố định - chúng tôi không thể nối các tệp với nhau trên EC2 và tách chúng ra trên S3 (vì vậy, chúng tôi không thể làm gì nhiều với các tệp nhỏ). Tuy nhiên, các tệp lớn, chúng ta có thể tách ra ở phía EC2 và lắp lại ở phía S3 (sử dụng tải lên nhiều phần của S3). Thông thường, điều này là thuận lợi cho các tệp lớn hơn 100 MB.
  • Chủ đề song song là một chút khó khăn hơn để phục vụ. Cách tiếp cận đơn giản nhất là viết một trình bao bọc cho một số tập lệnh tải lên hiện có sẽ chạy nhiều bản sao của nó cùng một lúc. Các cách tiếp cận tốt hơn sử dụng API trực tiếp để thực hiện một cái gì đó tương tự. Hãy nhớ rằng khóa là các yêu cầu song song, không khó để xác định một số tập lệnh tiềm năng, ví dụ:
    • s3cmd-sửa đổi - một nhánh của phiên bản đầu tiên của s3cmd đã thêm chức năng này, nhưng đã không được cập nhật trong vài năm.
    • s3 -allel-put - kịch bản python hợp lý gần đây hoạt động tốt

8

Vì vậy, sau rất nhiều thử nghiệm, s3 -allel-put đã thực hiện thủ thuật một cách khủng khiếp. Rõ ràng là giải pháp nếu bạn cần tải rất nhiều tệp lên S3. Cảm ơn cyberx86 cho các ý kiến.


3
Vì tò mò, a) mất bao lâu để tải lên 400GB b) bạn đã sử dụng bao nhiêu chủ đề c) kích thước cá thể bạn đã sử dụng?
cyberx86

1
@ Cyberx86 Gần đây tôi đã sử dụng s3 -allel-put trên một Instance lớn Ec2. Tôi đã sử dụng 5 chủ đề và nó đã sao chép 288,73 GB trong 10,49 giờ.
Gortron

4

Điều chỉnh các giá trị cấu hình AWS CLI S3 theo http://docs.aws.amazon.com/cli/latest/topic/s3-config.html .

Dưới đây tăng tốc độ đồng bộ hóa S3 lên ít nhất là 8 lần!

Thí dụ:

$ more ~/.aws/config
[default]
aws_access_key_id=foo
aws_secret_access_key=bar
s3 =
   max_concurrent_requests = 100
   max_queue_size = 30000

2

Tôi đã viết một ứng dụng giao diện điều khiển được tối ưu hóa trong C # ( CopyFasterToS3 ) để làm điều này. Tôi đã sử dụng trong EBS vol, trong trường hợp của tôi, nó có 5 thư mục với hơn 2 triệu tệp với số lượng 20Gb. Kịch bản được thực hiện trong vòng chưa đầy 30 phút.

Trong bài viết này tôi đã chỉ ra cách sử dụng hàm đệ quy song song. Bạn có thể phiên âm nó sang ngôn ngữ khác.

Chúc may mắn!




1

Hãy thử sử dụng s3-cli thay vì s3cmd. Tôi đã sử dụng nó thay vì s3cmd để tải tệp lên thùng s3 của mình và nó giúp việc triển khai của tôi nhanh hơn gần 17 phút (từ 21 đến 4 phút)!

Đây là liên kết: https://github.com/andrewrk/node-s3-cli

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.