ผมใช้เวลาหลายวันในการเขียนเครื่องมือกำหนดเองของฉันจะคู่ขนานสำเนาที่จำเป็นสำหรับการนี้ แต่แล้วผมวิ่งข้ามเอกสารเกี่ยวกับวิธีการที่จะได้รับ AWS S3 CLI ซิงค์คำสั่งเพื่อประสานกับบุ้งกี๋ขนานใหญ่ คำสั่งต่อไปนี้จะบอก AWS CLI ให้ใช้ 1,000 เธรดเพื่อดำเนินการงาน (แต่ละไฟล์ขนาดเล็กหรือส่วนหนึ่งของสำเนาหลายส่วน) และมองไปข้างหน้า 100,000 งาน:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
หลังจากเรียกใช้สิ่งเหล่านี้คุณสามารถใช้คำสั่งซิงค์แบบง่ายดังนี้:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
บนเครื่อง m4.xlarge (ใน AWS - 4 คอร์, RAM 16GB) สำหรับเคสของฉัน (ไฟล์ 3-50GB) ความเร็วในการซิงค์ / คัดลอกเปลี่ยนจากประมาณ 9.5MiB / s เป็น 700 + MiB / s ความเร็วเพิ่มขึ้น 70x เหนือการกำหนดค่าเริ่มต้น
อัปเดต: โปรดทราบว่า S3CMD ได้รับการอัปเดตในช่วงหลายปีที่ผ่านมาและการเปลี่ยนแปลงเหล่านี้จะมีผลเฉพาะเมื่อคุณทำงานกับไฟล์ขนาดเล็กจำนวนมาก โปรดทราบว่า S3CMD บน Windows (เฉพาะใน Windows) มีข้อ จำกัด อย่างมากในปริมาณงานโดยรวมและสามารถบรรลุได้ประมาณ 3Gbps ต่อกระบวนการเท่านั้นไม่ว่าคุณจะใช้ขนาดอินสแตนซ์หรือการตั้งค่าใด ระบบอื่น ๆ เช่น S5CMD ก็มีปัญหาเช่นเดียวกัน ฉันได้พูดคุยกับทีม S3 เกี่ยวกับเรื่องนี้แล้วและพวกเขากำลังตรวจสอบอยู่