एक ec2 इलास्टिक ब्लॉक स्टोर वॉल्यूम से s3 में 400G फाइल कॉपी करने का सबसे तेज़ तरीका कौन सा है?


21

मुझे एक इलास्टिक ब्लॉक स्टोर वॉल्यूम से s3 बाल्टी में 400G फाइल कॉपी करनी है ... वे ~ 1bb की लगभग 300k फाइल हैं

मैंने s3cmd और s3fuse की कोशिश की है , वे दोनों वास्तव में बहुत धीमे हैं .. s3cmd एक पूरे दिन के लिए चला, कहा कि इसे कॉपी करना समाप्त कर दिया है, और जब मैंने बाल्टी की जाँच की, तो कुछ भी नहीं हुआ था (मुझे लगता है कि कुछ गलत हुआ था, लेकिन कम से कम s3cmd ने कभी किसी चीज़ की शिकायत नहीं की)

S3Fuse एक अन्य पूर्ण दिन के लिए काम कर रहा है, और 10% से कम फ़ाइलों की प्रतिलिपि बनाई गई है ...

क्या इसके लिए कोई बेहतर उपाय है?

मैं निश्चित रूप से लिनक्स (ubuntu 12.04) चला रहा हूं


2
कई बेंचमार्क (जैसे यह एक ) एस 3: 1 के माध्यम से थ्रूपुट के 3 निर्धारण कारकों का प्रदर्शन किया है फ़ाइल आकार 2) समानांतर धागे की संख्या और 3) उदाहरण का आकार। 1 एमबी ऑब्जेक्ट के 64 और 128 समानांतर (एक साथ) अपलोड के बीच 1Gbps अपलिंक को संतृप्त करना चाहिए जो कि m1.xlarge है और क्लस्टर गणना (cc1.4xlarge) के 10Gbps अपलिंक को भी संतृप्त करना चाहिए। इसे ध्यान में रखते हुए कई स्क्रिप्ट होनी चाहिए (जैसे यह एक या s3cmd- संशोधन)
साइबरबरी

1
s3-समानांतर-पुट ने किया चाल!
आसाबा

जवाबों:


20

EC2 से S3 तक थ्रूपुट निर्धारित करने वाले कई प्रमुख कारक हैं:

  • फ़ाइल का आकार - छोटी फ़ाइलों के लिए अधिक संख्या में अनुरोध और अधिक ओवरहेड और स्थानांतरण धीमा करने की आवश्यकता होती है। 256kB से बड़ी फ़ाइलों के लिए फ़ाइलें (जब EC2 से उत्पन्न होती हैं) के साथ लाभ नगण्य है। (जबकि, उच्च अक्षांश के साथ एक दूरस्थ स्थान से स्थानांतरित करना, 1MiB और 2MiB के बीच प्रशंसनीय सुधार दिखाना जारी रखता है)।
  • समानांतर थ्रेड्स की संख्या - एक एकल अपलोड थ्रेड में आमतौर पर काफी कम होता है - अक्सर 5MiB / s से नीचे। समवर्ती धागे की संख्या से थ्रूपुट बढ़ता है, और 64 और 128 धागे के बीच चरम पर पहुंच जाता है। यह ध्यान दिया जाना चाहिए कि बड़े उदाहरण समवर्ती धागे की एक बड़ी संख्या को संभालने में सक्षम हैं।
  • उदाहरण का आकार - उदाहरण के विनिर्देशों के अनुसार , बड़े उदाहरणों में नेटवर्क बैंडविड्थ का एक बड़ा (और कम चर) आवंटन (और I / O सहित) में अधिक समर्पित संसाधन होते हैं, जिसमें अल्पकालिक / ईबीएस डिस्क से पढ़ना शामिल है - जो नेटवर्क से जुड़े होते हैं। प्रत्येक श्रेणी के लिए संख्या मान हैं:
    • बहुत अधिक: सैद्धांतिक: 10 जीबीपीएस = 1250 एमबी / एस; यथार्थवादी: 8.8 जीबीपीएस = 1100 एमबी / एस
    • उच्च: सैद्धांतिक: 1 जीबीपीएस = 125 एमबी / एस; यथार्थवादी: 750 एमबीपीएस = 95 एमबी / एस
    • मध्यम: सैद्धांतिक: 250 एमबीपीएस; यथार्थवादी: 80 एमबीपीएस = 10 एमबी / एस
    • कम: सैद्धांतिक: 100 एमबीपीएस; यथार्थवादी: 10-15 एमबीपीएस = 1-2 एमबी / एस

बड़ी मात्रा में डेटा स्थानांतरित करने के मामलों में, क्लस्टर गणना उदाहरण का उपयोग करना आर्थिक रूप से व्यावहारिक हो सकता है, क्योंकि थ्रूपुट (> 10x) में प्रभावी लाभ लागत (2-3x) के अंतर से अधिक है।

