Cachey ได้กลายเป็นโซลูชันแคชเฉพาะทางที่ออกแบบมาเพื่อเร่งความเร็วในการเข้าถึงระบบ object storage เช่น Amazon S3 แคชแบบ read-through นี้ผสมผสานหน่วยความจำและดิสก์เข้าด้วยกันเพื่อสร้างระบบไฮบริดที่มุ่งเป้าลดความหน่วงและต้นทุนสำหรับแอปพลิเคชันที่เข้าถึงข้อมูลเดิมจาก cloud storage บ่อยครั้ง
ระบบนี้ใช้แนวทางที่เป็นเอกลักษณ์ด้วยขนาดหน้าคงที่ 16 MiB โดยจับคู่ช่วงไบต์ที่ร้องขอใดๆ กับการค้นหาที่จัดตำแหน่งตามหน้า การออกแบบนี้ช่วยเพิ่มประสิทธิภาพของแคชในขณะที่รองรับ HTTP range requests มาตรฐานที่แอปพลิเคชันหลายตัวใช้สำหรับสตรีมมิ่งสื่อและการเข้าถึงไฟล์ขนาดใหญ่
ข้อมูลจำเพาะทางเทคนิคหลัก
- ขนาดหน้า: หน้าขนาดคงที่ 16 MiB สำหรับข้อมูลที่แคชทั้งหมด
- ประเภทแคช: ระบบจัดเก็บแบบผสมผสานระหว่างหน่วยความจำและดิสก์โดยใช้ไลบรารี foyer
- หน่วยความจำเริ่มต้น: 4 GiB (สามารถกำหนดค่าได้ด้วยหน่วยต่างๆ เช่น "512MiB", "2GB", "1.5GiB")
- การใช้งานดิสก์: สูงสุด 80% ของพื้นที่ที่มีอยู่ (หากไม่ได้ระบุไว้)
- Hedged Requests: เกณฑ์ latency เริ่มต้นที่เปอร์เซ็นไทล์ที่ 99
- API: HTTP แบบง่ายพร้อม Range headers ที่จำเป็น
- ขีดจำกัด Bucket: สูงสุด 2 buckets ที่พยายามต่อหน้าที่หายไป
- การรองรับ TLS: ใบรับรองที่ลงนามด้วยตนเองหรือคู่ cert/key แบบกำหนดเอง
ความท้าทายในการติดตั้งแบบหลายโซนกระตุ้นการอภิปราย
ชุมชนได้ตั้งคำถามสำคัญเกี่ยวกับความเหมาะสมของ Cachey สำหรับสภาพแวดล้อมการผลิตที่มีความพร้อมใช้งานสูงและหลายโซน ซึ่งแตกต่างจากการติดตั้งในโซนเดียวที่แคชสามารถให้ประโยชน์ที่ชัดเจน การตั้งค่าหลายโซนนำเสนอการแลกเปลี่ยนที่ซับซ้อนระหว่างความสอดคล้องของแคช ต้นทุนเครือข่ายข้ามโซน และประสิทธิภาพ
มันเป็นแคชแบบ read through ฝั่งผู้ใช้ ดังนั้นจึงไม่จำเป็นต้องมีความสอดคล้องของแคชเชิงป้องกัน แต่จะมีการลดประสิทธิภาพในการดึงข้อมูลภายใต้การแข่งขันในการเขียนโดยไม่คำนึงว่าคุณจะมีโซนเดียวหรือหลายโซน
นักพัฒนายอมรับข้อจำกัดนี้และปัจจุบันแนะนำการติดตั้งแยกตามโซนพร้อม auto-scaling ซึ่งหมายความว่าต้องยอมรับต้นทุนโครงสร้างพื้นฐานที่เพิ่มขึ้นหรือค่าใช้จ่ายเครือข่ายข้ามโซน แนวทางนี้ทำงานได้ดีสำหรับข้อมูลที่ไม่เปลี่ยนแปลง แต่อาจไม่เหมาะสำหรับทุกสถานการณ์ในองค์กร
ความเป็นไปได้ในการบูรณาการและกรณีการใช้งาน
สมาชิกในชุมชนได้เสนอแนะโอกาสการบูรณาการที่น่าสนใจ รวมถึง NBD (Network Block Device) frontends ที่สามารถเปลี่ยนออบเจกต์ที่แคชไว้ให้เป็นอุปกรณ์ Linux หรือพื้นที่จัดเก็บสำรองสำหรับเครื่องเสมือน สิ่งนี้จะขยายประโยชน์ของ Cachey นอกเหนือจากแอปพลิเคชันเว็บแบบดั้งเดิมไปสู่สถานการณ์โครงสร้างพื้นฐานและเสมือนจริง
แคชนี้ดูเหมือนจะมีประโยชน์มากที่สุดสำหรับ workloads ที่มีรูปแบบการเข้าถึงซ้ำๆ เช่น ฐานข้อมูลที่สร้างบน object storage หรือแอปพลิเคชันที่เสิร์ฟเนื้อหาเดียวกันหลายครั้ง อย่างไรก็ตาม แอปพลิเคชันที่ใช้การแคชในหน่วยความจำอยู่แล้วอาจต้องประเมินว่าความซับซ้อนเพิ่มเติมให้ประโยชน์เพียงพอเมื่อเทียบกับการเพิ่มขนาดแคชที่มีอยู่หรือไม่
ตัวเลือกการกำหนดค่า API
Header | จำเป็น | คำอธิบาย |
---|---|---|
Range |
ใช่ | ช่วงไบต์ในรูปแบบ bytes=(first)-(last) |
CO-Bucket |
ไม่ | บัคเก็ตที่มีออบเจ็กต์ (ลำดับความสำคัญ) |
CO-Config |
ไม่ | แทนที่การกำหนดค่าคำขอ S3 ด้วยคู่ที่คั่นด้วยช่องว่าง |
พารามิเตอร์ CO-Config:
ct=<ms>
- ไทม์เอาต์การเชื่อมต่อrt=<ms>
- ไทม์เอาต์การอ่าน (เวลาถึงไบต์แรก)ot=<ms>
- ไทม์เอาต์การดำเนินการ (ข้ามการลองใหม่)oat=<ms>
- ไทม์เอาต์การพยายามดำเนินการma=<num>
- จำนวนครั้งสูงสุดที่พยายามib=<ms>
- ระยะเวลา backoff เริ่มต้นmb=<ms>
- ระยะเวลา backoff สูงสุด
คุณสมบัติการเพิ่มประสิทธิภาพ
Cachey รวมคุณสมบัติขั้นสูงหลายอย่างเพื่อจัดการกับความหน่วงที่คาดเดาไม่ได้ซึ่งมักเกี่ยวข้องกับ object storage ระบบทำ hedged requests โดยส่งคำขอซ้ำหลังจากเกณฑ์ความหน่วงที่กำหนดเพื่อปรับปรุงเวลาตอบสนอง นอกจากนี้ยังสามารถพยายามส่งคำขอไปยัง buckets สำรองเพื่อให้มีตัวเลือกสำรองเมื่อพื้นที่จัดเก็บหลักช้าหรือไม่พร้อมใช้งาน
สถาปัตยกรรมไฮบริดระหว่างหน่วยความจำและดิสก์ที่ขับเคลื่อนโดยไลบรารี foyer caching ช่วยให้จัดการความจุได้อย่างยืดหยุ่น ผู้ใช้สามารถกำหนดค่าทั้งขีดจำกัดหน่วยความจำและเส้นทางพื้นที่จัดเก็บดิสก์ โดยระบบจะใช้พื้นที่ดิสก์ที่มีอยู่ได้ถึง 80% โดยอัตโนมัติหากไม่ได้ระบุไว้เป็นอย่างอื่น
แม้ว่า Cachey จะแสดงให้เห็นถึงความสดใสสำหรับกรณีการใช้งานเฉพาะที่เกี่ยวข้องกับ immutable blob storage แต่สถาปัตยกรรมปัจจุบันทำงานได้ดีที่สุดในการติดตั้งโซนเดียวหรือสถานการณ์ที่ต้นทุนของเครือข่ายข้ามโซนยอมรับได้ องค์กรที่พิจารณาการนำไปใช้ควรประเมินรูปแบบการเข้าถึงและความต้องการโครงสร้างพื้นฐานของตนอย่างรอบคอบเทียบกับการแลกเปลี่ยนเหล่านี้
อ้างอิง: Cachey