Hatchet, một nền tảng điều phối tác vụ nền dựa trên PostgreSQL, đã chính thức ra mắt phiên bản v1. Nền tảng này nhằm giải quyết những thách thức phổ biến mà các nhà phát triển gặp phải khi quản lý tác vụ nền ở quy mô lớn, cung cấp một giải pháp thay thế cho các hệ thống hàng đợi tác vụ truyền thống như Celery hoặc BullMQ, cũng như các công cụ điều phối quy trình làm việc như Temporal và Airflow.
Các tác vụ nền là yếu tố thiết yếu cho các ứng dụng hiện đại, giúp giảm tải công việc từ máy chủ web và đảm bảo các hoạt động quan trọng hoàn thành ngay cả trong thời điểm lưu lượng truy cập tăng đột biến. Mặc dù nhiều nhà phát triển bắt đầu với các hàng đợi đơn giản dựa trên Redis hoặc RabbitMQ, những giải pháp này thường trở nên khó gỡ lỗi và giám sát khi ứng dụng ngày càng phức tạp.
Kiến trúc dựa trên PostgreSQL với khả năng mở rộng ấn tượng
Đội ngũ Hatchet đã thực hiện một sự thay đổi kiến trúc đáng kể trong phiên bản v1, từ bỏ mô hình FOR UPDATE SKIP LOCKED truyền thống thường được sử dụng trong các hàng đợi dựa trên PostgreSQL. Theo các nhà phát triển, cách tiếp cận này không mở rộng tốt khi vượt quá 25.000 truy vấn mỗi giây, đặc biệt khi xử lý nhiều worker và một lượng lớn tác vụ tồn đọng.
Ban đầu chúng tôi đã kết hợp một số bảng quy trình làm việc với các bảng giám sát... Bảng này sử dụng UUID làm khóa chính, vì chúng tôi muốn sử dụng UUID qua API thay vì ID tự tăng. Các UUID đã gây ra một số vấn đề về sau khi cố gắng xóa dữ liệu theo lô và ngăn chặn tình trạng phình to chỉ mục.
Đội ngũ đã triển khai một số tối ưu hóa, bao gồm việc tách bảng giám sát khỏi bảng hàng đợi để ngăn chặn các vấn đề như phình to bảng, đệm các thao tác đọc và ghi để giảm tải cơ sở dữ liệu, và chuyển các bảng có khối lượng lớn sang sử dụng cột identity thay vì UUID. Những thay đổi này đã cải thiện đáng kể hiệu suất và tính ổn định dưới tải nặng.
Các mô hình thực thi tác vụ linh hoạt
Hatchet hỗ trợ nhiều mẫu thực thi tác vụ, đáp ứng nhu cầu khác nhau của nhà phát triển. Nền tảng cung cấp cả hàng đợi tác vụ truyền thống cho các công việc nền đơn giản và điều phối quy trình làm việc phức tạp hơn thông qua đồ thị có hướng không chu trình (DAG) và các mẫu thực thi bền vững.
Đối với các nhà phát triển đến từ các hệ thống như Celery hoặc SQS, Hatchet cung cấp chức năng hàng đợi quen thuộc với khả năng giám sát được cải thiện. Đối với những người cần quy trình làm việc phức tạp hơn, nền tảng hỗ trợ tạo tác vụ con và các mẫu thực thi bền vững tương tự như quy trình làm việc và hoạt động của Temporal.
Một người dùng đã nhấn mạnh việc hỗ trợ Pydantic chính thức trong SDK v1 là một lợi thế lớn cho các nhà phát triển chuyển từ Celery, lưu ý rằng tính an toàn về kiểu dữ liệu cải thiện đáng kể trải nghiệm phát triển. Sự kết hợp của các SDK Python và TypeScript cũng cho phép linh hoạt hơn trong việc triển khai, với cả hỗ trợ Go cũng có sẵn.
Các tính năng chính của Hatchet
- Hàng đợi: Hàng đợi tác vụ bền vững cho việc thực thi tác vụ đáng tin cậy
- Hỗ trợ ngôn ngữ: SDK cho Python, TypeScript và Go
- Điều phối tác vụ: Hỗ trợ DAG (Đồ thị có hướng không chu trình)
- Kiểm soát luồng: Logic có điều kiện và phân nhánh
- Lập lịch: Thực thi tác vụ dựa trên thời gian
- Quản lý đồng thời: Kiểm soát đồng thời động
- Giới hạn tốc độ: Kiểm soát tốc độ thực thi tác vụ
- Giám sát: Bảng điều khiển web thời gian thực
- Tùy chọn triển khai: Dịch vụ đám mây hoặc tự lưu trữ
Phương pháp triển khai
- Hatchet Cloud: Dịch vụ được quản lý
- Hatchet Lite: Tùy chọn tự lưu trữ đóng gói
- Docker Compose: Triển khai đa container
- Kubernetes: Có sẵn biểu đồ Helm
Điểm so sánh
- so với Temporal: Tập trung nhiều hơn vào nhà phát triển ứng dụng thay vì điều phối quy trình làm việc
- so với Hàng đợi tác vụ (BullMQ, Celery): Giám sát tốt hơn, thực thi bền vững hơn
- so với Nền tảng DAG (Airflow, Prefect, Dagster): Tập trung nhiều hơn vào nhu cầu ứng dụng hơn là đường ống dữ liệu
- so với Cloud Tasks: Khả năng điều phối phức tạp hơn nhưng hỗ trợ webhook tương tự
Trải nghiệm nhà phát triển và giám sát
Hatchet đặt trọng tâm đáng kể vào khả năng quan sát và trải nghiệm nhà phát triển. Không giống như nhiều hệ thống hàng đợi tác vụ nơi việc giám sát trở nên khó khăn ở quy mô lớn, Hatchet tách biệt cơ sở hạ tầng giám sát khỏi các bảng hàng đợi, cho phép các nhà phát triển truy vấn cả hàng đợi đang hoạt động và dữ liệu tác vụ lịch sử mà không làm giảm hiệu suất.
Nền tảng bao gồm một bảng điều khiển web thời gian thực cung cấp khả năng hiển thị được cải thiện so với các công cụ như Flower của Celery. Trọng tâm này về giám sát giải quyết một điểm đau phổ biến được người dùng nêu ra - hiểu điều gì xảy ra khi tác vụ thất bại và làm thế nào để gỡ lỗi vấn đề một cách hiệu quả.
Một số người dùng đã lưu ý các khía cạnh chưa hoàn thiện trong bảng điều khiển và tài liệu, mặc dù đội ngũ có vẻ phản hồi tích cực với các góp ý. Việc tách biệt giám sát khỏi các bảng hàng đợi cũng cho phép lựa chọn chạy giám sát trên một cơ sở dữ liệu hoàn toàn riêng biệt nếu cần thiết, cung cấp tính linh hoạt bổ sung cho các triển khai quy mô lớn.
Tùy chọn triển khai và tích hợp
Hatchet có sẵn cả dưới dạng dịch vụ đám mây và giải pháp tự triển khai. Đối với tự triển khai, đội ngũ cung cấp tùy chọn hatchet-lite gói gọn tất cả các dịch vụ nội bộ, cũng như các tùy chọn triển khai phức tạp hơn thông qua Docker Compose và Helm charts cho Kubernetes.
Nền tảng cũng hỗ trợ webhook workers, cho phép các tác vụ kích hoạt các điểm cuối HTTP thay vì yêu cầu các worker chạy lâu dài chuyên dụng. Cách tiếp cận này cung cấp tính linh hoạt tương tự như các dịch vụ như Google Cloud Tasks, mặc dù một số người dùng lưu ý rằng chức năng này dường như được ghi tài liệu ít nổi bật hơn so với các tính năng khác.
Trong khi trọng tâm chính của Hatchet là dành cho các nhà phát triển Python, TypeScript và Go, đội ngũ đang theo dõi các yêu cầu về SDK ngôn ngữ bổ sung. Kiến trúc của nền tảng sử dụng gRPC cho giao tiếp worker có thể tạo ra thách thức cho việc tích hợp API trực tiếp mà không sử dụng SDK chính thức.
Khi quản lý tác vụ nền tiếp tục là một thành phần quan trọng của kiến trúc ứng dụng hiện đại, cách tiếp cận của Hatchet kết hợp độ tin cậy của PostgreSQL với các tính năng điều phối nâng cao đặt nó như một lựa chọn hấp dẫn cho các đội phát triển đang tìm cách mở rộng khả năng xử lý nền của họ.
Tham khảo: Run Background Tasks at Scale