Nguồn: PlanetScale Blog

Tóm tắt

Database Traffic Control của PlanetScale được implement ở tầng database proxy — tất cả connections từ application đều đi qua proxy này trước khi đến MySQL hoặc PostgreSQL thực sự. Kiến trúc này cho phép PlanetScale intercept và kiểm soát toàn bộ queries trước khi chúng đến database, tạo ra khả năng kiểm soát real-time mà không cần thay đổi code ứng dụng.

Khi một query đến proxy, nó đi qua rule evaluation pipeline gồm ba bước: rule matching (so sánh query với tất cả active rules), action determination (nếu nhiều rules match thì rule có priority cao nhất thắng), và action execution (throttle, block, hoặc kill). Rule matching hỗ trợ nhiều tiêu chí: query patterns (substrings hoặc regex trên normalized query text — literals được replace bằng ? để matching pattern-based), sqlcommenter tags (route dựa trên tag context như endpoint hay application name), database user, và database name.

Kỹ thuật query normalization là yếu tố quan trọng: thay vì matching literal values như WHERE id = 123, proxy normalize query thành WHERE id = ?. Điều này cho phép một rule có thể bắt toàn bộ family of queries với cùng cấu trúc mà không cần liệt kê từng giá trị cụ thể. Đối với queries đang chạy (in-flight), kill action hoạt động bằng cách proxy gửi lệnh terminate đến database — trong PostgreSQL là pg_terminate_backend().

Throttle action thêm delay nhân tạo trước khi forward query đến database, tạo ra áp lực ngược (back-pressure) lên application caller. Đây là kỹ thuật tinh tế hơn block — thay vì từ chối request hoàn toàn, nó làm chậm tốc độ queries để giảm tải mà không break existing connections. Rules có hiệu lực ngay lập tức sau khi tạo, không cần restart hay reload proxy.

👉 Đọc bài gốc