ทำไม Dropbox ถึงเร็วสุดเมื่อเทียบกับ FTP


36

ฉันอยากรู้ว่าทำไมDropboxถึงเร็วกว่า FTP ในทางเทคนิค ใช้เทคโนโลยีประเภทใด

ฉันไม่ได้พูดถึงไฟล์ต่าง ๆ ฉันกำลังพูดถึงการถ่ายโอนไฟล์ใหม่ในทั้งสองกรณี Dropbox นั้นเร็วกว่ามาก

ฉันหมายถึงมันเร็วกว่ามากอาจเร็วกว่า FTP ถึง 10 เท่าสำหรับไฟล์ที่ฉันอัปโหลด ฉันจะทดลองอีกครั้งสำหรับไฟล์ขนาดใหญ่ในภายหลัง


2
คุณอัปโหลดขนาดประเภทและจำนวนไฟล์ใด แต่ละไฟล์ใช้เวลาในการอัปโหลดนานเท่าใด คุณอัปโหลดไฟล์ไปที่ผ่าน FTP อยู่ที่ไหน Dropbox ไม่ใช่เรื่องมหัศจรรย์คำอธิบายที่ง่ายที่สุดคือเซิร์ฟเวอร์ FTP ที่คุณกำลังอัปโหลดก็มีแบนด์วิดท์น้อยกว่า Amazon
user23307

2
หากพวกเขามีอยู่แล้วมันจะไม่อัปโหลดอีกครั้ง p
Journeyman Geek

4
คุณพูดว่า "ไฟล์ใหม่" แต่ถ้าไฟล์เหล่านี้เป็นข้อมูลแบบสุ่มคุณอาจเห็นประโยชน์ของการซิงค์ระดับบล็อก (เช่นในrsyncและเครื่องมืออื่น ๆ )
Chris Johnsen

1
นี่เป็นมากกว่า imo การเปรียบเทียบโฮสติ้งฉันรู้เซิร์ฟเวอร์ FTP ที่เร็วกว่า Dropbox และฉันยังใช้การเชื่อมต่อกับ Filezilla หลายรายการดังนั้นคำสั่งที่ระบุไว้ในคำตอบนี้จึงไม่ถือ
Tamara Wijsman

Dropbox ใช้การทำซ้ำเพื่อประหยัดพื้นที่จัดเก็บของไฟล์ทั่วไปดังนั้นจึงไม่จำเป็นต้องอัปโหลดหากมีอยู่แล้ว
Paradroid

คำตอบ:


31

