21 คะแนน โดย xguru 2024-04-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เหตุผลที่สร้าง

  • ในบรรดาไลบรารีแคชของ Go ยังไม่มีตัวไหนที่เป็น contention-free อย่างแท้จริง ส่วนใหญ่เป็นเพียงแมปที่มี mutex และนโยบายการไล่ออก
  • ทำให้ความเร็วตามไม่ทันแคชในภาษาอื่น ๆ (เช่น Caffeine)
  • Ristretto ซึ่งเป็นแคชที่เร็วที่สุดของ Dgraph labs เร็วกว่าคู่แข่งได้สูงสุด 30% (แต่ Otter เร็วกว่ามาก) ทว่า Hit ratio ไม่ดีนัก
  • ในแอปพลิเคชันจริง เรื่องนี้อาจเป็นปัญหาได้ เพราะเราไม่อยากให้ชนเพดานด้านประสิทธิภาพของไลบรารีแคช
  • ผลลัพธ์คือจึงอยากสร้างแคชที่เร็วที่สุดและใช้งานง่ายที่สุด

คุณสมบัติหลัก

  • API ที่เรียบง่าย: ตั้งค่าพารามิเตอร์ที่ต้องการใน Builder แล้วใช้งานได้เลย
  • การตั้งค่าอัตโนมัติ: กำหนดค่าอัตโนมัติตามความสามารถด้านการประมวลผลแบบขนานของแอปพลิเคชัน
  • Generics: ใช้ชนิดข้อมูลใด ๆ ที่เปรียบเทียบได้อย่างปลอดภัยเป็นคีย์ได้ และใช้ชนิดข้อมูลใด ๆ เป็นค่าได้
  • TTL: ค่าที่หมดอายุจะถูกลบออกจากแคชโดยอัตโนมัติ
  • การไล่ออกตามต้นทุน: รองรับการไล่ออกโดยอิงจากต้นทุนของแต่ละรายการ
  • Throughput ยอดเยี่ยม: เป็นไลบรารีแคชที่เร็วที่สุดในตอนนี้ โดยทิ้งห่างคู่แข่งรายอื่นอย่างชัดเจน (Theine, Ristretto, Bigcache, Fastcache)
  • Hit ratio ยอดเยี่ยม: ใช้อัลกอริทึม S3-FIFO ใหม่ที่แสดงผลลัพธ์ได้ดีเยี่ยม

1 ความคิดเห็น

 
xguru 2024-04-10

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

ความเห็นวิเคราะห์จาก AI ก็น่าสนใจดี เลยขอเพิ่มไว้ด้วยครับ

ความเห็นของ GN⁺

  • ไลบรารีแคชโอเพนซอร์สนี้น่าจะมีประโยชน์มากสำหรับนักพัฒนา Go โดยเฉพาะในบริการที่ต้องการประสิทธิภาพสูง เพราะอาจเป็นทางเลือกที่ช่วยก้าวข้ามข้อจำกัดด้านประสิทธิภาพของไลบรารีแคชเดิม ๆ ได้
  • น่าประทับใจที่นำอัลกอริทึมจากงานวิจัยมาปรับใช้จนได้ประสิทธิภาพที่แข่งขันได้เมื่อเทียบกับไลบรารีเดิม ๆ อย่างไรก็ตามก่อนนำไปใช้จริง ก็ควรทดสอบประสิทธิภาพผ่านเบนช์มาร์กหลายรูปแบบก่อน
  • ใช้งานได้ง่ายด้วย API ที่เรียบง่าย และยังรองรับ generics ของ Go เวอร์ชันใหม่ ๆ ด้วย จึงดูเป็นมิตรต่อการพัฒนาไม่น้อย
  • ไลบรารีแคช Go ที่คล้ายกันก็มีทั้ง groupcache, fastcache, ristretto, freecache เป็นต้น น่าจะต้องเปรียบเทียบทั้งคุณลักษณะด้านประสิทธิภาพและความสะดวกในการใช้งานให้ดี
  • น่าจะเหมาะกับบริการที่ต้องรับทราฟฟิกปริมาณมาก มากกว่าบริการส่วนตัวหรือขนาดเล็ก ควรคิดให้รอบคอบว่าจะกำหนดขนาดแคชเท่าไร และจะตั้งรอบการ eviction แค่ไหน นอกจากนี้หากพึ่งพาแคชมากเกินไป ก็อาจเกิดปัญหาด้านความสอดคล้องของข้อมูลได้ จึงต้องระวังด้วย