อ่านประมาณ 8 นาที
ระดับสูง
หมวด: คลาวด์
อ้างอิง: Cloudflare Blog — How we could save petabytes of cache storage with Zstandard and Pingora
ราคาหน่วยความจำและดิสก์แพงขึ้นต่อเนื่อง การบีบอัดข้อมูลที่ชั้นแคชจึงกลับมาเป็นทางเลือกที่คุ้ม บทความนี้สรุปการทดลองบีบอัดเนื้อหาด้วย Zstandard ที่ได้พื้นที่คืนราวสองในสาม โดยแลกกับซีพียูเพียงไม่กี่เปอร์เซ็นต์
โจทย์: พื้นที่แคชแพงขึ้นทุกปี
ต้นทุนทั้งหน่วยความจำและดิสก์ปรับตัวสูงขึ้นอย่างมีนัยสำคัญ ระบบจัดเก็บแบบกระจายที่ต้องรองรับลูกค้าจำนวนมากจึงต้องหาวิธีใช้ฮาร์ดแวร์ที่มีอยู่ให้คุ้มที่สุด แทนที่จะซื้อเพิ่มอย่างเดียว แนวคิดที่ทีมทดลองคือบีบอัดเนื้อหาที่เข้าข่ายด้วยอัลกอริทึม Zstandard ตั้งแต่ตอนเก็บลงแคช
วิศวกรอธิบายการแลกเปลี่ยนไว้ตรงไปตรงมาว่าซีพียูที่เพิ่มขึ้นเล็กน้อยแลกมาด้วยพื้นที่แคชที่ใช้ได้จริงระดับเพตะไบต์ และยังลดปริมาณข้อมูลที่ต้องส่งระหว่างศูนย์ข้อมูลลงด้วย
บีบครั้งเดียว ใช้ประโยชน์ทุกครั้ง
หลักการสำคัญคือบีบอัดเพียงครั้งเดียวตอนเนื้อหาเข้าสู่แคช แล้วคงรูปแบบที่บีบไว้ตลอดทั้งการจัดเก็บและการส่งต่อระหว่างชั้นแคช จะคลายก็ต่อเมื่อจะส่งให้ผู้ใช้ปลายทางเท่านั้น จุดที่ต้องระวังคือต้องมีเครื่องหมายกำกับสถานะไว้ เพื่อไม่ให้ข้อมูลถูกบีบซ้ำมากกว่าหนึ่งครั้ง
ในทางปฏิบัติ เมื่อเกิด cache miss ระบบจะบีบเนื้อหาก่อนเขียนลงดิสก์พร้อมบันทึกสถานะไว้ในเมตาดาตา เมื่อเกิด cache hit ก็อ่านข้อมูลที่บีบไว้ขึ้นมาคลายก่อนส่งออกไป ส่วนการส่งต่อระหว่างชั้นแคชจะส่งรูปแบบที่บีบแล้วไปเลยโดยไม่ต้องเข้ารหัสใหม่
แผนภาพขั้นตอนการบีบอัดตอนเข้าแคชและคลายตอนส่งให้ผู้ใช้ จากบทความต้นฉบับ
ตัวเลขที่วัดได้และการแลกเปลี่ยนที่ต้องรู้
ผลการทดสอบพบว่าเนื้อหาที่เข้าข่ายถูกบีบเหลือประมาณหนึ่งในสามของขนาดเดิม หรือคิดเป็นอัตราส่วนราว 2.8 เท่า ด้านต้นทุนการประมวลผล การเข้ารหัสใช้เวลา 4.31 นาโนวินาทีต่อไบต์ ซึ่งจ่ายเพียงครั้งเดียวตอนนำเข้า ส่วนการถอดรหัสใช้ 1.56 นาโนวินาทีต่อไบต์ ซึ่งจ่ายทุกครั้งที่เสิร์ฟ โดยภาระซีพียูโดยรวมอยู่ในระดับไม่กี่เปอร์เซ็นต์ตามงบที่ตั้งไว้
หลักการที่ทำให้คุ้มคือค่าใช้จ่ายในการเข้ารหัสถูกจ่ายครั้งเดียวตอนที่ข้อมูลเข้าแคช แต่พื้นที่และแบนด์วิดท์ที่ประหยัดได้เกิดขึ้นทุกครั้งที่ข้อมูลชิ้นนั้นถูกใช้ซ้ำ ยิ่งเนื้อหาถูกเรียกบ่อย การลงทุนบีบครั้งแรกยิ่งคุ้ม
เลือกให้ถูกว่าจะบีบอะไร
สิ่งที่ทำให้แนวทางนี้ได้ผลไม่ใช่การบีบทุกอย่าง แต่คือการคัดเลือกอย่างเข้มงวด ระบบตัดสื่อที่บีบมาแล้วอย่างรูปภาพ วิดีโอ และฟอนต์ออกไป ซึ่งคิดเป็นสัดส่วนถึง 63.3% ของปริมาณข้อมูล เพราะบีบซ้ำแล้วแทบไม่ได้อะไรแต่เสียซีพียูฟรี รวมถึงตัดเนื้อหาไบนารี คำขอแบบระบุช่วงข้อมูล และไฟล์ที่เล็กกว่า 4 กิโลไบต์ออกด้วย
ส่วนที่ได้ประโยชน์จริงคือเนื้อหาประเภทข้อความ ซึ่งพบว่าราว 71% ของข้อมูลกลุ่มนี้เดินทางมาโดยยังไม่ถูกบีบอัดเลย จึงเป็นเป้าหมายที่ให้ผลตอบแทนสูงที่สุด
ภาพประกอบบทความหมวดคลาวด์
บทเรียนสำหรับทีมไทย
บทเรียนแรกคือการคัดเลือกเป้าหมายสำคัญกว่าตัวอัลกอริทึม การเปิดบีบอัดกับทุกอย่างเป็นการเผาซีพียูโดยไม่ได้อะไรกลับมาในสัดส่วนที่มากกว่าที่คิด บทเรียนที่สองคือให้มองว่าต้นทุนที่จ่ายครั้งเดียวกับประโยชน์ที่ได้ทุกครั้งเป็นคนละเรื่องกัน ซึ่งเป็นกรอบที่ใช้ตัดสินใจได้กับงานแคชทุกประเภท ไม่ใช่แค่เรื่องบีบอัด
บทเรียนที่สามคือเรื่องวิธีทดสอบ ทีมรันคำขอทดสอบมากกว่าหนึ่งล้านครั้งบนเซิร์ฟเวอร์แคชสิบเครื่อง พร้อมเก็บร่องรอยละเอียดเพื่อยืนยันทั้งความถูกต้องและประสิทธิภาพ และเริ่มจากค่าตั้งต้นที่อนุรักษ์นิยมคือระดับการบีบที่ 3 และขนาดขั้นต่ำ 4 กิโลไบต์ เพื่อให้มีเส้นฐานที่วัดได้ก่อนจะไปปรับให้ดุขึ้น สำหรับทีมไทยที่ดูแลระบบซึ่งมีค่าใช้จ่ายด้านพื้นที่จัดเก็บสูง เช่น ระบบจัดการเนื้อหาหรือคลังข้อมูลลูกค้า แนวคิดชุดนี้นำไปปรับใช้ได้ตรง ๆ แม้จะไม่ได้ทำงานที่สเกลระดับเดียวกัน
สรุปสาระสำคัญ โจทย์: พื้นที่แคชแพงขึ้นทุกปี บีบครั้งเดียว ใช้ประโยชน์ทุกครั้ง ตัวเลขที่วัดได้และการแลกเปลี่ยนที่ต้องรู้
แหล่งอ้างอิง เรียบเรียงจาก Cloudflare Blog — How we could save petabytes of cache storage with Zstandard and Pingora —
อ่านบทความต้นฉบับ ภาพปกและแผนภาพ: Cloudflare Blog · ลิขสิทธิ์ภาพเป็นของเจ้าของต้นฉบับ ใช้ประกอบการรายงานพร้อมอ้างอิงแหล่งที่มา
มีคำถามเพิ่มเติมเกี่ยวกับบทความนี้? เขียนหาเราได้ที่
info@smart-cyber-tech.com
บริการที่เกี่ยวข้องจากทีมงาน Smart Cyber Tech
แบ่งปันบทความนี้:
LINE
Facebook
X
คัดลอกลิงก์
ปรึกษาทีมของเรา