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