ลดการสำรองข้อมูลลง 99.5% ด้วย hashget

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

นี่คือบทความภาพรวมเพื่ออธิบายคุณสมบัติต่างๆ การใช้งานจริงของแฮชเก็ต (ค่อนข้างง่าย) มีอธิบายไว้ใน README โครงการและ เอกสารวิกิ.

การเปรียบเทียบ

ตามกฎของประเภทฉันจะเริ่มต้นด้วยการวางอุบายทันที - เปรียบเทียบผลลัพธ์:

ตัวอย่างข้อมูล
ขนาดที่ยังไม่ได้บรรจุ
.tar.gz
hashget.tar.gz

เวิร์ดเพรส-5.1.1
43 Mb
11 เมกะไบต์ (26%)
155 กิโลไบต์ ( ลด 0.3% )

Linux kernel 5.0.4
934 Mb
161 เมกะไบต์ (20%)
4.7 เมกะไบต์ ( ลด 0.5% )

Debian 9 (โคมไฟ) LXC VM
724 Mb
165 เมกะไบต์ (23%)
4.1 เมกะไบต์ ( ลด 0.5% )

ความเป็นมาว่าการสำรองข้อมูลในอุดมคติและมีประสิทธิภาพควรเป็นอย่างไร

ทุกครั้งที่ฉันสำรองข้อมูลของเครื่องเสมือนที่สร้างขึ้นใหม่ ฉันจะถูกหลอกหลอนด้วยความรู้สึกว่าฉันกำลังทำอะไรผิด เหตุใดฉันจึงได้รับข้อมูลสำรองจำนวนมากจากระบบ โดยที่ความคิดสร้างสรรค์อันล้ำค่าและไม่มีวันเสื่อมสลายของฉันคือไฟล์ index.html บรรทัดเดียวพร้อมข้อความ "Hello world"

เหตุใดจึงมี 16 MB /usr/sbin/mysqld ในการสำรองข้อมูลของฉัน เป็นไปได้จริงหรือที่ในโลกนี้ฉันได้รับเกียรติให้เก็บไฟล์สำคัญนี้ไว้ และหากฉันทำล้มเหลว มันจะสูญหายไปจากมวลมนุษยชาติ? เป็นไปได้มากว่าไม่มี มันถูกจัดเก็บไว้ในเซิร์ฟเวอร์ debian ที่มีความน่าเชื่อถือสูง (ความน่าเชื่อถือและสถานะการออนไลน์ซึ่งไม่สามารถเทียบได้กับสิ่งที่ฉันสามารถให้ได้) รวมถึงในการสำรองข้อมูล (หลายล้านรายการ) ของผู้ดูแลระบบรายอื่น เราจำเป็นต้องสร้างสำเนาแรกของไฟล์สำคัญนี้มากกว่า 10+ ชุดเพื่อปรับปรุงความน่าเชื่อถือหรือไม่

โดยทั่วไป แฮชเก็ต และแก้ไขปัญหานี้ เมื่อแพ็กแล้วจะสร้างการสำรองข้อมูลขนาดเล็กมาก เมื่อแกะกล่อง - ระบบที่แกะกล่องออกอย่างสมบูรณ์คล้ายกับสิ่งที่จะเกิดขึ้น tar -c / tar -x. (กล่าวอีกนัยหนึ่ง นี่คือบรรจุภัณฑ์ที่ไม่มีการสูญเสีย)

แฮชเก็ตทำงานอย่างไร

hashget มีแนวคิดของ Package และ HashPackage โดยช่วยในการขจัดข้อมูลซ้ำซ้อน

แพ็คเกจ (ถุงพลาสติก). ไฟล์ (โดยปกติจะเป็นไฟล์เก็บถาวร .deb หรือ .tar.gz) ที่สามารถดาวน์โหลดได้อย่างปลอดภัยจากอินเทอร์เน็ต และสามารถรับไฟล์ได้ตั้งแต่หนึ่งไฟล์ขึ้นไป

แพ็คเกจแฮช — ไฟล์ JSON ขนาดเล็กที่แสดงถึงแพ็คเกจ รวมถึง URL แพ็คเกจและผลรวมแฮช (sha256) ของไฟล์จากแพ็คเกจ ตัวอย่างเช่น สำหรับแพ็คเกจ mariadb-server-core ขนาด 5 เมกะไบต์ ขนาดแฮชแพ็คเกจคือเพียง 6 กิโลไบต์ น้อยกว่าประมาณพันเท่า