हालांकि उपरोक्त विचार काफी तार्किक हैं (हालांकि, प्रति-धागा कैप नहीं हो सकता है), बेंचमार्क को उन्हें ढूंढना काफी आसान है। एक विशेष रूप से विस्तृत यहाँ पाया जा सकता है

1 एमबी ऑब्जेक्ट के 64 और 128 समानांतर (एक साथ) अपलोड के बीच का उपयोग करके 1Gbps अपलिंक को संतृप्त करना चाहिए जो कि m1.xlarge के पास है और क्लस्टर गणना (cc1.xlarge) उदाहरण के 10Gbps अपलिंक को भी संतृप्त करना चाहिए।

हालांकि, उदाहरण के आकार को बदलना काफी आसान है, अन्य दो कारकों को प्रबंधित करना कठिन हो सकता है।

  • फ़ाइल का आकार आमतौर पर तय किया जाता है - हम EC2 पर एक साथ फ़ाइलों में शामिल नहीं हो सकते हैं और उन्हें S3 पर अलग कर सकते हैं (इसलिए, वहाँ बहुत कुछ नहीं है जो हम छोटी फ़ाइलों के बारे में कर सकते हैं)। हालाँकि बड़ी फाइलें, हम EC3 की तरफ अलग हो सकते हैं और S3 के पक्ष में फिर से जुट सकते हैं (S3 के बहु-भाग अपलोड का उपयोग करके)। आमतौर पर, यह उन फ़ाइलों के लिए फायदेमंद है जो 100MB से बड़ी हैं।
  • समानांतर धागे को पूरा करने के लिए थोड़ा कठिन है। सबसे सरल दृष्टिकोण कुछ मौजूदा अपलोड स्क्रिप्ट के लिए एक आवरण लिखने के लिए नीचे आता है जो एक ही बार में इसकी कई प्रतियां चलाएगा। बेहतर दृष्टिकोण कुछ इसी तरह पूरा करने के लिए सीधे एपीआई का उपयोग करते हैं। यह ध्यान में रखते हुए कि कुंजी समानांतर अनुरोध है, उदाहरण के लिए, कई संभावित लिपियों का पता लगाना मुश्किल नहीं है:
    • s3cmd-modification - s3cmd के प्रारंभिक संस्करण का एक कांटा जिसने इस कार्यक्षमता को जोड़ा, लेकिन कई वर्षों में इसे अपडेट नहीं किया गया।
    • s3-समानांतर-पुट - हाल ही में अजगर स्क्रिप्ट जो अच्छी तरह से काम करती है

8

इसलिए, बहुत परीक्षण के बाद s3-समानांतर-पुट ने चाल को अजीब रूप से किया। स्पष्ट रूप से समाधान यदि आपको S3 के लिए बहुत सारी फाइलें अपलोड करने की आवश्यकता है। टिप्पणियों के लिए साइबरएक्स 86 का धन्यवाद ।


3
जिज्ञासा से बाहर, ए) 400 जीबी बी को अपलोड करने में कितना समय लगा) आपने कितने थ्रेड का उपयोग किया c) आपने किस इंस्टेंस साइज का उपयोग किया?
साइबरबैरी

1
@ Cyberx86 मैंने हाल ही में एक बड़े Ec2 इंस्टेंस पर s3-समानांतर-पुट का उपयोग किया। मैंने 5 थ्रेड्स का उपयोग किया और इसने 10.49 घंटों में 288.73 जीबी की नकल की।
ग्रोनट्रॉन


2

मैंने ऐसा करने के लिए C # ( CopyFasterToS3 ) में एक अनुकूलित कंसोल एप्लिकेशन लिखा । मैंने ईबीएस वॉल्यूम में उपयोग किया, मेरे मामले में इसमें 5 फ़ोल्डर थे जिसमें 20 जीबी की मात्रा में 2 लाखों से अधिक फाइलें थीं। स्क्रिप्ट को 30 मिनट से कम समय में निष्पादित किया गया।

में इस लेख मैं कैसे समानांतर के साथ एक पुनरावर्ती समारोह का उपयोग करने के दिखाया। आप इसे दूसरी भाषा में ट्रांसक्रिप्ट कर सकते हैं।

सौभाग्य!


1

वहाँ भी है: s3funnel , जो बहुत पुराना लगता है (2008) और कुछ खुले कीड़े, लेकिन अभी भी अमेज़न से ही सूचीबद्ध है: amzn-lnk



1

S3cmd के बजाय s3-cli का उपयोग करने का प्रयास करें । मैंने अपने s3 बाल्टी में फाइलें अपलोड करने के लिए s3cmd के बजाय इसका उपयोग किया और इसने मेरी तैनाती को लगभग 17 मिनट (21 से 4 मिनट) तक तेज कर दिया!

यहाँ लिंक है: https://github.com/andrewrk/node-s3-cli

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.