Connection Pool คืออะไร…

--

Connection Pool คือ แคชของการเชื่อมต่อฐานข้อมูล โดยจุดประสงค์หลักๆ คือ เราไม่จำเป็นต้องเปิด connection ที่ database driver จะต้องทำ ทุกครั้งเมื่อมีการร้องข้อ จาก Client Application ไปยัง Datasource

https://ejbvn.files.wordpress.com/2008/11/95.jpg

เพื่อง่ายต่อการทำความเข้าใจ วิธีการทำงานของ connection pool มี ดังนี้

  1. Client Application เมื่อต้องการข้อมูลจาก Datasource จะทำการตรวจสอบว่าใน pool มี connection ให้ reuse หรือไม่
  2. ถ้ามี ก็นำไปใช้ได้เลย แต่ถ้าไม่มีให้ทำการเปิด new connection ขึ้นมา
  3. จากนั้นเมื่อได้ connection ก็วิ่งไปหา Datasource เพื่อทำการ Querying ข้อมูลปกติ
  4. Client Application ได้ข้อมูลมาแล้ว ก็ทำงานปกติ แต่เมื่อผ่านไปสักระยะ Client Application ไม่ได้ใช้งานแล้วจาก User ก็ทำการ แคช Connection เข้าสู่ Pool ไม่ได้ทำลาย Connection ทิ้งไปนะ
  5. เมื่อ Client Application คนใหม่ ทำแบบเดียวกันกับเราเลย แทนที่เขาจะสร้าง new connection ก็ไม่ต้องแล้ว reuse ของที่มีได้เลย

ให้ตั้งข้อสังเกตุว่า pool เต็มง่ายๆไหม…บอกเลยว่าน้อยมาก ยิ่งสมัยนี้การ scale ทำได้ง่ายมาก ยิ่งเกิดปัญหานี้น้อย แถม Database Engine ยุคนี้ฉลาดพอที่จะ Terminate บาง Connection Pool ที่ไม่ได้ใช้นานได้เอง

ทำไมเปิด แล้วไม่ปิด?!!!

เรารู้จัก Blocking I/O ดีหรือยัง?? connection pool คนละเรื่องกับ การ Hold resource พวก File, Table in Database เลยนะ ดังนั้น บอกไว้เลยว่า การเปิดๆ ปิดๆ บ่อยๆมันมี Overhead สูงมาก เพราะอะไร

การเปิดแต่ละทีต้องเจอกับสิ่งนี้นะ Network sessions, Authenticate, Authorization เช็คนั่นนี่สารพัด เสียเวลา…

— golf

--

--

Teerapong Singthong 👨🏻‍💻

Engineering Manager, ex-Solution Engineering Lead at LINE | Tech | Team Building | System Design | Architecture | SWE | Large Scaling System