การขจัดข้อมูลซ้ำซ้อน — การสร้างไฟล์เก็บถาวรโดยไม่มีไฟล์ที่ซ้ำกัน (หากผู้ขจัดข้อมูลซ้ำซ้อนรู้ว่าสามารถดาวน์โหลดแพ็คเกจดั้งเดิมได้ที่ไหน ก็จะลดจำนวนไฟล์ที่ซ้ำกันจากไฟล์เก็บถาวร)

บรรจุภัณฑ์

เมื่อทำการบรรจุ ไฟล์ทั้งหมดจากไดเร็กทอรีที่กำลังบรรจุจะถูกสแกน ผลรวมแฮชของไฟล์นั้นจะถูกคำนวณ และหากพบผลรวมใน HashPackages ที่รู้จัก ข้อมูลเมตาเกี่ยวกับไฟล์ (ชื่อ แฮช สิทธิ์การเข้าถึง ฯลฯ) จะถูกบันทึก ในไฟล์พิเศษ .hashget-restore.json ซึ่งจะรวมอยู่ในไฟล์เก็บถาวรด้วย

ในกรณีที่ง่ายที่สุด ตัวบรรจุภัณฑ์เองก็ดูไม่ซับซ้อนไปกว่าน้ำมันดิน:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

กำลังแกะกล่อง

การแกะกล่องจะดำเนินการในสองขั้นตอน ขั้นแรกให้นำน้ำมันดินออกตามปกติ:

tar -xf mybackup.tar.gz -C /path/to/data

จากนั้นกู้คืนจากเครือข่าย:

hashget -u /path/to/data

เมื่อทำการกู้คืน hashget จะอ่านไฟล์ .hashget-restore.json ดาวน์โหลดแพ็คเกจที่จำเป็น แตกไฟล์ และแตกไฟล์ที่จำเป็น ติดตั้งในพาธที่ต้องการ โดยมีเจ้าของ/กลุ่ม/สิทธิ์ที่จำเป็น

เรื่องที่ยากขึ้น

สิ่งที่อธิบายไว้ข้างต้นก็เพียงพอแล้วสำหรับผู้ที่ต้องการ "ต้องการเหมือน tar แต่แพ็ค Debian ของฉันเป็น 4 เมกะไบต์" เรามาดูสิ่งที่ซับซ้อนมากขึ้นในภายหลัง

การจัดทำดัชนี

หากแฮชเก็ตไม่มี HashPackage เลย ก็จะไม่สามารถขจัดข้อมูลซ้ำซ้อนใดๆ ได้

คุณสามารถสร้าง HashPackage ด้วยตนเองได้ (เพียง: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my) แต่มีวิธีที่สะดวกกว่า

เพื่อให้ได้แฮชแพ็คเกจที่จำเป็น จึงมีขั้นตอนหนึ่ง การจัดทำดัชนี (มันจะถูกดำเนินการโดยอัตโนมัติด้วยคำสั่ง --pack) และ ฮิวริสติกส์. เมื่อทำการจัดทำดัชนี แฮชเก็ตจะ “ดึงข้อมูล” แต่ละไฟล์ที่พบจากการวิเคราะห์พฤติกรรมที่มีอยู่ทั้งหมดที่สนใจ การวิเคราะห์พฤติกรรมสามารถจัดทำดัชนีแพ็คเกจใด ๆ เพื่อสร้าง HashPackage

ตัวอย่างเช่น ฮิวริสติกของ Debian ชอบไฟล์ /var/lib/dpkg/status และตรวจพบแพ็คเกจเดเบียนที่ติดตั้ง และหากไม่ได้รับการจัดทำดัชนี (ไม่มี HashPackage สร้างขึ้นสำหรับแพ็คเกจเหล่านั้น) ให้ดาวน์โหลดและจัดทำดัชนีแพ็คเกจเหล่านั้น ผลลัพธ์ที่ได้คือเอฟเฟกต์ที่ดีมาก - แฮชเก็ตจะขจัด Debian OSes ที่ซ้ำกันอย่างมีประสิทธิภาพเสมอ แม้ว่าจะมีแพ็คเกจล่าสุดก็ตาม

ไฟล์คำแนะนำ

