☕ 5-Min Tech Story #06

Connection Pool: ทำไมต้องสร้างสะพานข้ามแม่น้ำใหม่ทุกครั้งที่ลูกค้าสั่งกะเพรา?

⏱️ ใช้เวลาอ่านประมาณ: 4 นาที 30 วินาที

เคยสงสัยไหมว่า เวลาเขียนโค้ดคิวรี่ข้อมูลง่ายๆ แค่ SELECT * FROM users WHERE id = 1 ซึ่งตัวฐานข้อมูลใช้เวลาประมวลผลแค่ 1 มิลลิวินาที... แต่ทำไมหน้าเว็บถึงหมุนติ้วเกือบ 100 มิลลิวินาที?

เวลาอีก 99 มิลลิวินาทีมันหายไปไหนในมิติลี้ลับ? คำตอบไม่ได้อยู่ที่ SQL แต่เกิดจาก "ค่าใช้จ่ายในการเปิดประตูบ้าน" ที่แพงหูฉี่จนระบบแทบพัง

🌉 พิธีรีตองก่อนส่งข้าว 1 จาน

สมมติว่าเซิร์ฟเวอร์แอปของคุณอยู่ฝั่งธนฯ และ Database อยู่ฝั่งพระนคร ถ้าคุณเขียนโค้ดแบบดิบๆ สั่ง DriverManager.getConnection() ทุกครั้งที่มี Request วิ่งเข้ามา สิ่งที่เกิดขึ้นหลังบ้านคือ:

  1. TCP Three-Way Handshake: ตะโกนทักทายข้ามเครือข่าย SYN ➔ SYN-ACK ➔ ACK (กินไปแล้ว 3 เที่ยว)
  2. TLS/SSL Handshake: แลกใบรับรอง แลกกุญแจเข้ารหัสลับ ยืนยันตัวตนกันอีกหลายรอบ
  3. DB Authentication: ส่ง Username/Password ไปเช็ก ตรวจสอบสิทธิ์ว่ามีตารางนี้ไหม
  4. Allocate Memory: Database ต้องเจียด Process และหน่วยความจำมารับรองแขกคนนี้โดยเฉพาะ

ทำพิธีสารพัดอย่างหมดเวลาไป 80-100ms เพียงเพื่อจะยิงคำสั่ง SELECT ที่ใช้เวลาทำงานจริง 1ms แล้วคุณก็สั่ง connection.close() ทุบสะพานทิ้งทันที!

ถ้ามีคนสั่งข้าว 1,000 คนพร้อมกัน เซิร์ฟเวอร์คุณไม่ได้ล่มเพราะทำกับข้าวไม่ทัน แต่ล่มเพราะ มัวแต่ก่อสร้างสะพานแล้วทุบทิ้งวนไปพันรอบ

🏊‍♂️ อภินิหารสระว่ายน้ำ: Connection Pool & HikariCP

มนุษย์เลยคิดวิธีที่ฉลาดกว่านั้น: "ทำไมเราไม่สร้างสะพานทิ้งไว้ล่วงหน้าสัก 10 สาย แล้วให้ทุกคนผลัดกันเดินข้ามล่ะ?"

"Connection Pool คือการเปิดท่อค้างไว้ล่วงหน้าในสระ เมื่อใครจะใช้ ก็แค่เดินมาหยิบไป พอใช้เสร็จสั่ง close() มันจะไม่ปิดจริง แต่จะถูกโยนกลับคืนลงสระให้คนถัดไปหยิบต่อทันที"

และในโลก Java ยุคปัจจุบัน ราชาที่ครองสังเวียนนี้แบบเบ็ดเสร็จเด็ดขาดคือ HikariCP (คำว่า Hikari ในภาษาญี่ปุ่นแปลว่า "แสง") ซึ่งเร็วขนาดที่ Spring Boot เลือกให้เป็นค่าเริ่มต้นอัตโนมัติ

ทีมผู้สร้าง HikariCP บ้าคลั่งความเร็วถึงขนาด:

💡 5-Min Takeaway

"สิ่งที่แพงที่สุดในระบบ Network มักไม่ใช่การส่งข้อมูล แต่คือการเริ่มสร้างสายสัมพันธ์ (Connection Handshake)" การเข้าใจ Connection Pool ทำให้เรารู้ว่าการตั้งค่า maximum-pool-size ไม่จำเป็นต้องใหญ่เป็นร้อย (ส่วนใหญ่ 10–20 ก็พอสำหรับรองรับหมื่น Request) เพราะหัวใจคือ หมุนเวียนของเร็ว ไม่ใช่กักตุนของเยอะ