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

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

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

error มาเพียบ

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

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

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

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

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