SCT

กำลังเตรียมประสบการณ์ดิจิทัล

แลกซีพียูเล็กน้อยกับพื้นที่แคชระดับเพตะไบต์: บทเรียนการบีบอัดข้อมูลที่ชั้นแคช

ราคาหน่วยความจำและดิสก์แพงขึ้นต่อเนื่อง การบีบอัดข้อมูลที่ชั้นแคชจึงกลับมาเป็นทางเลือกที่คุ้ม บทความนี้สรุปการทดลองบีบอัดเนื้อหาด้วย Zstandard ที่ได้พื้นที่คืนราวสองในสาม โดยแลกกับซีพียูเพียงไม่กี่เปอร์เซ็นต์

ราคาหน่วยความจำและดิสก์แพงขึ้นต่อเนื่อง การบีบอัดข้อมูลที่ชั้นแคชจึงกลับมาเป็นทางเลือกที่คุ้ม บทความนี้สรุปการทดลองบีบอัดเนื้อหาด้วย 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

บทความอื่นที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง

ลดหน่วยความจำได้ 100 เทระไบต์ด้วยการจัดโครงสร้างข้อมูลใหม่: บทเรียนจากแคช DNS ระดับโลก คลาวด์

ลดหน่วยความจำได้ 100 เทระไบต์ด้วยการจัดโครงสร้างข้อมูลใหม่: บทเรียนจากแคช DNS ระดับโลก

เมื่อระบบมีรายการแคชกว่า 250,000 ล้านรายการ การเปลืองหน่วยความจำเพียงหนึ่งไบต์ต่อรายการเท่ากับสูญเปล่าไปกว่า 250 กิกะไบต์ บทความนี้ถอดวิธีลดขนาดต่อรายการลง 56% ทีละขั้น พร้อมบทเรียนเรื่องการวัดผลที่ทีมไทยนำไปใช้กับระบบของตัวเองได้

อ่านบทความ
ลดค่าใช้จ่ายคลาวด์อย่างเป็นระบบตามแนวทาง AWS Well-Architected คลาวด์

ลดค่าใช้จ่ายคลาวด์อย่างเป็นระบบตามแนวทาง AWS Well-Architected

องค์กรจำนวนมากจ่ายค่าคลาวด์เกินจำเป็น 20-30% จากทรัพยากรที่ไม่ได้ใช้และขนาดที่ใหญ่เกินงาน บทความนี้สรุปหลักการจาก Cost Optimization Pillar ของ AWS Well-Architected Framework ตั้งแต่การมองเห็นค่าใช้จ่าย การเลือกโมเดลราคา ไปจนถึงการสร้างวัฒนธรรม FinOps ในทีม

อ่านบทความ
เร่งความเร็วเว็บด้วย Core Web Vitals: คู่มือเริ่มต้นสำหรับทีมพัฒนา เว็บ

เร่งความเร็วเว็บด้วย Core Web Vitals: คู่มือเริ่มต้นสำหรับทีมพัฒนา

เว็บที่โหลดช้าเพียง 1 วินาทีอาจทำให้ Conversion ลดลงอย่างมีนัยสำคัญ บทความนี้สรุปแนวทางจากคอร์ส Learn Performance ของ Google web.dev อธิบายตัวชี้วัด Core Web Vitals ทั้ง LCP, INP และ CLS พร้อมเทคนิคปรับปรุงที่ทีมพัฒนาไทยนำไปใช้ได้ทันที

อ่านบทความ

ติดต่อเพื่อขอรับคำปรึกษาจากทีมงาน

ตั้งแต่ประเมินระบบปัจจุบัน วางแผน จนถึงลงมือพัฒนา — คุยกับเราได้โดยไม่มีค่าใช้จ่าย

ปรึกษาทีมของเรา