อาจมีสาเหตุหลายประการ
โปรโตคอล FTP นั้นยังห่างไกลจากประสิทธิภาพ

  1. การถ่ายโอน FTP ต้องการการเชื่อมต่ออย่างน้อยสองครั้ง (การเชื่อมต่อหนึ่งการควบคุมและการเชื่อมต่อหนึ่งข้อมูล) ซึ่ง DropBox อาจใช้เพียงการเชื่อมต่อ HTTP เดียว นอกจากนี้การเชื่อมต่อข้อมูลสำหรับเซสชัน FTP อาจถูกเปิดจากเซิร์ฟเวอร์ไปยังไคลเอนต์ของคุณและหากคุณเป็น NAT นี่อาจล้มเหลวดังนั้นไคลเอนต์ FTP ของคุณอาจพยายามเชื่อมต่อด้วยวิธีดังกล่าว

  2. มีจำนวนมากที่ต้องทำและไปๆมาๆในการเชื่อมต่อ FTP ในการส่งไฟล์ไคลเอนต์จำเป็นต้องส่งคำสั่งอย่างน้อยสองคำสั่ง (หนึ่งคำสั่งเพื่อเปิดการเชื่อมต่อข้อมูลและหนึ่งคำสั่งเพื่อเริ่มส่ง) และทุกครั้งที่ต้องรอให้เซิร์ฟเวอร์ตอบกลับโดยเพิ่มเวลาแฝงเพิ่มเติม เช่นเดียวกับการปัดเศษสองรอบต่อไฟล์มีหลายรอบการตอบสนองคำสั่งสำหรับการเชื่อมต่อเริ่มต้น - หนึ่งเพื่อส่งชื่อผู้ใช้หนึ่งสำหรับรหัสผ่านและอย่างน้อยหนึ่งการตั้งค่าพารามิเตอร์การถ่ายโอน (เพื่อให้แน่ใจว่าเซิร์ฟเวอร์เป็น คาดหวังว่าไบนารีไม่ใช่ ASCII ข้อมูล) ลูกค้าอาจออกคำสั่งพิเศษสองสามคำสั่งเพื่อรับข้อมูลกลับจากเซิร์ฟเวอร์เกี่ยวกับตัวเอง Dropbox มีแนวโน้มที่จะใช้เพียงแค่หนึ่งคำขอ HTTP หรืออย่างน้อยสอง (หนึ่งเพื่อรับรองความถูกต้องหนึ่งที่จะส่งข้อมูล)

  3. ยิ่งไปกว่านั้นขึ้นอยู่กับไคลเอนต์ที่คุณใช้สำหรับการถ่ายโอน FTP (ซึ่งคุณไม่ได้ระบุว่าเป็นความคิดที่ดีที่จะแก้ไขคำถามของคุณเพื่อรวมข้อมูลนั้น) มันอาจจะทิ้งการเชื่อมต่อหลังจากการดำเนินการส่งแต่ละครั้ง เวลา. ไม่น่าเป็นไปได้ที่ DropBox จะคงการเชื่อมต่อที่เปิดไว้ชั่วขณะเพื่อจุดประสงค์ในการทำโพลแบบยาวเพื่อตอบสนองทันทีที่สามารถทำได้กับข้อมูลใหม่ที่ลูกค้าสามารถดาวน์โหลดได้ดังนั้นจึงควรทำการเปิดใหม่ การเชื่อมต่อ HTTP เพื่อส่งไฟล์ไม่จำเป็นต้องตรวจสอบสิทธิ์อีกครั้ง

  4. ไม่น่าเป็นไปได้ที่ไคลเอ็นต์ DropBox กำลังบีบอัดข้อมูลก่อนที่จะส่ง (เพื่อปรับปรุงความเร็วและประหยัดแบนด์วิดท์) ที่ FTP ไคลเอนต์ของคุณจะไม่เป็น ดังนั้นแม้สำหรับไฟล์ที่มีขนาดใหญ่กว่า (เว้นแต่จะมีการบีบอัดหรือเข้ารหัสล่วงหน้า) DropBox และยูทิลิตี้เช่นนั้นอาจเร็วกว่าการถ่ายโอน FTP พื้นฐานด้วยระยะขอบ

สำหรับไฟล์ขนาดใหญ่จุดสามจุดแรกด้านบนจะซีดลงอย่างไม่มีนัยสำคัญเมื่อเทียบกับเวลาที่ถ่ายโอนข้อมูลจริง แต่จุดที่ 4 อาจยังค่อนข้างสำคัญ สำหรับไฟล์ขนาดเล็กเวลาการตั้งค่าเพิ่มเติมทั้งหมดที่เพิ่มโดยโปรโตคอล FTP อาจมีความยาวมากกว่าเวลาที่ใช้ในการส่งข้อมูลจริงสองเท่า


+1 สำหรับคำตอบโดยละเอียด ฉันก็สงสัยเช่นกันว่า Dropbox นั้นเร็วขนาดไหน
Grant Palin

1
ฉันอ่านบางแห่งว่าข้อมูลดรอปบ็อกซ์นั้นถูกเข้ารหัสก่อนที่จะทำการถ่ายโอนดังนั้นจึงเหมาะสมที่จะบีบอัดข้อมูล (อย่างน้อยก็น้อย)
Dean Rather

ไฟล์ที่เข้ารหัสไม่ควรบีบอัดได้ - ฉันจะไม่วางกล่องเข้ารหัสไฟล์ระหว่างการถ่ายโอนอยู่ดี
Martin Beckett

@mgb: คุณถูกต้องแล้วว่าเทคนิคการบีบอัดไฟล์ไม่ควรมีความซ้ำซ้อนมากพอในการเข้ารหัสข้อมูลที่เป็นประโยชน์ดังนั้นการส่งไฟล์ครั้งแรกจะส่งผลให้ไม่มีความช่วยเหลือในการบีบอัด แต่ถ้าดรอปบ็อกซ์มีไฟล์อยู่แล้วและคุณเพิ่งอัปเดต (และคีย์ยังคงเหมือนเดิม) โอกาสที่มันไม่จำเป็นต้องถ่ายโอนไฟล์ทั้งหมดเพื่ออัปเดตสำเนาระยะไกล ในขณะที่ข้อมูลไม่สามารถบีบอัดได้จำนวนเงินที่คุณต้องส่งเพื่อรักษาให้ทันสมัยยังคงสามารถลดลงได้ (สำหรับไฟล์ขนาดใหญ่ที่เห็นการปรับปรุงเล็กน้อย)
David Spillett

