เห็นใน 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 เพิ่มเติม
Reference Websites