เคล็ดลับเกี่ยวกับการจัดเก็บไฟล์ 25 ล้าน + ล้านไฟล์ในระบบไฟล์อย่างมีประสิทธิภาพ


11

สมมติว่าคุณกำลังเผชิญหน้ากับไฟล์บันทึกที่ไม่มีการบีบอัดขนาด 25 TB และคุณมีกล่องสินค้าจำนวน 20 กล่องที่มีพื้นที่จัดเก็บรวมฟรีจำนวน 25 TB

คุณจะเก็บสิ่งเหล่านี้ได้อย่างไร.

ก) ระบบไฟล์แบบกระจายที่จะใช้?

b) รูปแบบการบีบอัด / คลาย / อัลกอริทึมใด?

c) ขนาดไฟล์บันทึกคือ 1MB สูงสุด 7MB ข้อความทั้งหมดและพื้นที่ว่างจำนวนมาก

d) การใช้งานคือ) คนต้องการไฟล์บันทึกล่าสุดมากกว่าก่อนหน้าดังนั้นระบบแคชที่จะใช้ข) ผู้คนจะอ่านไฟล์บันทึกเท่านั้นไม่ลบพวกเขาค) คนต้องการรายชื่อไฟล์บันทึกกับช่วงวันที่

e) ระบบปฏิบัติการที่ทำงานบนกล่องสินค้าคือ Linux

f) สำหรับการสำรองข้อมูลเรามีอาเรย์การจัดเก็บที่ดูแล ดังนั้นความสามารถในการกู้คืนข้อมูลจากอาร์เรย์จึงมีอยู่

ฉันไม่ต้องการให้พวกเขาเข้าถึงระบบไฟล์โดยตรง ฉันควรทำอย่างไรดี ? ฉันจะรับ API ที่ใช้ REST ได้อย่างไร

โปรดสำรองไว้ 2 เซนต์และคุณจะทำอย่างไร

Ankur


กล่องระบบสินค้าใดที่ใช้ระบบปฏิบัติการใดอยู่ คุณต้องการความอดทนต่อความผิดปกติหรือไม่หรือหากข้อมูลทั้งหมดที่เก็บไว้ในช่องเดียวหายไปจะถือว่าใช้ได้หรือไม่?
Mark Henderson

@farseeker แก้ไขคำถามเพื่อตอบคำถามคุณ ขอบคุณ
Ankur Gupta

เพิ่งอ่านคำถามอีกครั้งและคำถามแรกที่ฉันถามคือ: ไฟล์เก็บข้อมูลขนาด 25TB อยู่ที่ใดในขณะนี้และสามารถอยู่ที่นั่นได้หรือไม่
มาร์คเฮนเดอร์สัน

@farseeker บนระบบไฟล์ NFS
Ankur Gupta

วิธีการเกี่ยวกับen.wikipedia.org/wiki/…
Neil McGuigan

คำตอบ:


7

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

ส่วนตัวฉันชอบ ZFS ในกรณีนี้การสร้างการบีบอัดการขจัดข้อมูลซ้ำซ้อนและการยอมรับข้อบกพร่องจะเป็นประโยชน์ อย่างไรก็ตามฉันแน่ใจว่ามีวิธีอื่น ๆ อีกมากมายในการบีบอัดข้อมูลในขณะที่ทนต่อความผิดพลาด

หวังว่าฉันจะมีโซลูชันไฟล์แบบครบวงจรที่แท้จริงในการแนะนำฉันรู้ว่านี่เป็น kludgey จริงๆ แต่ฉันหวังว่ามันจะชี้แนะคุณในทิศทางที่ถูกต้อง

แก้ไข: ฉันยังใหม่กับ ZFS และตั้งค่า iSCSI แต่จำได้ว่าได้เห็นวิดีโอจาก Sun ในเยอรมนีที่พวกเขาแสดงการยอมรับข้อบกพร่องของ ZFS พวกเขาเชื่อมต่อฮับ USB สามตัวเข้ากับคอมพิวเตอร์และใส่แฟลชไดรฟ์สี่ตัวในแต่ละฮับ จากนั้นเพื่อป้องกันไม่ให้ฮับใด ๆ ลดพูลหน่วยความจำพวกเขาสร้างโวลุ่ม RAIDz ซึ่งประกอบด้วยแฟลชไดรฟ์หนึ่งตัวจากฮับแต่ละตัว จากนั้นพวกเขาก็ทำการรวมโวลุ่ม ZFS RAID สี่ชุดเข้าด้วยกัน วิธีนี้ใช้แฟลชไดรฟ์เพียงสี่ตัวเท่านั้นเพื่อความเท่าเทียมกัน ถัดไปแน่นอนถอดปลั๊กหนึ่งฮับและทำให้ทุก zpool ลดลง แต่มีข้อมูลทั้งหมด ในการกำหนดค่านี้อาจมีการสูญเสียไดรฟ์สูงสุดสี่ไดรฟ์ แต่หากสองไดรฟ์ใดไม่ได้อยู่ในกลุ่มเดียวกัน

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

