Quantcast
Viewing all articles
Browse latest Browse all 2067

แก้ไขปัญหา Too many connection ของ MySQL ในระบบที่เขียนด้วยภาษา Go

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

เช้านี้เจอปัญหาจากระบบหนึ่งที่พัฒนาด้วยภาษา Go
ซึ่งพบเจอ error ว่า "Error 1040: Too many connections"
ตั้งแต่เปิดระบบให้บริการมา ยังไม่เคยเจอ error นี้เลย
แต่เมื่อไปดูเรื่องของ traffic การใช้งาน พบว่าใช้งานสูงขึ้นอย่างมาก
ซึ่งคิด ๆ ดูแล้ว ก็เป็นเรื่องที่ดีเลย ที่เจอ error นี้
ดังนั้นไปดูปัญหา และ re-produce ปัญหากันหน่อย
เพื่อจะได้แก้ไขปัญหาได้ง่าย และ ถูกต้องมากขึ้น

เริ่มจากการทำ load test แบบง่าย ๆ ด้วย Ddosify นิดหน่อย

ยิงไปสัก 5,000 request ก็พังตามนี้

[gist id="39970d8165bc3cac8cde861c68d13768" file="load.txt"]

error มาเพียบ

[gist id="39970d8165bc3cac8cde861c68d13768" file="1.txt"]

เมื่อเจอปัญหาแล้ว ก็ไปดู code และ configuration กันหน่อย
จากไปดู code คร่าว ๆ พบว่า เขียน code แบบปกติ
คือในเอกสารเขียนไว้อย่างไร ก็ทำแบบนั้นเช่นกัน !!

ก็เลยทำการเปลี่ยนไปใช้ Go routine และ channel นิดหน่อย
สำหรับการ insert ข้อมูล เพื่อช่วยให้จัดการ resource ได้ดีขึ้น
โดยที่ยังไม่เปลี่ยนแปลง config อะไร

ตัวอย่าง code แบบง่าย ๆ ก็แจ้งแนวทางการแก้ไขกลับไป
เพื่อปรับปรุงการทำงานของ code และระบบให้ดีขึ้น

[gist id="39970d8165bc3cac8cde861c68d13768" file="db.go"]

จากนั้นเพื่อให้แน่ใจ ลองยิง load test กันอีกหน่อย
จะได้ผลเป็นที่น่าพอใจ
คือ ไม่มี error อีกแล้ว
ส่วนการทำงานก็ผ่านฉลุย
รวมทั้งเพิ่มจำนวนการยิงให้สูงขึ้นไปอีก 2 เท่าตัว ก็ผ่าน เช่นกัน

[gist id="39970d8165bc3cac8cde861c68d13768" file="2.txt"]

สุดท้าย ยังมีวิธีแก้ไขอีกหลายอย่างเลย
ไว้ค่อย ๆ ปรับปรุงกันไป ตามรูปแบบของ traffic ที่เกิดขึ้นต่อไป
ทั้ง code และ database


Viewing all articles
Browse latest Browse all 2067

Trending Articles