Facebook อัพเกรดไปใช้ MySQL 8.0 สำเร็จ แม้มีแพตช์เฉพาะของตัวเองจำนวนมาก

by lew
26 July 2021 - 03:16

Herman Lee และ Pradeep Nayak จากเฟซบุ๊กเล่าถึงประสบการณ์การอัพเกรดจาก MySQL 5.6 ไปยัง MySQL 8.0 รุ่นล่าสุด ที่เป็นโครงการขนาดใหญ่เพราะเฟซบุ๊กเองดัดแปลง MySQL อย่างหนัก มีแพตช์รวม 2,300 ชุด, มีสตอเรจเอนจินของตัวเองที่ชื่อ MyRocks, หรือแม้แต่ error code สำหรับตอบกลับไคลเอนต์ก็มีโค้ดเฉพาะของเฟซบุ๊กเอง

เฟซบุ๊กอัพเกรดมาใช้ MySQL 5.6 โดยใช้เวลาย้ายระบบนานถึงหนึ่งปี และเมื่อ MySQL 5.6 กำลังหมดอายุซัพพอร์ตก็ต้องตัดสินใจว่าจะอัพเกรดไปยัง MySQL 5.7 หรือจะย้ายไป MySQL 8 เลยทีเดียว และหลังจากพิจารณาแล้วทีมงานก็ตัดสินใจอัพเกรดใหญ่ไปยัง MySQL 8 เนื่องจากมีฟีเจอร์หลายตัวเพิ่มเข้ามา เช่น Document Store ทีมงานแยกแพตช์ออกเป็นกลุ่ม ได้แก่ กลุ่มที่จะทิ้งไปเนื่องจากฟีเจอร์ซ้ำซ้อนกับ MySQL 8.0 อยู่แล้ว, กลุ่มที่ไม่เกี่ยวข้องกับตัวเซิร์ฟเวอร์โดยตรง, กลุ่มที่ไม่เกี่ยวกับสตอเรจเอนจิน, และกลุ่มเกี่ยวกับสตอเรจเอนจิน MyRocks รวมใช้เวลาหลายปีจึงพอร์ตแพตช์ทั้งหมดสำเร็จ

ระบบขนาดใหญ่เช่นเฟซบุ๊กไม่สามารถปิดระบบเพื่ออัพเกรดได้ ทีมงานอาศัยการเพิ่มเซิร์ฟเวอร์ MySQL 8.0 เข้าไปในคลัสเตอร์เดิม โดยให้เป็นเซิร์ฟเวอร์ secondary แล้วค่อยๆ เปิดให้ภายนอกเข้าไปอ่านข้อมูลจากเซิร์ฟเวอร์ใหม่ จากนั้นจึงค่อยๆ ปิดเซิร์ฟเวอร์ MySQL 5.6 ไป

ทีมงานระบุว่าการตัดสินใจข้ามเวอร์ชั่น 5.7 ไปทำให้พบปัญหาใหญ่ๆ 2 ประการ คือ ไม่สามารถอัพเกรดเซิร์ฟเวอร์โดยตรงได้ แต่ต้องอาศัย dump มาสร้างเซิร์ฟเวอร์ใหม่ซึ่งใช้เวลาหลายวัน และใน MySQL 5.7 มีการเตือนว่า API เตรียมเลิกซัพพอร์ตแล้ว หากได้อัพเกรดไป 5.7 ก่อนก็จะเห็นคำเตือนเหล่านี้และมีโอกาสแก้ปัญหาล่วงหน้า

ที่มา - Facebook

Blognone Jobs Premium