หากเครือข่ายของคุณใช้แพ็คเกจที่เป็นกรรมสิทธิ์ของคุณหรือแพ็คเกจสาธารณะที่ไม่รวมอยู่ในการวิเคราะห์พฤติกรรมแฮชเก็ต คุณสามารถเพิ่มไฟล์คำใบ้ hashget-hint.json แบบธรรมดาเข้าไปได้ดังนี้:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

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

หากแพ็คเกจของคุณบางส่วนได้รับการอัปเดตเป็นระยะ แต่การเปลี่ยนแปลงไม่ใหญ่มาก คุณสามารถบอกเป็นนัยได้เฉพาะเวอร์ชันหลักเท่านั้น ตัวอย่างเช่น ในเวอร์ชัน 1.0 พวกเขาสร้างคำใบ้ที่ชี้ไปที่ mypackage-1.0.tar.gz และมันจะถูกขจัดข้อมูลซ้ำซ้อนโดยสิ้นเชิง จากนั้นจึงออกเวอร์ชัน 1.1 ซึ่งแตกต่างออกไปเล็กน้อย แต่คำใบ้ไม่ได้รับการอัปเดต ไม่เป็นไร. เฉพาะไฟล์ที่ตรงกัน (สามารถกู้คืนได้) เวอร์ชัน 1.0 เท่านั้นที่จะถูกขจัดข้อมูลซ้ำซ้อน

การวิเคราะห์พฤติกรรมที่ประมวลผลไฟล์คำใบ้เป็นตัวอย่างที่ดีในการทำความเข้าใจกลไกภายในของวิธีการทำงานของการวิเคราะห์พฤติกรรม โดยจะประมวลผลเฉพาะไฟล์ hashget-hint.json (หรือ .hashget-hint.json ที่มีจุด) และไม่สนใจไฟล์อื่นๆ ทั้งหมด จากไฟล์นี้ จะกำหนดว่า URL แพ็กเกจใดที่ควรจัดทำดัชนี และแฮชเก็ตจะจัดทำดัชนี (หากยังไม่ได้ดำเนินการ)

แฮชเซิร์ฟเวอร์

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

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

การสำรองข้อมูลส่วนเพิ่มและส่วนต่าง แผนล้าสมัย

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

แต่นี่ไม่ใช่แนวทางที่ดีนัก เนื่องจากอาจกลายเป็นว่าเมื่อทำการกู้คืน เราจะต้องดึงข้อมูลสำรองแฮชเก็ตทั้งหมดในประวัติศาสตร์ทั้งหมด (หากแต่ละไฟล์มีไฟล์ที่ไม่ซ้ำกันอย่างน้อยหนึ่งไฟล์) มีกลไกสำหรับสิ่งนี้ การสำรองข้อมูลที่ล้าสมัยตามแผน. เมื่อจัดทำดัชนี คุณสามารถระบุวันหมดอายุของ HashPackage ได้ --expires 2019-06-01และหลังจากวันที่นี้ (ตั้งแต่ 00:00 น.) จะไม่สามารถใช้งานได้ ไม่สามารถลบไฟล์เก็บถาวรได้หลังจากวันที่นี้ (แม้ว่าแฮชเก็ตจะสามารถแสดง URL ของข้อมูลสำรองทั้งหมดที่/จะเน่าเสียในขณะนั้นหรือวันใดก็ตามได้อย่างสะดวกก็ตาม)

ตัวอย่างเช่น หากเราทำการสำรองข้อมูลเต็มรูปแบบในวันที่ 1 และจัดทำดัชนีด้วยอายุการใช้งานจนถึงสิ้นเดือน เราก็จะได้รับแผนการสำรองข้อมูลส่วนต่าง

หากเราจัดทำดัชนีการสำรองข้อมูลใหม่ในลักษณะเดียวกัน จะมีรูปแบบของการสำรองข้อมูลส่วนเพิ่ม

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

