บอกว่าผมติดบางส่วนการจัดเก็บเมฆ (Amazon Cloud ไดรฟ์ในกรณีของฉัน) /mnt/cloudกับลูกค้าที่ แต่เนื่องจากการอ่านและเขียนไฟล์โดยตรง/mnt/cloudนั้นช้าเพราะต้องผ่านอินเทอร์เน็ตฉันต้องการแคชไฟล์ที่ฉันกำลังอ่านและเขียนไปยังที่เก็บข้อมูลบนคลาวด์ เนื่องจากฉันอาจจะเขียนข้อมูลจำนวนมากในแต่ละครั้งแคชจึงควรอยู่บนดิสก์ของฉันไม่ใช่ใน RAM แต่ฉันไม่ต้องการจำลองที่เก็บข้อมูลคลาวด์ทั้งหมดบนดิสก์ของฉันเพราะดิสก์ของฉันอาจเล็กเกินไป
ดังนั้นฉันต้องการให้มีมุมมองแคชในการ/mnt/cloudติดตั้งที่/mnt/cloud_cacheใช้เส้นทางอื่นพูด/var/cache/cloudเป็นตำแหน่งแคช
ถ้าฉันอ่านตอนนี้/mnt/cloud_cache/fileฉันต้องการสิ่งต่อไปนี้เกิดขึ้น:
ตรวจสอบว่ามีการใช้แคชที่file/var/cache/cloud/file
- หากเก็บไว้: ตรวจสอบfileในแคชขึ้นไปวันโดยเรียก modtime และ //mnt/cloudหรือการตรวจสอบจาก หากเป็นปัจจุบันให้บริการไฟล์จากแคชมิฉะนั้นไปที่ 2
- หากไม่มีแคชหรือแคชล้าสมัย/mnt/cloud/fileให้คัดลอกไปยัง/var/cache/cloud/fileและให้บริการจากแคช
เมื่อฉันเขียนถึง/mnt/cloud_cache/fileฉันต้องการสิ่งนี้เกิดขึ้น:
- เขียน/var/cache/cloud/fileและบันทึกลงในบันทึกประจำวันที่fileจำเป็นต้องเขียนกลับไป/mnt/cloud
- รอการเขียนที่/var/cache/cloud/fileจะทำและ / หรือการเขียนก่อนหน้ากลับไป/mnt/cloudที่จะแล้วเสร็จ
- คัดลอก/var/cache/cloud/fileไปยัง/mnt/cloud
ฉันมีข้อกำหนดและข้อ จำกัด ดังต่อไปนี้:
- ฟรีและโอเพ่นซอร์ส
- ความสามารถในการตั้งค่าแคชตำแหน่งแคชโดยพลการ
- ความสามารถในการแคชตำแหน่งโดยพลการ (อาจเป็นจุดเชื่อมต่อแบบ FUSE บางจุด)
- การแคชโปร่งใสคือการใช้/mnt/cloud_cacheกลไกการแคชโปร่งใสและทำงานเหมือนกับระบบไฟล์อื่น ๆ
- การเก็บบันทึกสิ่งที่ต้องเขียนกลับไป (แคชอาจได้รับข้อมูลจำนวนมากที่ต้องถูกเขียนกลับไปยังที่เก็บข้อมูลดั้งเดิมในช่วงเวลาหลายวัน)
- การลบไฟล์แคชที่ถูกเขียนโดยอัตโนมัติหรือไม่สามารถเข้าถึงได้ในระยะเวลาหนึ่ง
- ความสอดคล้อง (เช่นสะท้อนถึงการเปลี่ยนแปลงภายนอก/mnt/cloud) ไม่สำคัญอย่างยิ่งเพราะฉันอาจมีลูกค้าเพียงรายเดียวที่เข้าถึงได้/mnt/cloudในแต่ละครั้ง แต่มันก็ดีถ้ามี
ฉันใช้เวลาพอสมควรในการค้นหาวิธีแก้ไขปัญหาที่มีอยู่แล้ว แต่ไม่พบสิ่งที่น่าพอใจ
- FS-แคชและ CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt ) ดูเหมือนว่าจะทำงานเฉพาะกับnfsหรือafsระบบไฟล์และผมไม่ทราบวิธีการที่จะทำให้มันแคชไฟล์ FUSE อื่น ระบบหรือไดเรกทอรีทั่วไป
- bcache ( https://bcache.evilpiepirate.org/ ) ดูเหมือนว่าจะทำงานกับอุปกรณ์บล็อกเท่านั้นนั่นคือไม่สามารถแคชระบบไฟล์ FUSE อื่นได้
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) ฉันคิดว่านี่เป็นสิ่งที่ฉันต้องการ แต่มันรวมเข้ากับ Google Cloud Storage เพื่อให้ใช้งานได้โดยทั่วไปฉันจะต้องแฮ็คและเปลี่ยนการเข้าถึง GCS เป็นการเข้าถึงไฟล์ในเครื่องในจุดเมานท์ที่กำหนดหรือการเข้าถึง Amazon Cloud Drive