Microsoft mã nguồn mở pg_durable: Giải pháp thực thi bền vững ngay bên trong PostgreSQL

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

Microsoft vừa công bố mã nguồn mở pg_durable, một tiện ích mở rộng cho PostgreSQL cho phép chạy các quy trình dài hạn và chịu lỗi trực tiếp trong cơ sở dữ liệu. Công cụ này giúp các kỹ sư backend và dữ liệu đơn giản hóa kiến trúc hệ thống bằng cách loại bỏ các bộ điều phối bên ngoài, thay vào đó định nghĩa workflow bằng SQL và tự động khôi phục trạng thái sau sự cố.

Microsoft mã nguồn mở pg_durable: Giải pháp thực thi bền vững ngay bên trong PostgreSQL

Microsoft đã giới thiệu pg_durable, một tiện ích mở rộng mới dành cho hệ quản trị cơ sở dữ liệu PostgreSQL, nhằm mang lại khả năng "thực thi bền vững" (durable execution) trực tiếp bên trong engine cơ sở dữ liệu. Đây là tin vui cho các đội ngũ kỹ thuật đang tìm kiếm giải pháp để xử lý các tác vụ nền phức tạp mà không muốn duy trì một hạ tầng dịch vụ riêng biệt.

Workflow GraphWorkflow Graph

Vấn đề pg_durable giải quyết

Thông thường, để xử lý các công việc chạy nền (background jobs) dài hạn, các nhà phát triển thường phải kết hợp nhiều công cụ khác nhau như pg_cron, các hàng đợi (queues), worker processes, và các bảng trạng thái (status tables) để theo dõi tiến trình. Hoặc họ phải sử dụng các bộ điều phối (orchestrators) bên ngoài như Airflow, Temporal hay AWS Step Functions.

pg_durable ra đời để loại bỏ sự phức tạp này ("stitching together"). Nó cho phép định nghĩa workflow dưới dạng một đồ thị các bước SQL ngay bên trong PostgreSQL.

Các tính năng nổi bật

pg_durable hoạt động bằng cách lưu trữ trạng thái của hàm vào PostgreSQL. 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, hệ thống sẽ tự động khôi phục và tiếp tục từ "điểm kiểm tra" (checkpoint) cuối cùng thay vì bắt đầu lại từ đầu.

Các tính năng chính bao gồm:

  • Thực thi bền vững: Trạng thái hàm được lưu trữ, chịu được sự cố, khởi động lại và chuyển đổi failover.
  • Native SQL: Định nghĩa hàm bằng SQL sử dụng các toán tử composable như ~>|=>.
  • 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 bất kỳ dịch vụ bên ngoài nào.
  • Nhận thức cơ sở dữ liệu: Hỗ trợ nguyên thủy cho lập lịch, điều kiện và thực thi song song.

pg_durable Logopg_durable Logo

Đối tượng sử dụng

Microsoft nhắm đến các nhóm người dùng sau cho pg_durable:

  • Các kỹ sư Backend và Data muốn workflow nằm ngay cạnh dữ liệu họ thao tác.
  • DBA và SRE cần tự động hóa các quy trình vận hành (runbooks) phải tồn tại qua các lần khởi động lại và có thể kiểm toán bằng SQL.
  • Các đội xây dựng pipeline dữ liệu hoặc AI cần thực thi bền vững cho từng hàng, tài liệu hoặc lô dữ liệu.

Cách hoạt động

Một hàm pg_durable về cơ bản là một đồ thị các bước SQL mà PostgreSQL thực thi và checkpoint trong quá trình chạy. Người dùng bắt đầu workflow bằng lệnh df.start(...) và nhận về một instance ID.

Ví dụ, để 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)'
);

Về mặt kiến trúc, pg_durable được xây dựng bằng Rust sử dụng framework pgrx. Nó đăng ký một background worker để thực thi các đồ thị hàm này dựa trên hai thư viện Rust cấp thấp: duroxide (runtime điều phối) và duroxide-pg (nhà cung cấp trạng thái hỗ trợ bởi PostgreSQL).

Tính sẵn sàng và Cài đặt

Hiện tại, dự án đang ở trạng thái Preview. Các gói phát hành (Debian packages) đã có sẵn cho PostgreSQL phiên bản 17 và 18 trên nền tảng amd64. 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;.

Dự án cũng hỗ trợ cài đặt thông qua Docker, GitHub Codespace và VS Code Dev Container để thuận tiện cho việc phát triển và thử nghiệm.

Với pg_durable, Microsoft tiếp tục sứ mệnh "đưa tính toán đến gần dữ liệu hơn", giúp giảm độ trễ và đơn giản hóa kiến trúc cho các ứng dụng phụ thuộc nhiều vào PostgreSQL.

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