หวังว่านี่จะดีกว่า

แก้ไข:ขุดบ้างและพบวิดีโอที่ฉันพูดถึง ส่วนที่อธิบายการกระจายแฟลชไดรฟ์ USB ผ่านฮับเริ่มต้นที่ 2m10s วิดีโอคือการสาธิตเซิร์ฟเวอร์จัดเก็บข้อมูลของพวกเขา "Thumper" (X4500) และวิธีการกระจายดิสก์ข้ามตัวควบคุมดังนั้นหากคุณมีความล้มเหลวของตัวควบคุมฮาร์ดดิสก์ข้อมูลของคุณจะยังคงดี (โดยส่วนตัวแล้วฉันคิดว่านี่เป็นเพียงวิดีโอแห่งความสนุกสนานฉันหวังว่าฉันจะมีกล่อง Thumper ด้วยตัวเอง แต่ภรรยาของฉันไม่ต้องการให้ฉันใช้แม่แรงแท่นวางสินค้าผ่านบ้าน: D นั่นคือกล่องขนาดใหญ่หนึ่งกล่อง)

แก้ไข:ผมจำได้ comming ข้ามระบบแฟ้มกระจายเรียกว่าOpenAFS ฉันไม่ได้ลองเลยฉันได้อ่านเพียงแค่บางส่วนเท่านั้น บางทีคนอื่น ๆ รู้ว่ามันจัดการอย่างไรในโลกแห่งความเป็นจริง


4

ก่อนอื่นไฟล์บันทึกสามารถบีบอัดได้ในอัตราส่วนที่สูงมาก ฉันพบว่าไฟล์บันทึกของฉันบีบอัดในอัตราส่วน 10: 1 หากพวกเขาบีบอัดให้ได้อัตราส่วน 5: 1 นั่นเป็นเพียง 5GB หรือ 20% ของความจุของคุณ

เนื่องจากคุณมีพื้นที่เก็บข้อมูลมากพออัลกอริธึมการบีบอัดเฉพาะไม่สำคัญเกินไป คุณสามารถ ...

  • ใช้ไฟล์ zip หากผู้ใช้ Windows จะเข้าถึงไฟล์โดยตรง
  • ใช้ gzip หากพวกเขาจะเข้าถึงผ่าน Linux และการคลายการบีบอัดข้อมูลเป็นสิ่งสำคัญ
  • ใช้ bzip2 หากพวกเขาจะเข้าถึงผ่าน Linux และเป็นสิ่งสำคัญที่จะต้องมีไฟล์ที่เล็กที่สุด

คำถามที่ใหญ่กว่าคือคุณจะให้ผู้ใช้ของคุณเข้าถึงไฟล์เหล่านี้ได้อย่างไร ส่วนนี้ขึ้นอยู่กับการกำหนดค่าเครื่องของคุณ

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

หากคุณไม่สามารถสร้างไฟล์เซิร์ฟเวอร์เดียวสำหรับไฟล์เหล่านี้คุณอาจพบว่าคุณต้องการระบบไฟล์แบบกระจาย Windows มีระบบไฟล์แบบกระจาย (DFS) ซึ่งอาจเหมาะกับความต้องการของคุณ

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


FYI: Windows DFS เป็นวิธีที่จะทำให้ไฟล์ / โฟลเดอร์บนเซิร์ฟเวอร์หลายเครื่องตรงกัน ไม่อนุญาตให้คุณใช้ที่เก็บข้อมูลบนเซิร์ฟเวอร์หลาย ๆ ตัวเป็นไดรฟ์จัดเก็บข้อมูลเดียว microsoft.com/windowsserversystem/dfs/default.mspx
Scott McClenning

