Hyperdrive là một dịch vụ quản lý connection-pooling cho phép Workers kết nối trực tiếp với các cơ sở dữ liệu PostgreSQL – bao gồm cả những cơ sở dữ liệu sử dụng tiện ích mở rộng pgvector để tìm kiếm vector. Bằng cách duy trì một tập hợp các kết nối cơ sở dữ liệu có thể tái sử dụng gần với máy chủ, Hyperdrive giúp cắt giảm chi phí handshake vốn từ lâu đã gây cản trở các tác vụ AI tại edge.
Tại sao Workers và PostgreSQL xung đột
Cloudflare Workers chạy dưới dạng các hàm JavaScript có thời gian tồn tại ngắn tại hàng chục vị trí edge. Mỗi yêu cầu đến sẽ bắt đầu một tiến trình mới, và mô hình thông thường là mở một kết nối TCP mới tới cơ sở dữ liệu backend. Tuy nhiên, PostgreSQL lại yêu cầu một kết nối ổn định cho mỗi tiến trình client và giới hạn tổng số kết nối đồng thời. Kết quả là dẫn đến hai vấn đề:
- Chi phí kết nối cao – việc thiết lập một kết nối đòi hỏi nhiều lượt truyền tải qua lại (round trips) để xác thực và thương lượng giao thức. Những lượt truyền tải này làm tăng độ trễ cho mỗi yêu cầu.
- Giới hạn kết nối – Workers có thể mở rộng lên tới hàng nghìn lượt thực thi đồng thời, nhanh chóng làm cạn kiệt connection pool của PostgreSQL và có khả năng làm sập cơ sở dữ liệu.
Cách Hyperdrive thu hẹp khoảng cách
Hyperdrive nằm giữa một Worker và cơ sở dữ liệu, duy trì một pool các kết nối bền vững trên một máy chủ có vị trí mạng gần với thực thể PostgreSQL. Từ góc độ của Worker, thay đổi duy nhất là một chuỗi kết nối (connection string) mới. Về mặt nội bộ, proxy này tái sử dụng một kết nối hiện có cho mỗi truy vấn đến, giúp loại bỏ chi phí handshake.
Việc thiết lập được tối giản hóa một cách có chủ đích:
- Chạy Wrangler CLI (công cụ dòng lệnh của Cloudflare) để tạo một instance Hyperdrive, cung cấp URL cơ sở dữ liệu gốc.
- Thêm Hyperdrive binding đã được tạo vào tệp cấu hình
wrangler.toml. - Sử dụng một driver tương thích như
node-postgrestrong mã nguồn Worker; driver sẽ coi endpoint của Hyperdrive như một máy chủ PostgreSQL thông thường.
Vì mật khẩu cơ sở dữ liệu chỉ nằm trong cấu hình Hyperdrive, nó không bao giờ xuất hiện trong mã nguồn của Worker, giúp giảm thiểu bề mặt tấn công.
Các mẹo thực tế cho tìm kiếm vector
Các tác vụ tìm kiếm vector sử dụng pgvector liên quan đến các mảng số thực dấu phẩy động lớn, vốn có xu hướng thay đổi trong mỗi truy vấn. Hành vi mặc định của Hyperdrive bao gồm một bộ nhớ đệm đọc (read cache), điều này có thể xung đột với dữ liệu liên tục thay đổi. Để giữ cho kết quả luôn mới nhất, hãy khởi tạo một cấu hình Hyperdrive thứ hai với tính năng caching đã được tắt.
Các giao dịch (transaction) chạy lâu là một cạm bẫy khác. Việc giữ một kết nối cơ sở dữ liệu trong khi chờ phản hồi từ một mô hình AI bên ngoài sẽ chiếm dụng một slot trong pool và làm mất đi mục đích của việc pooling. Mô hình được khuyến nghị là:
- Mở một transaction.
- Thực thi truy vấn.
- Commit ngay lập tức.
- Gọi mô hình AI bên ngoài transaction.
Việc tinh chỉnh các tham số pgvector (ví dụ: cài đặt hnsw.ef_search để kiểm soát độ chính xác của tìm kiếm) có thể được thực hiện bằng câu lệnh SET LOCAL bên trong một transaction ngắn. Điều này đảm bảo thay đổi chỉ áp dụng cho truy vấn hiện tại và không ảnh hưởng đến các Worker khác đang dùng chung pool.
Những giới hạn còn tồn tại
Hyperdrive không di dời chính cơ sở dữ liệu. Nếu máy chủ PostgreSQL nằm ở một vùng cloud xa xôi, độ trễ vẫn sẽ bị giới hạn bởi khoảng cách vật lý đó. Tính năng “Smart Placement” của Cloudflare có thể giúp ích bằng cách định tuyến các Worker đến node edge gần nhất cũng có một instance Hyperdrive, nhưng nó không thể loại bỏ hoàn toàn các lượt truyền tải mạng (network round-trip) cơ bản.
Lớp caching, mặc dù hữu ích cho các lượt đọc tĩnh, sẽ thường xuyên bị trượt (miss) đối với dữ liệu vector thay đổi theo từng yêu cầu. Các nhà phát triển cần cân nhắc sự đánh đổi giữa tỷ lệ cache hit và độ tươi mới của kết quả tìm kiếm.
Khi nào nên chọn một giải pháp thay thế
Nếu một ứng dụng chỉ cần lưu trữ vector thuần túy mà không cần các phép join quan hệ, Cloudflare cung cấp một dịch vụ chuyên dụng gọi là Vectorize. Vectorize lưu trữ các vector trực tiếp tại edge và loại bỏ nhu cầu về một backend PostgreSQL. Hyperdrive vẫn là lựa chọn tốt hơn khi các vector cần được join với các bảng quan hệ hiện có, chẳng hạn như hồ sơ người dùng hoặc lịch sử giao dịch.
Tổng kết
Hyperdrive cung cấp cho các nhà phát triển edge một công cụ thực tế để chạy các tìm kiếm vector dựa trên AI mà không làm quá tải giới hạn kết nối PostgreSQL của họ. Nó cắt giảm độ trễ handshake, tập trung hóa thông tin xác thực và cung cấp khả năng kiểm soát chi tiết đối với việc caching và độ dài transaction. Dịch vụ này không xóa bỏ khoảng cách cơ bản giữa edge và cơ sở dữ liệu, và việc cache-miss vẫn là một mối quan tâm, nhưng đối với các tác vụ cần cả phép join quan hệ và độ tương đồng vector, Hyperdrive là con đường trực tiếp nhất để xây dựng một stack edge có khả năng mở rộng và độ trễ thấp.
