MySQL to 100k+

สรุปจากการอ่านบทความ How Quora scaled MySQL to 100k+ Queries Per Second ?

เห็นใน feed มีการ share บทความเรื่อง How Quora scaled MySQL to 100k+ Queries Per Second เป็นการ scale MySQL database ของระบบ Quora ซึ่งเป็นระบบถามตอบปัญหาต่าง ๆ นั่นเอง โดยมีการใช้งานคร่าว ๆ คือ

  • ผู้ใช้งานจำนวน 300 ล้านคนต่อเดือน
  • มีการ post คำถามประมาณ 10,000 post ต่อวัน


ข้อมูลต่าง ๆ จะเก็บไว้ใน MySQL นั่นเอง ดังนั้นมาดูกันว่าทางระบบทำการ scale กันอย่างไร

ในการจัดการนั้น จะแบ่งออกเป็น 3 เรื่องตามรูปแบบของการใช้งาน

  • จำนวนการอ่านข้อมูล (Select)
  • จำนวนการเขียนข้อมูล (Insert, Update, Delete)
  • ขนาดของข้อมูลที่จัดเก็บ


มารายละเอียดแต่ละหัวข้อดังนี้

เรื่องที่ 1 จำนวนการอ่านข้อมูล (Select)

เนื่องจากระบบ Quora นั้นมีอัตราการอ่านข้อมูลที่สูงมาก ๆ การ scale ด้านอ่านข้อมูลจึงสำคัญมาก ๆ

ซึ่งจะแบ่งการจัดการหรือปรับปรุงเป็น 2 เรื่องหลัก ๆ คือ

  • Query ที่ซับซ้อน เนื่องจากใช้งาน CPU สูงมาก ๆ รวมไปถึงการ join ที่เยอะ ๆ (ลูกอีช่าง join) และการ aggregate ข้อมูล (group by) รวมทั้งการดึงข้อมูลใน table ที่มีจำนวน row เยอะ
  • ในเรื่องหนึ่ง ๆ มีจำนวนการดึงข้อมูลที่สูง หรือ บ่อย ๆ ต้องทำการขยาย หรือ เพิ่มเครื่อง หรือต้องมีการทำ caching ขึ้นมา

โดยรวม ๆ แล้ว ต้องให้ database ทำงานเท่าที่จำเป็นเท่านั้น ไม่ควรให้ทำงานอะไรที่เยอะเกินไป

ยกตัวอย่างเช่น

  • ถ้าต้อง join เยอะ ๆ ก็ลดการ join ด้วยการทำ pre-aggregation/join ไว้ก่อนดีกว่าไหม
  • ใช้งาน paging เพื่อลดการดูข้อมูลลงไป


ส่วนในการใช้งาน caching ก็ต้องระวังการ cache ที่ไม่ดีด้วยเช่นกันไม่ใช่ต้อง caching ข้อมูลทั้งหมดเสมอไป

ใน table ใด มีข้อมูลที่เยอะ ๆ ก็ต้องระวังเพราะว่า เปลือง resource มาก ๆ performance ก็แย่

การ backup ก็ลำบาก


ดังนั้น ต้องเข้าใจก่อนว่าข้อมูลอะไรที่ต้องการใช้งาน หรือ ใช้งานจริง ๆ อะไรที่ไม่ใช้ก็ลบทิ้งไปบ้าง (retention policy) หรือต้อง split ข้อมูลเป็นกลุ่ม ๆ ตามการใช้งานเป็นต้น


ส่วนเรื่องการจัดการ storage ของ database จะใช้งาน RockDB


เรื่องที่ 2 จำนวนการเขียนข้อมูล (Insert, Update, Delete)

ในระบบมีการเขียนข้อมูลที่ไม่เยอะมากนักโดย MySQL จะเป็น cluster (master/slave) ก็ยังมีปัญหาการ sync ข้อมูลจาก master ไปยัง slave ที่ช้า เมื่อมีการใช้งานเยอะขึ้น เลยปรับมาใช้การ sunc แบบ parallel แทน ถ้าส่วนงานไหนที่ต้องเขียนเยอะ ๆ จะใช้งาน HBase แทน รายละเอียดการ optimize database เพิ่มเติม

0
190