หลังจากคิดแล้วคุณก็พูดถูก DFS อาจใช้งานได้หากคุณมีจุดรูท DFS ไปยังโฟลเดอร์ที่อยู่บนเครื่องอื่น ด้วยวิธีนี้ผู้ใช้จะเห็นโครงสร้างไฟล์เดียวและไม่จำเป็นต้องรู้ว่าเครื่องใช้ข้อมูลใดอยู่ DFS จะรู้ ที่จะทำงาน โดยปกติเมื่อฉันมีคนถามฉันเกี่ยวกับ Windows DFS พวกเขามักจะคิดว่ามันเป็นวิธีการรวมพื้นที่เก็บข้อมูลเข้าด้วยกันและนั่นคือเหตุผลที่ฉันสรุป ขออภัยและสิทธิ์ของคุณที่สามารถใช้งานได้
Scott McClenning

2

lessfsเป็นระบบไฟล์ที่ซ้ำซ้อนการบีบอัด แม้ว่ามันจะไม่สามารถแก้ปัญหาทั้งหมดได้ แต่มันก็คุ้มค่าที่จะมองว่าเป็นแบ็กเอนด์


2

เอ็กซ์พอร์ตโฟลเดอร์เหล่านี้ผ่าน NFS

ติดตั้งบนเครื่องเดียวโดยที่ apache กำลังทำงาน (ภายใต้รูทเอกสาร) เป็นแผนผัง

ใช้ zip เพื่อบีบอัด - อัตราส่วนการบีบอัดที่ดีสามารถเปิด zip ได้จากทุก OS

รายการไฟล์ใน Apache - เพื่อให้ผู้ใช้งานเข้าถึงได้แบบอ่านอย่างเดียว (ไฟล์บันทึกไม่ควรถูกแก้ไข)


1
เห็นด้วยกับ nfs + httpd, ไม่เห็นด้วยกับรหัสไปรษณีย์ gzip โต้ตอบได้ดียิ่งขึ้นด้วย http
Tobu

+1 สำหรับความคิดเห็น gzip จาก @Tobu - ด้วยการกำหนดค่าที่ถูกต้อง Apache สามารถแสดงไฟล์ gzip'ed ไปยังเว็บเบราว์เซอร์ที่จะคลายการบีบอัดและแสดง ผู้ใช้ไม่จำเป็นต้องรู้เกี่ยวกับการบีบอัดข้อมูลด้วยซ้ำ
Christopher Cashell

0

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


0

@Ankur และ @Porch ฉันเห็นด้วยอย่างยิ่งกับความจำเป็นในการบีบอัดบันทึกเหล่านี้

@jet ฉันคิดว่ารูปแบบที่เรียบง่ายนั้นดีกว่า - ดังนั้น httpd สำหรับผู้ใช้จึงใกล้เคียงกับอุดมคติ และแบ็กเอนด์อาจเป็นใด ๆ

ความคิดเห็นของฉัน - แบ่งบันทึกเป็น 2 กลุ่ม - โฟลเดอร์ 'เก่า' และ 'ใหม่'

รวมไว้ในรูทเอกสารของ httpd ใช้การบีบอัดข้อมูลที่รัดกุมสำหรับไฟล์เก่า (ทั้งไฟล์ xz หรือ 7z ซึ่งเป็นที่นิยมสำหรับทุกระบบปฏิบัติการ) ด้วยพจนานุกรมขนาดใหญ่และขนาดบล็อกอาจเป็นไฟล์เอกสารถาวร

ใช้การบีบอัด fs สำหรับอันใหม่: lessfs (rw, การขจัดข้อมูลซ้ำซ้อน + วิธีบีบอัดแสง), fusecompress 0.9.x (rw, วิธีบีบอัดแสงถึงแรง), btrfs / zfs, สควอช (ro, วิธีบีบอัดเบาถึงแรง, ใช้ซ้ำ สำหรับบันทึกที่หมุนใหม่)

คุณสามารถเขียนบันทึกลงใน fs ที่ถูกบีบอัดได้อย่างโปร่งใส (fusecompress, lessfs, btrfs / zfs) จัดเตรียมการเข้าถึง R / o โดย httpd เพื่อบันทึกการเขียน พวกเขาจะโปร่งใสสำหรับผู้ใช้และแตกสำหรับพวกเขาโปร่งใส

คำเตือนเกี่ยวกับ fusecompress: 1) ใช้เพียง 0.9.x - มันเสถียร โคลนจากที่นี่https://github.com/hexxellor/fusecompress

รุ่นที่ใหม่กว่าอาจไม่รองรับ lzma อย่างดีหรือข้อมูลสูญหาย

2) ใช้เพียง 1 cpu core ในการบีบอัดไฟล์หนึ่งไฟล์ดังนั้นอาจช้า

บีบอัดแต่ละครั้งในโฟลเดอร์ 'ใหม่' เก่ากว่าบางครั้ง (หลายเดือน) และย้ายไปที่ 'เก่า'

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