Trong bài viết này chúng ta sẽ tìm hiểu về Database Connections và vòng đời của chúng. Tiếp theo chúng ta sẽ tìm hểu Connection Pool và vòng đời của chúng và tại sao chúng ta cần sử dụng chúng.
Database Connection là gì?
Bất kì ứng dụng phần mềm nào cũng cần lưu data ở Database và để ứng dụng có thể tương tác với 1 database server thì chúng ta cần Database Connection. Database Connection là cách để ứng dụng tương tác với DB và chúng ta sử dụng connection để gửi command (SQL) đến DB và nhận kết quả trả về từ DB.
DB application thì luôn chạy trên một cái server chuyên dụng gọi là Database server, nó khác với application server. Database application chạy trên 1 port trên Database Server. Trên đó application server có thể gửi command (SQL) và nhận data.
Bất cứ khi nào Client ( browser hay mobile app) request data từ Backend Application. Backend Application sẽ nói với Database trả dữ liệu và Backend trả response cho Client. Nếu Backend Application want to connect to DB Server, nó cần tạo 1 lời gọi dựa trên TCP-IP protocol với DB Server IP và Port và credentials (username, password của DB). Quá trình Application Server connect đến DB Server để lấy dữ liệu đạt được thông qua 1 cơ chế gọi là Database Connection.
Một khi connection đến Database được tạo, nó có thể open và close bất kì lúc nào và chúng ta cũng có thể set timeout cho chúng (connection).
Nếu mà ko có connection thì việc giao tiếp với database không thể thực hiện. Tạo một Database Connection là một hoạt động tốn kém.
Vòng đời của 1 Database Connection
Chúng ta có thể xem chi tiết về Database Connection ở hình dưới.
- Mở connection đến database sử dụng Connection String
- Authenticating trước khi thiết lập connection
- Khởi tạo và mở 1 TCP socket cho đọc và ghi data
- Gửi và nhận data trên socker socket
- Đóng database connection
- Đóng TCP socket
Quá trình tạo connection đến Database là quá nhiều bước là hoạt động đắt đỏ và tốn thời gian. Nếu ứng dụng của bạn tăng trưởng về người dùng và bạn mở connection mỗi request, số connection được tạo đồng thời tại 1 thời điểm tăng lên và nó sẽ làm tăng CPU, Ram, Database có thể bị treo việc đó là rất nguy hiểm.
Đó là lí do mà chúng ta dùng Connection Pool bằng cách không tạo connection mỗi request và sử dụng lại connection đã tồn tại. Nếu không có connection nào tồn tại trong Pool thì sẽ tạo mới.
Database Connection Pool là gì?
Connection Pool là một phương pháp để làm tăng hiệu năng của hệ thống cho vấn đề khởi tạo connnection. Connection Pool là Pool của Database Connection, nó có thể được tạo trước khi mà application được khởi chạy và chia sẻ Connection khi Application cần truy cập vào Database.
1 Database Connection được tái sử dụng từ Connection Pool như thế nào?
Hình bên dưới đã mô tả chi tiết cách mà 1 connection được tái sử dụng.
Tại sao cần Connection Pool?
- Database Connection được khởi tạo với chi phí đắt đỏ, nên thay vì tạo chúng ở mỗi request thì ta sẽ khởi tạo trước và gọi đến bất cứ khi nào cần truy cập vào Database.
- Database là tài nguyên được chia sẻ, do đó việc tạo 1 pool của connections và chia sẻ chúng trên tất cả các transaction là điều hợp lý.
- Datatabase Connection Pool thì giới hạn lượng truy cập vào Database tại 1 thời điểm giúp giảm thiểu việc Database Server bị treo.