Microsoft mã nguồn mở pg_durable: Thực thi bền vững ngay bên trong PostgreSQL
Microsoft vừa công bố pg_durable, tiện ích mở rộng PostgreSQL cho phép chạy các luồng công việc dài hạn và chịu lỗi trực tiếp trong cơ sở dữ liệu mà không cần hạ tầng bên ngoài. Công cụ này giúp đơn giản hóa việc quản lý trạng thái, xử lý lỗi và tự động khôi phục sau sự cố cho các kỹ sư backend và dữ liệu.

Microsoft vừa chính thức mã nguồn mở pg_durable, một tiện ích mở rộng (extension) mới dành cho cơ sở dữ liệu PostgreSQL. Công cụ này mang đến khả năng thực thi bền vững (durable execution) ngay bên trong database, cho phép các nhà phát triển xây dựng các luồng công việc dài hạn, chịu lỗi mà không cần phụ thuộc vào các dịch vụ hạ tầng bên ngoài.
pg_durable logo
Vấn đề của các luồng công việc nền hiện tại
Đối với các kỹ sư backend và dữ liệu, việc xử lý các tác vụ chạy nền (background jobs) thường đòi hỏi sự kết hợp phức tạp giữa nhiều thành phần: cron jobs, worker processes, message queues và các bảng trạng thái (status tables) để theo dõi tiến trình.
Kiến trúc "ghép nối" này thường gặp nhiều vấn đề đau đầu:
- Nếu hệ thống gặp sự cố giữa chừng, toàn bộ công việc đã hoàn thành có thể phải chạy lại từ đầu.
- Một dòng dữ liệu lỗi hoặc một cuộc gọi API thất bại có thể dẫn đến việc dọn dẹp thủ công và khó xác định lại trạng thái.
- Logic quản lý luồng công việc bị phân tán rải rác khắp nơi, từ SQL, code ứng dụng đến các script cấu hình.
pg_durable mang lại giải pháp gì?
pg_durable giải quyết các vấn đề trên bằng cách đưa khả năng điều phối (orchestration) trực tiếp vào PostgreSQL. Nó cho phép định nghĩa các luồng công việc dưới dạng các hàm SQL, nơi mỗi bước đều được checkpoint (lưu trạng thái) một cách bền vững.
Nếu cơ sở dữ liệu bị sập, khởi động lại hoặc một bước nào đó thất bại, pg_durable sẽ tự động khôi phục và tiếp tục thực thi từ checkpoint gần nhất thay vì bắt đầu lại từ đầu.
Workflow Graph
Đối tượng sử dụng chính
Microsoft thiết kế pg_durable hướng tới các nhóm người dùng sau:
- Kỹ sư Backend và Data: Muốn luồng công việc nằm ngay cạnh dữ liệu mà chúng thao tác.
- DBA và SRE: Cần tự động hóa các quy trình vận hành (runbooks) phải chịu được sự cố restart và có thể kiểm toán thông qua SQL.
- Nhóm xây dựng Data/AI Pipeline: Cần thực thi bền vững cho từng dòng dữ liệu, tài liệu hoặc lô batch.
Các trường hợp sử dụng điển hình
Công cụ này đặc biệt hữu ích cho các khối lượng công việc như:
- Pipeline nhúng Vector (Vector Embedding): Chia nhỏ dữ liệu (chunk), gọi API nhúng và upsert vào pgvector.
- Pipeline nhập liệu (Ingest): Staging, khử trùng lặp, chuyển đổi dữ liệu và xuất các lô lớn.
- Bảo trì theo lịch: Phát hiện lãng phí bộ nhớ (bloat), thông báo, chờ phê duyệt rồi chạy hành động tiếp theo.
- Tổng hợp phân tán (Fan-out aggregation): Chạy các truy vấn độc lập song song, sau đó kết hợp kết quả.
Cách hoạt động và Kiến trúc
pg_durable được xây dựng bằng ngôn ngữ Rust sử dụng framework pgrx. Nó hoạt động như một tiến trình nền (background worker) bên trong PostgreSQL, sử dụng hai thư viện cấp thấp là duroxide (khung tác vụ bền vững) và duroxide-pg (lưu trạng thái vào PostgreSQL).
Người dùng có thể định nghĩa luồng công việc bằng SQL DSL sử dụng các toán tử composable như ~> và |=>.
Ví dụ nhanh về cách sử dụng:
-- Một hàm bền vững xử lý dữ liệu theo từng bước
SELECT df.start(
'SELECT id FROM documents WHERE processed = false LIMIT 100' |=> 'batch'
~> 'UPDATE documents SET processed = true WHERE id = ANY($batch)'
);
Tính năng nổi bật
- Bền vững (Durable): Trạng thái hàm được lưu trữ vào PostgreSQL, chịu được sự cố, restart và failover.
- Native SQL: Định nghĩa hàm bằng SQL sử dụng các toán tử composable.
- Nhận thức Database: Các nguyên thủy cấp cao nhất cho lập lịch, điều kiện và thực thi song song.
- Zero Infrastructure: Chạy dưới dạng tiện ích mở rộng PostgreSQL. Không cần Redis, không cần Temporal hay các dịch vụ bên ngoài.
Tình trạng và Cài đặt
Hiện tại, dự án đang ở giai đoạn Preview. Các gói Debian đã được phát hành cho PostgreSQL phiên bản 17 và 18. Sau khi cài đặt gói, người dùng cần thêm pg_durable vào shared_preload_libraries, khởi động lại PostgreSQL và tạo extension bằng lệnh CREATE EXTENSION pg_durable;.
Đây là một bước tiến thú vị trong xu hướng mang tính toán (compute) lại gần hơn với dữ liệu (data), giúp giảm bớt sự phức tạp của kiến trúc hệ thống hiện đại.
