แก้ Replica lag โดยวิธี Parallel Replication

Nitipat Phiphatprathuang
Ascend Developers
Published in
2 min readSep 22, 2020

--

หากใครเคยใช้ MySQL น่าจะรู้จักการทำ Replication หรือถ้าพูดง่ายคือการ clone database อีกลูกเพื่อใช้ในการ backup กล่าวคือ Database เราจะมี Node Master ที่เป็นตัวหลักค่อยเขียนข้อมูล และ Node slave ใช้ในการ Backup ข้อมูลจาก Node master มาเก็บไว้

รูปแสดงการทำงานของ Replication Cr.https://blog.42mate.com/master-slave-replication-in-mysql/

ปกติแล้ว App เราก็จะมีการต่อ Datasource ที่เดียวแล้วใช้ทั้งการ Create, Read, Update และ Delete แต่เมื่อเรามี Slave แล้ว เราสามารถทำให้ App เชื่อมต่อกับ Slave เพื่อทำการ Read อย่างเดียวใน Api ที่ต้อง Read ค่าจาก Database เพื่อลดภาระของ Master ซึ่งการทำแบบนี้ Master และ Slave ควรจะทำการ Sync กันแบบ Real time แต่หาก Slave ทำงานช้า ไม่ยอม Sync Master กันแบบ Real time ละ ถึงตอนนี้แหละที่เราต้องมีการทำ Parallel Replication

Parallel Replication

ปกติแล้ว Slave จะไม่มีการแตก Thread มาทำงาน แต่การทำ Parallel Replication จะเป็นการทำให้ Slave แตก Thread ออกมาทำงานกันแบบ Parallel ทำให้ Slave สามารถทำ Replication ได้มีประสิทธิภาพมากขึ้น โดยเราสามารถทำ Parallel Replication โดยการเปลี่ยนค่า Database variable ตามนี้

slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 40

โดยค่า slave_parallel_workers คือจำนวน Thread ที่เราต้องการ

อ่านความหมายของ Database variable เพิ่มเติมได้ที่นี้
https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html#sysvar_slave_parallel_type

ก่อนการทำ Parallel Replication

ค่า replica lag เพิ่มขึ้นตามจำนวนข้อมูลใน Database

หลังการทำ Parallel Replication

ค่า replica lag เป็น 0 หมายความว่าไม่มีอาการ Replica lag

Conclusion

การทำ Parallel Replication เป็นวิธีหนึ่งที่ช่วยลดอาการ Replica lag ได้อย่างมาก แต่การเกิด Replica lag นั้นมีได้หลายสาเหตุ หากมีโอกาสจะนำมาเสนอในครั้งถัดไป

--

--