1
ฉันค่อนข้างมั่นใจว่าพวกเขาใช้ HTTPS สำหรับการถ่ายโอน (HTTP ผ่าน SSL) แทนที่จะส่งข้อมูลในรูปแบบธรรมดา ฉันไม่ทราบว่าจะใช้การเข้ารหัสแบบใด (ถ้ามี) สำหรับที่จัดเก็บข้อมูลจริง แต่หากข้อมูลของคุณมีความละเอียดอ่อนคุณควรทำการเข้ารหัสที่ด้านข้างของคุณต่อไปดังนั้นมีเพียงคุณเท่านั้นที่มีสำเนาของคีย์ที่เกี่ยวข้อง
David Spillett

15

เป็นคนอื่นได้กล่าวถึงDropbox สามารถข้ามส่วนของไฟล์ที่ยังไม่ได้เปลี่ยน แต่Dropbox จะข้ามการอัปโหลดไฟล์หากมีสำเนาอยู่ด้านเซิร์ฟเวอร์แล้ว (ที่คุณหรือคนอื่นอัปโหลดแล้ว)

ดังนั้นหากคุณพยายามอัปโหลดไฟล์ที่เหมือนกับไฟล์ที่ Dropbox มีอยู่แล้วการอัปโหลดจะถูกข้ามไป (และเครื่องที่เชื่อมโยงอื่น ๆ สามารถเริ่มดาวน์โหลดได้จากเซิร์ฟเวอร์ Dropbox) หากคุณกำลังอัปโหลดไฟล์ที่เกือบจะเหมือนกันกับไฟล์อื่นที่อัปโหลดแล้ว (ไม่ชัดเจนว่าไฟล์ที่อัปโหลดแล้วนั้นจะต้องเป็น 'ของคุณ' หรืออาจมาจากผู้ใช้คนอื่น) จากนั้นก็จะส่งชิ้นส่วนของ ไฟล์ที่จะสร้างใหม่บนเซิร์ฟเวอร์เมื่อรวมกับไฟล์ที่อัปโหลดแล้ว

FTP ไม่สามารถทำสิ่งเหล่านี้ได้ (เป็นโปรโตคอลอย่างง่ายในการส่งและรับสตรีมข้อมูลโดยไม่อ้างอิงถึงข้อมูลอื่นใดที่มีอยู่ในรีโมตปลายทาง) เครื่องมืออย่างrsyncและUnisonสามารถ 'ข้ามชิ้นที่ด้านอื่นมีอยู่แล้ว' แต่โดยทั่วไปจะถูก จำกัด ให้เปรียบเทียบชิ้นภายในไฟล์ที่เส้นทางที่เหมือนกันในลำดับชั้นที่ซิงโครไนซ์ Dropbox ดูเหมือนจะขยายแนวคิดนี้ไปยังคอลเลกชันของไฟล์ (ดังนั้นหากคุณ 'อัปโหลด' สองไฟล์ที่เหมือนกันเกือบจะเป็นไปได้ว่ามันสามารถจัดส่งได้เพียงหนึ่งบวกที่เพียงพอของ 'diff' เพื่อสร้างอีกไฟล์ใหม่)


11

ฉันคิดว่าคุณหมายถึงเร็วกว่าในแง่ของการถ่ายโอนไฟล์ เมื่อคุณบันทึกไฟล์ในโฟลเดอร์ Dropbox ของคุณ Dropbox จะส่งข้อมูลของเดลต้า (หรือ diff) ไปยังเซิร์ฟเวอร์จัดเก็บข้อมูลระยะไกลเท่านั้น FTP (เป็นไปได้มากที่สุด) ส่งไบต์ไฟล์โดยไบต์ (แทนที่จะส่งการเปลี่ยนแปลง) ซึ่งอาจใช้เวลานานกว่าในการถ่ายโอนผ่านเครือข่าย ในทำนองเดียวกันเมื่อทำการซิงค์จากรีโมตเซิร์ฟเวอร์ไคลเอ็นต์โลคัลจะดาวน์โหลดเฉพาะการเปลี่ยนแปลง

