17 คะแนน โดย xguru 2025-05-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เครื่องมือ PostgreSQL transaction pooling + sharding + load balancing ที่เขียนด้วย Rust + Tokio สามารถ จัดการฐานข้อมูลหลายร้อยตัวและการเชื่อมต่อหลายแสนรายการได้อย่างมีประสิทธิภาพ
  • ทำงานคล้าย PgBouncer แต่เป็นพร็อกซีระดับแอปพลิเคชัน (OSI L7) ที่เชี่ยวชาญด้าน PostgreSQL และ รองรับทั้งการวิเคราะห์คิวรีและการทำ replication
  • ดีพลอยได้ง่ายด้วย Kubernetes และ Docker และสามารถจัดการทั้งการตั้งค่าคลัสเตอร์, load balancing, replication และการดูแลหลายชาร์ดได้ด้วย คอนฟิกเดียว
  • มาพร้อมความสามารถในการจัดการ logical replication ของตัวเอง และ ขยายชาร์ดให้กับคลัสเตอร์ PostgreSQL เดิมได้แบบไม่ต้องหยุดระบบ

ฟีเจอร์หลัก

  • โหลดบาลานซ์

    • กระจายทราฟฟิกตามคิวรี PostgreSQL บน OSI Layer 7
    • SELECT จะถูกส่งไปยัง replica ส่วน INSERT/UPDATE เป็นต้น จะถูกส่งไปยังโหนดหลักโดยอัตโนมัติ
    • รองรับกลยุทธ์: round robin, random, least active connections เป็นต้น
    • มี health check แบบเรียลไทม์และ failover อัตโนมัติเมื่อเกิดปัญหา
  • ทรานแซกชันพูลลิง

    • รองรับ การพูลลิงระดับ session/transaction คล้าย PgBouncer
    • รองรับไคลเอนต์หลายแสนรายได้ด้วยการเชื่อมต่อ PostgreSQL เพียงไม่กี่รายการ
  • ชาร์ดดิ้งและการทำ replication

    • วิเคราะห์ SQL เพื่อ ดึง shard key และส่งคิวรีไปยังชาร์ดที่เกี่ยวข้องโดยอัตโนมัติ
    • สำหรับคิวรีข้ามชาร์ด จะ รวมผลลัพธ์ในหน่วยความจำและส่งกลับเป็นคำตอบเดียวให้ผู้ใช้
    • คำสั่ง COPY ก็ถูกแยกประมวลผลตามแต่ละชาร์ดได้
    • รองรับ logical replication: ขยายชาร์ดจากฐานข้อมูลเดิมได้แบบไม่ต้องหยุดระบบ
  • การเปลี่ยนคอนฟิกแบบเรียลไทม์

    • ใช้คอนฟิก .toml สไตล์ PgBouncer และ เปลี่ยนการตั้งค่าได้โดยไม่ต้องรีสตาร์ต
    • กำหนดการยืนยันตัวตนตามผู้ใช้, การเชื่อมต่อแยกตามฐานข้อมูล และข้อมูลชาร์ดได้
  • การมอนิเตอร์

    • รองรับพอร์ตจัดการมาตรฐานของ PgBouncer + OpenMetrics
    • มีตัวอย่างการเชื่อมต่อ Datadog และแดชบอร์ดมาให้

1 ความคิดเห็น

 
kaydash 2025-05-08

ตอนนี้ใช้ patroni กับการตั้งค่าแบบมัลติมาสเตอร์อยู่
ถ้าเป็นระบบที่มีคำขออ่านจำนวนมาก ก็น่าจะลองใช้แบบ maxscale ได้เหมือนกัน