Trong con đường tìm hiểu tối ưu hóa con database PostgreSQL của mình, tôi đã tìm được một bài viết rất hay so sánh 2 phần mềm thông dụng nhất có tác dụng quản lý số lượng session trong PostgreSQL, đó là pgpool II và pgbouncer. Thấy khá hữu ích cho mọi người nên tôi đã dịch ra tiếng Việt cho anh em mình dễ theo dõi nhé.

Link bài viết gốc ở đây:

Đọc thêm  PgPool là gì

   Bài dịch – Phần 1: So sánh về tính năng

Trong các bài viết trước, chúng tôi đã nói sơ qua về việc sử dụng PgBouncer và Pgpool-II, kiến trúc Connection Pooling và những ưu và nhược điểm của việc sử dụng 1 trong số chúng để triển khai database PostgreSQL của bạn. Trong bài viết này, chúng tôi sẽ so sánh trực diện PgBouncer và Pgpool-II về tính năng và hiệu năng khi triển khai trên database PostgreSQL.

Hãy bắt đầu bằng cách so sánh các tính năng của PgBouncer với Pgpool-II:

 

 

 

 

PgBouncer Pgpool-II
Tiêu tốn tài nguyên Chỉ sử dụng một process nên rất nhẹ. PgBouncer chỉ cần lượng bộ nhớ nhỏ, ngay cả khi xử lý các tập dữ liệu lớn.

Winner!

Nếu chúng ta yêu cầu n kết nối song song, điều này sẽ tạo ra n process con. Theo mặc định, có 32 process con được chia nhỏ.
Khi nào connection được tái sử dụng PgBouncer xác định một Pool connection cho mỗi cặp user-database. Pool này được chia sẻ giữa tất cả các máy khách, vì vậy luôn có kết nối trong Pool cho tất cả các máy khách.

Winner!

Pgpool-II định nghĩa một process cho mỗi process con. Chúng ta không thể kiểm soát máy khách sẽ được kết nối với process con nào. Một máy khách chỉ được hưởng lợi nếu nó kết nối với đúng một process con mà trước đó đã phục vụ một connection khác cho đúng cặp user-database mà máy khách hiện tại đang dùng.
Các chế độ Pooling PgBouncer hỗ trợ ba chế độ khác nhau: session (connection được trả về pool khi máy khách ngắt kết nối), transaction(được trả về pool khi user thực hiện commit hoặc rollback) hoặc statement (connect được trả lại pool sau khi thực hiện mỗi câu lệnh).

Quá nhiều option đúng không?

Winner

Pgpool-II chỉ hỗ trợ chế độ session – hiệu quả đến đâu phụ thuộc vào hành vi trên máy khách khá nhiều.
Hỗ trợ High Avaiability (HA) Không hỗ trợ Có thể cấu hình tính năng High Avaiability cho PostgreSQL được hỗ trợ thông qua các process theo dõi được tích hợp sẵn trong Pgpool-II.

Winner!

Hỗ trợ Load Balancing Không hỗ trợ – PgBouncer khuyến nghị sử dụng HAProxy để có 2 chức năng High Avaiability và Load Balancing Hỗ trợ cân bằng tải tự động – thậm chí còn đủ thông minh để chuyển hướng các câu lệnh chỉ đọc (read-only) đến các database standby và câu lệnh có ghi vào database chính.

Winner!

Hỗ trợ nhiều cluster Một PgBouncer instance có thể đứng trước nhiều PostgreSQL cluster (một node hoặc tập hợp các replication). Điều này có thể giảm chi phí cho phần mềm trung gian khi có nhiều PostgreSQL cluster.

Winner! (Lưu ý – lợi thế này chỉ dành cho các trường hợp cụ thể)

Pgpool-II không hỗ trợ nhiều cluster.
Điều khiển connection PgBouncer cho phép giới hạn các connection trên mỗi pool, mỗi database, mỗi user hoặc mỗi máy khách.

Winner!

Pgpool-II chỉ cho phép giới hạn số lượng connection tổng thể.
Hàng đợi connection PgBouncer hỗ trợ xếp hàng ở cấp độ ứng dụng.

Winner!

Pgpool-II hỗ trợ xếp hàng ở cấp kernel – điều này có thể khiến pg_bench trên CentOS 6 bị đóng băng.
Khả năng xác thực (Authentication)  

PgBouncer hỗ trợ cơ chế xác thực Pass-through

Winner!

Pgpool-II không hỗ trợ xác thực Pass-through – người dùng và mật khẩu được mã hóa md5 phải được liệt kê trong một tệp và được cập nhật theo cách thủ công mỗi khi người dùng cập nhật mật khẩu. Pgpool-II hỗ trợ xác thực không cần mật khẩu thông qua chứng chỉ PAM hoặc SSL. Tuy nhiên, chúng phải được thiết lập bên ngoài hệ thống PostgreSQL, trong khi PgBouncer có thể đẩy nó xuống cho máy chủ PostgreSQL xử lý.
Khả năng quản lý PgBouncer cung cấp một database ảo báo cáo nhiều số liệu thống kê hữu ích khác nhau. Pgpool-II cung cấp giao diện quản trị chi tiết, bao gồm giao diện người dùng GUI.

Winner!

Xác thực Host-based Có hỗ trợ Có hỗ trợ
SSL  Hỗ trợ toàn bộ Hỗ trợ toàn bộ
Logical Replication Không được hỗ trợ thông qua PgBouncer. Được hỗ trợ thông qua Pgpool-II, nhưng điều này được thực hiện bằng cách gửi truy vấn ghi tới tất cả các node và thường không được khuyến khích.
License ISC – rất dễ dãi, về cơ bản cho phép sử dụng tất cả. Giấy phép tùy chỉnh – dễ dãi như nhau 😀

   Tóm lại:

   Pgpool-II là một công cụ tuyệt vời nếu bạn cần tính năng Load BalancingHigh Availability. Connection Pooling chỉ nên được coi là bia kèm lạc thôi

   PgBouncer chỉ làm một việc, nhưng nó thực sự rất tốt. Nếu mục tiêu là hạn chế số lượng kết nốigiảm tiêu thụ tài nguyên, thì PgBouncer sẽ lựa chọn sáng suốt.

   Cũng hoàn toàn ổn khi sử dụng cả PgBouncer và Pgpool-II. Bạn có thể dùng PgBouncer để cung cấp Connection Pooling, kết nối với Pgpool-II đế cung cấp khả năng Load Balancing và High Availability. Điều này mang lại cho bạn ưu điểm của cả 2 công cụ. WOW!

 

Phần 2 của bài viết, xin mời các bạn đọc tại đây

Đọc thêm  So sánh Pgpool-II và Pgbouncer – Phần 2

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    5 1 vote
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments