17 điểm bởi xguru 2025-05-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • Công cụ pooling giao dịch + sharding + cân bằng tải cho PostgreSQL được viết bằng Rust + Tokio, quản lý hiệu quả hàng trăm cơ sở dữ liệu và hàng trăm nghìn kết nối
  • Hoạt động tương tự PgBouncer nhưng là proxy lớp ứng dụng (OSI L7) chuyên cho PostgreSQL, hỗ trợ cả phân tích truy vấn và sao chép
  • Có thể triển khai dễ dàng bằng Kubernetes và Docker; từ cấu hình cụm, cân bằng tải, sao chép đến quản lý nhiều shard đều có thể xử lý bằng một cấu hình duy nhất
  • Cùng với tính năng quản lý sao chép logic riêng, có thể mở rộng sharding cho cụm PostgreSQL hiện có mà không cần dừng dịch vụ

Tính năng chính

  • Cân bằng tải

    • Phân tán lưu lượng ở OSI Layer 7 dựa trên truy vấn PostgreSQL
    • Tự động định tuyến SELECT tới bản sao, còn INSERT/UPDATE v.v. tới nút chính
    • Hỗ trợ các chiến lược: round robin, random, least active connections, v.v.
    • Health check thời gian thực và failover tự động khi xảy ra sự cố
  • Pooling giao dịch

    • Tương tự PgBouncer, hỗ trợ pooling theo phiên/giao dịch
    • Có thể phục vụ hàng trăm nghìn client chỉ với một số ít kết nối PostgreSQL
  • Sharding và sao chép

    • Phân tích SQL để trích xuất shard key và tự động chuyển truy vấn tới shard tương ứng
    • Với truy vấn liên shard, ghép kết quả trong bộ nhớ để trả về cho người dùng dưới dạng một phản hồi duy nhất
    • Lệnh COPY cũng được tách xử lý theo từng shard
    • Hỗ trợ sao chép logic: có thể mở rộng sharding cho DB hiện có trong trạng thái không gián đoạn
  • Thay đổi cấu hình theo thời gian thực

    • Sử dụng cấu hình .toml kiểu PgBouncer, có thể thay đổi cấu hình mà không cần khởi động lại
    • Có thể cấu hình xác thực theo người dùng, kết nối theo cơ sở dữ liệu và cả thông tin shard
  • Giám sát

    • Hỗ trợ cổng quản trị PgBouncer tiêu chuẩn + OpenMetrics
    • Bao gồm ví dụ tích hợp Datadog và dashboard

1 bình luận

 
kaydash 2025-05-08

Tôi đang dùng patroni cho cấu hình multi-master
Nếu là cấu hình có nhiều yêu cầu đọc thì có vẻ đáng để thử dùng như maxscale