<p>- Heap ดำเนินการฐานข้อมูล Postgres สำหรับงานวิเคราะห์ขนาดหลายเพตะไบต์<br />
- เมื่อเติบโตอย่างรวดเร็ว อัตราการใช้งานโหนดเกิน 80% ทำให้เกิดปัญหาด้านประสิทธิภาพในไปป์ไลน์การเก็บข้อมูล <br />
- สาเหตุของปัญหาคือ SSD มักมีแนวโน้มที่ประสิทธิภาพจะลดลงเมื่อการใช้งานเข้าใกล้ 100%<br />
- การใช้ ZFS ซึ่งเป็น CoW (Copy-on-Write) ทำให้ปัญหารุนแรงขึ้น <br />
→ ทุกครั้งที่มีการอัปเดตบล็อก จะต้องเขียนสำเนาใหม่ <br />
- แน่นอนว่า CoW ก็มีข้อดีหลายอย่าง<br />
→ การบีบอัดในระดับไฟล์ซิสเต็มทำได้สะดวกกว่าไฟล์ซิสเต็มอื่น จึงบีบอัดได้ 4-5x และประหยัดพื้นที่ <br />
→ มีความทนทานสูงกว่า จึงสามารถปิด `full_page_writes` ของ Postgres ได้ ส่งผลให้ประสิทธิภาพดีขึ้นและลด IO โดยรวม <br />
→ มี Point-in-time snapshot ที่รับประกันความสอดคล้องได้ — เนื่องจากหน้าเพจไม่สามารถถูกเปลี่ยนแปลงย้อนหลังได้ จึงยังคงเก็บหน้าเดิมไว้ระหว่างการทำ snapshot<br />
- แต่ไฟล์ซิสเต็มแบบ CoW อย่าง ZFS จะมีประสิทธิภาพลดลงเมื่อพื้นที่ใกล้เต็ม<br />
→ ทุกครั้งที่อัปเดตหน้าเพจ block allocator ต้องหาบล็อกว่างใหม่ จึงยิ่งช้าลงมากเมื่ออัตราการใช้งานสูง <br />
→ ต้องลบบล็อกที่เคยถูก unlink ออก และจัดให้ปะปนกับบล็อกเดิม <br />
→ ยิ่งแย่ลงเพราะตั้งขนาดบล็อกไว้ใหญ่ถึง 64kb เพื่อให้ได้อัตราการบีบอัดที่สูงขึ้น <br />
→ ด้วยเหตุผลเหล่านี้ จึงควรรักษาการใช้งานของ ZFS ไว้ไม่ให้เกิน 80% <br />
<br />
- จึงลองอัปเกรดเป็น ZFS 2.x และเปลี่ยนจากการบีบอัดแบบ lz4 ไปเป็น Zstandard <br />
→ lz4 เร็วมากและให้อัตราการบีบอัดราว ~4.4x <br />
→ Zstandard ให้อัตราการบีบอัดได้ถึง ~5.5x จึงดีขึ้น 20% <br />
→ แต่หลายเบนช์มาร์กบอกว่า Zstandard ช้ากว่า lz4<br />
→ จึงตัดสินใจทดสอบอย่างเข้มงวดในสภาพแวดล้อมจริง <br />
→ ผลการทดสอบพบว่าประสิทธิภาพของคิวรีไม่เปลี่ยนไป การใช้สตอเรจลดลง ~20% และเวลาคิวรีเขียนลดลงครึ่งหนึ่ง <br />
<br />
- DB cluster ของ Heap แบ่งเป็น 5 โหนด และแต่ละโหนดอยู่ใน ASG ของตัวเอง <br />
→ การเปลี่ยนโหนดทำได้ง่าย เพียงแยกออกจาก ASG แล้ว ASG จะสร้างโหนดใหม่ จากนั้นรีสโตร์จากแบ็กอัปล่าสุดและเข้าสู่โหมด warm standby <br />
→ สร้าง AMI ด้วยการตั้งค่าใหม่ แล้วค่อย ๆ ทำทีละโหนด <br />
→ โดยรวมแล้วการใช้งานลดลง ~21% เวลาเขียนลดลง 50% และประสิทธิภาพคิวรีแทบไม่เปลี่ยน </p>
1 ความคิดเห็น