Chỉ cần dùng Postgres để xây dựng Durable Workflows: Tại sao mô hình điều phối truyền thống đã lỗi thời?
Bài viết này lập luận rằng việc sử dụng các bộ điều phối bên ngoài như Temporal hay Airflow là không cần thiết. Thay vào đó, việc tận dụng chính Postgres làm bộ điều phối giúp đơn giản hóa kiến trúc, tăng hiệu suất và giải quyết tốt các vấn đề về khả năng mở rộng, quan sát và bảo mật.

Durable Workflows (quy trình bền vững) là một công cụ đơn giản nhưng cực kỳ mạnh mẽ để xây dựng các chương trình đáng tin cậy. Ý tưởng cốt lõi là trong quá trình chạy, chương trình sẽ thường xuyên lưu trạng thái tiến độ vào một cơ sở dữ liệu. Nhờ đó, nếu chương trình gặp sự cố hoặc bị lỗi, bạn có thể khôi phục nó từ bước hoàn thành gần nhất. Bạn có thể hình dung điều này giống như việc lưu game (save game): bạn lưu tiến độ thường xuyên để nếu máy bị tắt, bạn có thể tải lại (reload) từ điểm lưu đó.
Hình ảnh minh họa về cơ sở dữ liệu và luồng công việc
Thông thường, Durable Workflows được triển khai thông qua điều phối bên ngoài (external orchestration). Đây là mô hình được sử dụng bởi các hệ thống như Temporal, Airflow và AWS Step Functions. Trong mô hình này, các chương trình bền vững được viết dưới dạng các quy trình gồm nhiều bước, mà việc thực thi của chúng được điều phối bởi một bộ điều phối trung tâm.
Khi một khách hàng gửi một quy trình, bộ điều phối sẽ tạo một bản ghi cho nó trong kho dữ liệu, sau đó gửi nó đến một worker để thực thi. Mỗi khi worker hoàn thành một bước, nó gửi kết quả của bước đó trở lại bộ điều phối. Bộ điều phối sẽ lưu kết quả vào kho dữ liệu, sau đó gửi bước tiếp theo. Nếu một worker bị sập, bộ điều phối sẽ gửi quy trình của nó sang worker khác, bắt đầu lại từ bước đã được lưu gần nhất.
Mô hình kiến trúc hệ thống
Tuy nhiên, chúng tôi cho rằng việc điều phối bên ngoài vốn dĩ đã quá phức tạp. Ý tưởng cốt lõi của Durable Workflows là lưu trạng thái chương trình vào cơ sở dữ liệu. Nhưng nếu vấn đề chính là cơ sở dữ liệu, thì không có lý do gì để phải có một máy chủ điều phối riêng biệt. Thay vào đó, việc sử dụng chính cơ sở dữ liệu đó làm bộ điều phối sẽ đơn giản và hiệu quả hơn. Để làm rõ điều này, chúng tôi sẽ tập trung vào việc xây dựng Durable Workflows trên Postgres, vì sự phổ biến, khả năng mở rộng và hệ sinh thái phong phú của nó khiến nó trở thành lựa chọn lý tưởng.
Tại sao nên dùng Postgres làm bộ điều phối?
Trong một hệ thống Durable Workflows được hỗ trợ bởi Postgres, các máy chủ ứng dụng sẽ giao tiếp trực tiếp với Postgres để thực thi các quy trình thay vì thông qua một bộ điều phối trung tâm.
Một khách hàng gửi một quy trình để thực thi bằng cách tạo một mục nhập cho nó trong bảng workflows của Postgres. Các máy chủ ứng dụng sẽ thăm dò (poll) bảng này để lấy các quy trình ra khỏi hàng đợi và thực thi. Khi máy chủ thực thi một quy trình, nó sẽ lưu đầu ra của từng bước vào Postgres. Nếu máy chủ thực thi bị sập, một máy chủ khác có thể khôi phục các quy trình của nó từ các điểm kiểm tra đã lưu.
Thiết kế này làm cho bộ điều phối trung tâm trở nên không cần thiết vì các máy chủ ứng dụng có thể phối hợp thông qua Postgres. Thay vì dựa vào bộ điều phối trung tâm để gửi quy trình đến các worker, các máy chủ sẽ cùng nhau lấy các quy trình khỏi bảng Postgres, sử dụng các cơ chế như mệnh đề khóa để đảm bảo mỗi quy trình chỉ được lấy bởi đúng một worker. Thay vì dựa vào bộ điều phối để lưu đầu ra của các bước, các worker sẽ tự lưu các bước đó vào Postgres. Nếu nhiều worker cố gắng thực thi cùng một quy trình đồng thời, các ràng buộc toàn vẹn của cơ sở dữ liệu Postgres sẽ cho phép chúng phát hiện ra công việc trùng lặp khi lưu điểm kiểm tra và tự động lùi lại.
Thay thế bộ điều phối trung tâm bằng Postgres (hoặc một cơ sở dữ liệu khác) làm cho Durable Workflows trở nên đơn giản hơn về mặt bản chất. Đặc biệt, điều này có nghĩa là các vấn đề khó khăn như khả năng mở rộng, tính sẵn sàng, khả năng quan sát và bảo mật có thể được giải quyết bằng các giải pháp gốc của Postgres đã được hiểu rõ.
Khả năng mở rộng và tính sẵn sàng
Khả năng mở rộng và tính sẵn sàng của một hệ thống Durable Workflows dựa trên cơ sở dữ liệu được quyết định bởi chính cơ sở dữ liệu bên dưới. Hệ thống có thể mở rộng theo chiều ngang bằng cách thêm nhiều máy chủ worker hơn, vì vậy công suất tối đa của nó được xác định bởi tốc độ xử lý các quy trình của cơ sở dữ liệu. Tương tự, các worker có thể thay thế cho nhau và tự do khôi phục trạng thái của nhau, do đó hệ thống luôn sẵn sàng miễn là cơ sở dữ liệu bên dưới vẫn hoạt động.
Khi sử dụng Postgres cụ thể, điều này rất có lợi vì khả năng mở rộng và tính sẵn sàng của Postgres là những vấn đề đã được nghiên cứu kỹ lưỡng với các giải pháp mạnh mẽ. Về khả năng mở rộng, một máy chủ Postgres duy nhất có thể mở rộng theo chiều dọc để xử lý hàng chục nghìn quy trình mỗi giây, và có thể mở rộng thêm bằng cách sử dụng Postgres phân tán (ví dụ: CockroachDB) hoặc sharding. Về tính sẵn sàng, Postgres hỗ trợ sao chép luồng (streaming replication) với chuyển đổi tự động (failover) và các dịch vụ được quản lý cung cấp các triển khai đa vùng sẵn sàng cao ngay lập tức.
Khả năng quan sát (Observability)
Khi sử dụng thực thi bền vững được hỗ trợ bởi Postgres, các quy trình và các bước của chúng được lưu vào các bảng Postgres. Điều này có nghĩa là khả năng quan sát được tích hợp sẵn: bạn có thể quét các điểm kiểm tra đó để giám sát các quy trình theo thời gian thực và trực quan hóa việc thực thi quy trình.
Postgres xuất sắc ở việc này vì hầu như mọi truy vấn quan sát quy trình nào cũng có thể được biểu thị bằng SQL. Ví dụ, đây là một truy vấn để tìm tất cả các quy trình bị lỗi trong tháng qua:
SELECT * FROM workflows WHERE status = 'error' AND created_at > NOW() - INTERVAL '1 month';
Một truy vấn như vậy có thể có vẻ hiển nhiên, nhưng khó có thể nói quá tầm quan trọng của nó. Nó chỉ có thể thực hiện được vì mô hình quan hệ của Postgres cho phép bạn biểu thị các hoạt động lọc và phân tích phức tạp một cách khai báo trong SQL, tận dụng hàng thập kỷ nghiên cứu tối ưu hóa truy vấn. Nhiều hệ thống có mô hình dữ liệu đơn giản hơn, chẳng hạn như các kho lưu trữ key-value được sử dụng bởi các bộ điều phối bên ngoài phổ biến, không có sự hỗ trợ như vậy. Bằng cách lưu trữ dữ liệu quy trình và bước trong các bảng Postgres và tăng cường chúng bằng các chỉ mục phụ cho các truy vấn phân tích nhanh, bạn có được khả năng quan sát hiệu quả cho việc thực thi bền vững của mình "miễn phí".
Độ tin cậy và Bảo mật
Khi sử dụng bộ điều phối bên ngoài cho thực thi bền vững, cả bộ điều phối và kho dữ liệu của nó đều là các điểm thất bại đơn lẻ. Vì chúng trực tiếp điều phối việc thực thi quy trình, nếu một trong hai hệ thống gặp thời gian chết, toàn bộ ứng dụng sẽ không khả dụng. Hơn nữa, vì chúng xử lý và lưu trữ các điểm kiểm tra quy trình và bước, chúng có khả năng truy cập vào dữ liệu ứng dụng nhạy cảm, nghĩa là chúng phải được bảo mật, kiểm soát quyền truy cập và kiểm toán như bất kỳ phần mềm hạ tầng nhạy cảm nào khác.
Ngược lại, điểm thất bại duy nhất trong thực thi bền vững được hỗ trợ bởi Postgres là chính Postgres, và tất cả dữ liệu quy trình được lưu trữ trực tiếp trong Postgres và không bao giờ đi qua bất kỳ hệ thống nào khác. Nếu một ứng dụng đã phụ thuộc vào Postgres, việc áp dụng thực thi bền vững không thêm bất kỳ điểm thất bại mới nào vào hệ thống cũng không giới thiệu bề mặt mới nào để bảo mật. Cơ sở dữ liệu đã là hạ tầng quan trọng, vì vậy việc sử dụng lại chúng để điều phối hợp lý hơn là thêm hạ tầng quan trọng mới cho mục đích đó.
Hình ảnh minh họa bảo mật và dữ liệu
Kết luận
Việc chuyển đổi tư duy từ việc sử dụng các bộ điều phối phức tạp sang tận dụng sức mạnh của chính cơ sở dữ liệu (như Postgres) mang lại lợi ích to lớn. Nó không chỉ đơn giản hóa kiến trúc hệ thống mà còn tận dụng được những thập kỷ tối ưu hóa và độ tin cậy đã có sẵn của Postgres. Đối với các kỹ sư đang tìm kiếm giải pháp xây dựng hệ thống có khả năng phục hồi và mở rộng cao, đây là một hướng đi đáng cân nhắc.
Bài viết liên quan

Phần mềm
Tấn công Cache Poisoning biến các gói npm TanStack thành mối đe dọa nguy hiểm
12 tháng 5, 2026

Phần mềm
Plugin Checkmarx Jenkins bị xâm phạm trong cuộc tấn công chuỗi cung ứng
11 tháng 5, 2026

Phần mềm
Google tung ra Antigravity 2.0: Ứng dụng lập trình thế hệ mới với công cụ CLI và gói đăng ký AI Ultra
19 tháng 5, 2026
