Microsoft mã nguồn mở pg_durable: Chạy workflow bền vững trực tiếp trên PostgreSQL

Phần mềm10 tháng 6, 2026·4 phút đọc

Microsoft vừa mã nguồn mở pg_durable, một tiện ích mở rộng cho PostgreSQL cho phép chạy các workflow bền vững ngay bên trong cơ sở dữ liệu mà không cần hệ thống điều phối bên ngoài. Công cụ này giúp các nhà phát triển đơn giản hóa việc quản lý trạng thái, thử lại và khôi phục cho các tác vụ SQL chạy dài.

Microsoft mã nguồn mở pg_durable: Chạy workflow bền vững trực tiếp trên PostgreSQL

Microsoft vừa chính thức mã nguồn mở pg_durable, một tiện ích mở rộng mới cho PostgreSQL cho phép thực hiện các quy trình làm việc (workflow) bền vững trực tiếp ngay bên trong cơ sở dữ liệu. Động thái này nhằm loại bỏ sự phụ thuộc vào các hệ thống điều phối (orchestration) bên ngoài, giúp đơn giản hóa kiến trúc ứng dụng.

Theo Microsoft, pg_durable được thiết kế để giải quyết vấn đề phức tạp khi các nhà phát triển phải kết hợp nhiều công cụ khác nhau như cron jobs, background workers, hàng đợi tin nhắn (message queues) và các bộ điều phối bên ngoài để xây dựng các hàm SQL chạy dài và chịu lỗi. Với pg_durable, các workflow này có thể được biểu diễn trực tiếp bằng ngôn ngữ SQL, và tiện ích sẽ tự động xử lý các vấn đề liên quan đến thực thi như thử lại (retries), phân tách tác vụ (fan-out) và khôi phục sau lỗi.

Minh họa về pg_durableMinh họa về pg_durable

Thực thi bền vững ngay trong Database

Một lợi ích lớn của pg_durable là khả năng quản lý trạng thái thử lại, theo dõi tiến độ và tạo điểm kiểm tra (checkpointing) hoàn toàn nằm trong PostgreSQL thay vì ở các ứng dụng bên ngoài. Microsoft cho rằng điều này cho phép "loại bỏ hoàn toàn một số worker ở tầng ứng dụng, người tiêu dùng hàng đợi hoặc mã kết nối scheduler".

Về mặt kỹ thuật, một hàm pg_durable là một đồ thị gồm các bước SQL mà PostgreSQL thực thi và lưu điểm kiểm tra trong quá trình chạy. Nếu cơ sở dữ liệu bị sập, khởi động lại hoặc một bước thực thi thất bại, quá trình sẽ tự động tiếp tục từ điểm kiểm tra bền vững cuối cùng thay vì buộc nhà phát triển phải xây dựng lại trạng thái thủ công.

Tiện ích này lưu trữ trạng thái thực thi của hàm trong các bảng của PostgreSQL, cho phép các workflow tồn tại qua các sự cố sập, khởi động lại và chuyển đổi failover. Nó cung cấp một Ngôn ngữ dành riêng cho miền (DSL) với 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.

Cú pháp và Ví dụ minh họa

pg_durable giới thiệu các toán tử đặc biệt để định nghĩa luồng công việc. Ví dụ dưới đây minh họa một hàm bền vững xử lý dữ liệu theo các bước riêng biệt:

SELECT df.start(
'SELECT id FROM documents WHERE processed = false LIMIT 100' |=> 'batch'
~> 'UPDATE documents SET processed = true WHERE id = ANY($batch)'
);

Đoạn mã trên sử dụng ~>|=>, hai toán tử đặc biệt do pg_durable định nghĩa. Toán tử |=> cho phép liên kết kết quả của một truy vấn vào một biến (ở đây là $batch), trong khi ~> cho phép thực thi tuần tự các nút. Hàm df.start sẽ khởi động quá trình thực thi hàm bền vững này.

Ví dụ tiếp theo cho thấy cách thực hiện hai nút song song và chờ hoàn thành của chúng bằng hàm df.join hoặc toán tử & tương đương:

df.join('SELECT count(*) FROM a', 'SELECT count(*) FROM b')\
'SELECT 1' & 'SELECT 2'

Ứng dụng thực tế

Microsoft định vị tiện ích mở rộng này đặc biệt hữu ích cho các pipeline nhúng vector (vector embedding pipelines), nơi dữ liệu cần được chia nhỏ (chunking), gửi đến API nhúng và sau đó upsert vào pgvector. Ngoài ra, nó cũng phù hợp cho các tác vụ bảo trì theo lịch, chẳng hạn như phát hiện sự phình to của dữ liệu (bloat), kích hoạt thông báo, chờ phê duyệt và thực hiện các hành động tiếp theo.

Về mặt kiến trúc, pg_durable được thiết kế tối giản, chỉ bao gồm một tiện ích mở rộng Postgres và một background worker mà không có bất kỳ mặt phẳng điều khiển (control plane) bên ngoài nào. Worker chịu trách nhiệm chạy các hàm bền vững được xây dựng dựa trên hai thư viện Rust: duroxide (cung cấp thời gian chạy điều phối) và duroxide-pg (lưu trữ trạng thái trong PostgreSQL).

Thực thi bền vững (Durable execution) là một mô hình phần mềm cho phép các quy trình chạy dài tự động tiếp tục từ điểm thất bại, giúp đơn giản hóa các hệ thống phân tán và tạo điều kiện thuận lợi cho các kiến trúc tác nhân (agent) mạnh mẽ.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