คุณสมบัติการซิงค์ LAN ยังสามารถเพิ่มความเร็วในการซิงค์และลดปริมาณการใช้เครือข่ายที่จำเป็น


แน่นอนฉันกำลังพูดถึงไฟล์ใหม่สำหรับทั้งสองกรณี

0

Dropbox อาจเร็วขึ้นเมื่อคุณส่งไฟล์จำนวนมาก FTP นั้นเร็วที่สุดเท่าที่คุณจะทำได้เมื่อเราพูดถึงความเร็ว แต่มันต้องใช้ "การพูดคุย" มากเกินไประหว่างเซิร์ฟเวอร์และคอมพิวเตอร์ไคลเอนต์สำหรับแต่ละไฟล์ดังนั้น ftp ดูเหมือนจะช้ากว่า หากคุณกำลังอัปโหลดแอปพลิเคชั่นโอเพนซอร์ซที่มีไฟล์หลายพันไฟล์มันจะสะดวกกว่าในการบีบอัดไฟล์ทั้งหมดอัปโหลดผ่าน FTP และคลายการบีบอัดลงบนเซิร์ฟเวอร์


0

ฉันเดาว่าพวกเขาใช้เทคนิคการแปลงแป้นอย่างง่ายคล้ายกับ md5 / sha

เมื่อใดก็ตามที่คุณวางไฟล์ใน "dropbox" ในพื้นที่ Dropbox-client จะคำนวณแฮชของไฟล์นั้นและจะต้องส่งข้อมูลพิเศษบางอย่างเช่นขนาดไฟล์ให้ชื่อไฟล์ไปยังดรอปบ็อกซ์เซิร์ฟเวอร์

หาก dropbox-server พบไฟล์ที่คล้ายกัน(พวกเขาจะต้องรักษาดัชนีของแฮชและไฟล์ข้อมูลบนเซิร์ฟเวอร์ของพวกเขา)ก็จะแจ้งให้ลูกค้าทราบว่าไฟล์ "อัพโหลด" สำเร็จแล้ว ;-)

วิธีนี้คุณจะลงเอยด้วยการ "อัปโหลด" ไฟล์อย่างมีเหตุผลเท่านั้น เนื่องจากไม่มีการถ่ายโอนไฟล์เนื้อหาจริงจึงต้องรวดเร็วกว่าสิ่งอื่นใด

ฉันไม่แน่ใจว่า dropbox อัลกอริทึมแบบ hashing ใช้ แต่ฉันแน่ใจว่า 100% หลักการทำงานของพวกเขาคล้ายกับที่ฉันอธิบายไว้ข้างต้น


0

แม้ว่า Dropbox กำลังใช้บริการอื่น ๆ แต่ก็มีการใช้ Amazon AWS (Amazon Web Services) ในอดีต ดูเหมือนว่าการถ่ายโอนของคุณจากต้นทางไปยังปลายทางจะมีท่อส่งขนาดใหญ่ จากประสบการณ์ของฉัน Dropbox ใช้ปลายทางที่สามารถรับข้อมูลจำนวนมากได้ในครั้งเดียว Dropbox ยังกระจายการอัปโหลดไปยังที่อยู่ IP ที่แตกต่างกัน ไซต์ที่คุณกำลัง FTPing มีแนวโน้มว่าจะมีท่อส่งขนาดเล็กกว่ามากและไม่มีความสามารถในการกระจายการอัปโหลดอย่างมีประสิทธิภาพ

หากคุณเรียกใช้การตรวจสอบทรัพยากร (resmon)และไปที่แท็บเครือข่ายคุณจะสังเกตเห็นกระบวนการที่แตกต่างกันโดยใช้แบนด์วิดท์เครือข่าย

  • ภายใต้กระบวนการที่มีกิจกรรมเครือข่ายให้เลือกคอลัมน์สำหรับ Total (B/sec)
  • ภายใต้การเชื่อมต่อ TCP เลือกคอลัมน์สำหรับ Total (B/sec)

สำหรับฉันเมื่อฉันอัพโหลดไฟล์ไปยัง Dropbox มันใช้การเชื่อมต่อ 4 ครั้งเพื่อส่งที่อยู่ IP ที่แตกต่างกัน 4 รายการ

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.