หากด้วยเหตุผลบางอย่างเราไม่ไว้วางใจความน่าเชื่อถือของทรัพยากร Debian (https://snapshot.debian.org/) หรือใช้การแจกจ่ายอื่น เราก็สามารถทำการสำรองข้อมูลทั้งหมดครั้งเดียวกับแพ็คเกจทั้งหมด จากนั้นจึงไว้วางใจ (โดยการปิดการใช้งานฮิวริสติก). ตอนนี้ หากเซิร์ฟเวอร์ทั้งหมดของการกระจายของเราไม่พร้อมใช้งานสำหรับเรา (บนอินเทอร์เน็ตของที่ระลึกหรือระหว่างการเปิดเผยของซอมบี้) แต่การสำรองข้อมูลของเราเป็นไปตามลำดับ เราสามารถกู้คืนจากการสำรองข้อมูลแบบต่างระยะสั้นที่อาศัยเฉพาะการสำรองข้อมูลก่อนหน้านี้ของเราเท่านั้น .

Hashget อาศัยแหล่งการกู้คืนที่เชื่อถือได้เท่านั้นตามดุลยพินิจของคุณ สิ่งที่คุณคิดว่าเชื่อถือได้จะถูกใช้

FilePool และกลาเซียร์

กลไก ไฟล์พูล ช่วยให้คุณไม่ต้องติดต่อกับเซิร์ฟเวอร์ภายนอกอย่างต่อเนื่องเพื่อดาวน์โหลดแพ็คเกจ แต่ใช้แพ็คเกจจากไดเร็กทอรีในเครื่องหรือเซิร์ฟเวอร์องค์กร เช่น:

$ hashget -u . --pool /tmp/pool

หรือ

$ hashget -u . --pool http://myhashdb.example.com/

หากต้องการสร้างพูลในไดเร็กทอรีในเครื่อง คุณเพียงแค่ต้องสร้างไดเร็กทอรีแล้วโยนไฟล์ลงไป แฮชเก็ตจะค้นหาสิ่งที่ต้องการโดยใช้แฮช หากต้องการให้พูลเข้าถึงได้ผ่าน HTTP คุณต้องสร้างลิงก์สัญลักษณ์ด้วยวิธีพิเศษ ซึ่งทำได้ด้วยคำสั่งเดียว (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool นั้นเป็นไฟล์คงที่ ดังนั้นเว็บเซิร์ฟเวอร์ธรรมดาๆ จึงสามารถให้บริการได้ โหลดบนเซิร์ฟเวอร์เกือบเป็นศูนย์

ต้องขอบคุณ FilePool ที่ไม่เพียงแต่คุณสามารถใช้ทรัพยากร http เป็นทรัพยากรพื้นฐานได้ แต่ยังรวมถึง เช่น,อเมซอนกลาเซียร์

หลังจากอัปโหลดข้อมูลสำรองไปยังธารน้ำแข็งแล้ว เราจะได้รับรหัสการอัปโหลดและใช้เป็น URL ตัวอย่างเช่น:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

ขณะนี้การสำรองข้อมูลใหม่ (ส่วนต่าง) จะขึ้นอยู่กับการสำรองข้อมูลนี้และจะสั้นลง หลังจากที่ tar คลายการสำรองข้อมูล diffbackup แล้ว เราจะสามารถดูได้ว่าทรัพยากรใดบ้างที่ต้องใช้:

hashget --info /tmp/unpacked/ list

และเพียงใช้เชลล์สคริปต์เพื่อดาวน์โหลดไฟล์เหล่านี้ทั้งหมดจาก Glacier ไปยังพูลและรันการกู้คืนตามปกติ: hashget -u /tmp/unpacked —pool /tmp/pool

เกมนี้คุ้มค่ากับเทียนหรือไม่?

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

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

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

จะลองและเริ่มใช้งานได้อย่างไร?

ไปที่หน้า gitlab https://gitlab.com/yaroslaff/hashgetให้ติดตั้งด้วยคำสั่งเดียว (pip3 install hashget[plugins]) และเพียงแค่อ่านและดำเนินการเริ่มต้นอย่างรวดเร็ว ฉันคิดว่าจะใช้เวลา 10-15 นาทีในการทำสิ่งง่ายๆ ทั้งหมด จากนั้นคุณสามารถลองบีบอัดเครื่องเสมือนของคุณ สร้างไฟล์คำแนะนำหากจำเป็นเพื่อทำให้การบีบอัดแข็งแกร่งขึ้น เล่นกับพูล ฐานข้อมูลแฮชในเครื่องและเซิร์ฟเวอร์แฮชหากคุณสนใจ และในวันถัดไปดูว่าการสำรองข้อมูลส่วนเพิ่มมีขนาดเท่าใด จะอยู่เหนือเมื่อวาน

ที่มา: will.com

เพิ่มความคิดเห็น