เทคโนโลยี Remote Cache Storage ใหม่ของ Microsoft Research 'Garnet'
(github.com/microsoft)-
แนะนำ Garnet
- Garnet ซึ่งเป็น remote cache store ใหม่ที่พัฒนาโดย Microsoft Research มอบข้อดีที่โดดเด่นหลายประการ
- โดยอิงจากโปรโตคอลแบบ wire ของ RESP ที่ได้รับความนิยม จึงสามารถใช้ Redis client ที่มีอยู่ในภาษาโปรแกรมส่วนใหญ่ได้โดยไม่ต้องแก้ไข
- ให้ throughput และ scalability ที่ดีกว่าสำหรับการเชื่อมต่อไคลเอนต์จำนวนมากและงานแบบ batch ขนาดเล็ก ช่วยลดต้นทุนสำหรับแอปและบริการขนาดใหญ่
- ทำเวลาแฝงฝั่งไคลเอนต์ให้ต่ำมากได้ (ต่ำกว่า 300 ไมโครวินาทีที่ระดับ 99.9%) โดยใช้ Azure cloud VM ที่เปิดใช้ accelerated TCP
- Garnet ซึ่งสร้างขึ้นบนเทคโนโลยี .NET รุ่นใหม่ล่าสุด รองรับการทำงานข้ามแพลตฟอร์ม ขยายต่อได้ และมีการออกแบบที่ทันสมัย
- ใช้ประโยชน์จากระบบนิเวศไลบรารีอันหลากหลายของ .NET เพื่อขยายขอบเขต API และเปิดโอกาสกว้างสำหรับการทำ optimization
-
สรุปความสามารถ
- Garnet รองรับ API ที่หลากหลาย รวมถึงการทำงานกับ raw string, analytical และ object operations
- สามารถจัดการ multi-key transaction ได้ผ่าน RESP transaction ฝั่งไคลเอนต์ และ stored procedure ฝั่งเซิร์ฟเวอร์ที่เขียนด้วย C#
- ผู้ใช้สามารถนิยาม operation แบบกำหนดเองสำหรับ raw string และ object type ใหม่ได้ โดยใช้ประโยชน์จากความสะดวกและความปลอดภัยของ C#
-
ตัวอย่างประสิทธิภาพเบื้องต้น
- เว็บไซต์ได้แสดงผลลัพธ์สำคัญบางส่วนจากการเปรียบเทียบ Garnet กับ cache store โอเพนซอร์สหลัก
-
จุดเด่นด้านการออกแบบ
- การออกแบบของ Garnet ทบทวนใหม่ทั้งสแตกของ cache store ตั้งแต่การรับ packet จากเครือข่าย การ parse และประมวลผลงานของฐานข้อมูล ไปจนถึงการโต้ตอบกับ storage
- เลเยอร์เครือข่ายของ Garnet สืบทอดการออกแบบแบบ shared memory ที่ได้แรงบันดาลใจจากงานวิจัยก่อนหน้านี้อย่าง ShadowFax
- การออกแบบ storage ของ Garnet ประกอบด้วย Tsavorite key-value store สองชุด ซึ่งกำหนดโดย unified operation log
-
โหมดคลัสเตอร์
- นอกจากการทำงานแบบ single-node แล้ว Garnet ยังรองรับโหมดคลัสเตอร์ที่สามารถสร้างและจัดการ deployment แบบ sharding และ replication ได้
- คลัสเตอร์ยังอยู่ระหว่างการพัฒนา
-
ขั้นตอนถัดไป
- สามารถไปที่เว็บไซต์เอกสาร หรือไปยังส่วนเริ่มต้นใช้งานหรือส่วน release ได้โดยตรง
-
ไลเซนส์
- โครงการนี้อยู่ภายใต้ไลเซนส์ MIT และสามารถดูรายละเอียดได้ในไฟล์ LICENSE
-
ความเป็นส่วนตัว
- ข้อมูลเกี่ยวกับความเป็นส่วนตัวสามารถดูได้จากเว็บไซต์ความเป็นส่วนตัวของ Microsoft
-
การมีส่วนร่วม
- โครงการนี้ยินดีรับการมีส่วนร่วมและข้อเสนอแนะ โดยการมีส่วนร่วมส่วนใหญ่จำเป็นต้องยอมรับ CLA
- โครงการนี้ใช้ Microsoft Open Source Code of Conduct และสามารถดู Code of Conduct FAQ หรือส่งคำถามและข้อคิดเห็นเพิ่มเติมได้ที่ opencode@microsoft.com
-
เครื่องหมายการค้า
- โครงการนี้อาจมีเครื่องหมายการค้าหรือโลโก้ของโครงการ ผลิตภัณฑ์ หรือบริการ และการใช้งานเครื่องหมายการค้าหรือโลโก้ของ Microsoft ต้องเป็นไปตามแนวทางด้านเครื่องหมายการค้าและแบรนด์ของ Microsoft
ความเห็นของ GN⁺
- Garnet เป็น cache store แบบใหม่ที่เข้ากันได้กับ Redis client เดิม พร้อมให้ประสิทธิภาพและ scalability ที่สูงกว่า จึงอาจน่าสนใจสำหรับองค์กรที่ให้บริการคลาวด์ขนาดใหญ่
- ยังจำเป็นต้องมีข้อมูลระยะยาวเพื่อประเมินว่าเทคโนโลยีนี้ทำงานได้เสถียรเพียงใดในสภาพแวดล้อมจริง และมีข้อได้เปรียบเชิงปฏิบัติอะไรบ้างเมื่อเทียบกับโซลูชันแคชเดิม
- การที่โหมดคลัสเตอร์ของ Garnet ยังอยู่ระหว่างพัฒนา อาจเป็นปัจจัยสำคัญที่ผู้ใช้ซึ่งกำลังพิจารณาการ deploy ขนาดใหญ่ต้องคำนึงถึง
- เนื่องจาก Garnet เปิดให้ใช้งานแบบโอเพนซอร์ส จึงมีโอกาสที่ชุมชนจะช่วยเพิ่มฟีเจอร์และการปรับปรุงต่างๆ ซึ่งอาจช่วยยกระดับความสมบูรณ์ของเทคโนโลยีนี้
- ก่อนนำ Garnet มาใช้ ควรพิจารณาความเข้ากันได้กับระบบเดิม ต้นทุนเมื่อเทียบกับประสิทธิภาพที่ดีขึ้น และต้นทุนการย้ายระบบที่อาจเกิดขึ้น
1 ความคิดเห็น
ความเห็นจาก Hacker News
ตามกราฟประสิทธิภาพจากเบนช์มาร์ก ปริมาณงานของคำสั่ง GET ของ Garnet สูงกว่า Dragonfly มากกว่า 10 เท่า ค่า latency ที่เปอร์เซ็นไทล์ 50 สูงกว่า Dragonfly เล็กน้อย แต่ค่า latency ที่เปอร์เซ็นไทล์ 99 ต่ำกว่า Dragonfly เล็กน้อย ทั้งปริมาณงานและ latency ของ Garnet กับ Dragonfly ดีกว่า Redis อย่างชัดเจน ซึ่งบ่งชี้ว่า Redis ต้องการการปรับแต่งประสิทธิภาพอย่างมาก
เป็นข่าวดีมากสำหรับคนที่ต้องรัน Redis โดยตรงบน Microsoft Windows Server โดยไม่ต้องพึ่ง WSL2 (หรือระบบที่เข้ากันได้กับ Redis) ก่อนหน้านี้เคยมีพอร์ตของ Redis ที่ตอนนี้เลิกซัพพอร์ตไปแล้ว พร้อมปัญหาการใช้หน่วยความจำด้วย (คาดว่าส่วนใหญ่เกิดจาก memory-mapped file)
เป็นตัวแทน Redis ที่น่าประทับใจเมื่อไปรันบนสแตกจริงที่ไม่ใช่ Azure อยากรู้ว่าในโลกจริงจะเป็นอย่างไร
น่าสนใจที่ได้เห็น Microsoft และทีม .NET สร้างโปรเจกต์โครงสร้างพื้นฐานที่น่าประทับใจมาก Yarp ทำด้าน reverse proxy/API gateway และตอนนี้ก็มี Garnet สำหรับ memory cache แล้ว
เพราะ Garnet เป็นแบบ multithreaded ทำให้
MSETไม่เป็น atomic ถ้าต้องการMSETเวอร์ชันที่เป็น atomic จะต้องเขียนให้อยู่ในรูป transaction (stored procedure)ดูจากคอมเมนต์ที่นี่ เหมือนตอนนี้ไม่มีใครใช้ memcached กันแล้วหรือ?
บางครั้ง Microsoft Research ก็ปล่อยโปรเจกต์ที่น่าประทับใจออกมา ทำงาน R&D แล้วได้เงินเดือนคงสนุกดี อยากเห็นบริษัทใหญ่ทำโปรเจกต์สไตล์ R&D ที่เป็นประโยชน์ต่อทั้งวงการมากกว่านี้ ถ้า Hashicorp ออกสู่ตลาดก็หวังว่าจะมีบริษัทดี ๆ เข้าซื้อ
โปรเจกต์นี้ดูดีมากจริง ๆ หวังว่าในที่สุดมันจะมาแทนที่ resource "Azure Cache for Redis" ตอนนี้ของเดิมช้า เป็น fork ของ Redis ที่ทำมาให้รันบน Windows และใช้เวลาเกือบหนึ่งชั่วโมงในการสร้างอินสแตนซ์
สงสัยว่าระบบนี้มีจุดที่ประสิทธิภาพตกตรงไหนบ้าง อยากเห็นเบนช์มาร์กบนอินสแตนซ์ขนาดเล็กกว่านี้ด้วย 72vCPU ถือว่าเป็นอินสแตนซ์ที่ค่อนข้างใหญ่