Tags:
Topics: 
Node Thumbnail

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 รวมใช้เวลาหลายปีจึงพอร์ตแพตช์ทั้งหมดสำเร็จ

No Description

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

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

ที่มา - Facebook

Get latest news from Blognone

Comments

By: orbitalz
ContributorWindows PhoneAndroidUbuntu
on 26 July 2021 - 10:24 #1217366

สำหรับคนงงตรง "ใน MySQL 5.7 มีการเตือนว่า API เตรียมเลิกซัพพอร์ตแล้ว หากได้อัพเกรดไป 5.7 ก่อนก็จะเห็นคำเตือนเหล่านี้และมีโอกาสแก้ปัญหาล่วงหน้า"

Second, it is much harder to detect API changes because 5.7 could have provided deprecation warnings to our application clients to fix potential issues. Instead, we needed to run additional shadow tests to find failures before we could migrate the production workloads. Using mysql client software that automatically escaped schema object names helps reduce the number of compatibility issues.

By: 9jukkaphan
iPhoneAndroidUbuntuWindows
on 26 July 2021 - 15:55 #1217397

Relational DB + NoSQL ใช้ได้สองอย่างในตัวเดียวกันเลยหรอครับ MySQL 8.0 เนี่ย

By: lew
FounderJusci's WriterMEconomicsAndroid
on 26 July 2021 - 16:16 #1217399 Reply to:1217397
lew's picture

หลังๆ ได้แทบทุกตัวแล้วนะครับ ผมเองก็ใช้ Postges ยิง JSON อยู่บ้าง เก็บ log ระบบเล็กๆ เน้นขึ้นเร็วๆ ก็เวิร์คพอสมควร (ง่ายกว่าเซ็ตอัพ elasticsearch)


lewcpe.com, @wasonliw