Quack: Giao thức Client-Server mới giúp DuckDB mở rộng khả năng kết nối

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

Đội ngũ phát triển DuckDB vừa công bố giao thức Quack, cho phép các instance DuckDB giao tiếp với nhau theo mô hình client-server. Với nền tảng HTTP và hiệu suất tối ưu, Quack giải quyết bài toán ghi đồng thời từ nhiều tiến trình mà vẫn giữ được sự đơn giản và tốc độ xử lý dữ liệu ấn tượng.

Quack: Giao thức Client-Server mới giúp DuckDB mở rộng khả năng kết nối

DuckDB từ lâu đã được biết đến như một hệ quản trị cơ sở dữ liệu phân tích (OLAP) hoạt động theo kiến trúc in-process (trong tiến trình), tương tự như SQLite. Điều này giúp DuckDB cực kỳ nhanh và dễ tích hợp vào các ứng dụng dữ liệu, nhưng lại gặp hạn chế khi cần ghi dữ liệu đồng thời từ nhiều tiến trình khác nhau. Để giải quyết vấn đề này, đội ngũ phát triển DuckDB đã chính thức ra mắt Quack — một giao thức client-server hoàn toàn mới.

Quack cho phép các instance DuckDB kết nối và giao tiếp với nhau, mở ra khả năng xử lý "đa người chơi" với nhiều tác vụ ghi đồng thời. Giao thức này được thiết kế dựa trên HTTP, mang lại sự đơn giản trong thiết lập nhưng vẫn đảm bảo hiệu suất cao cho cả các thao tác xử lý hàng loạt (bulk) lẫn các giao dịch nhỏ.

Bối cảnh: Từ In-process đến Client-Server

Trong những ngày đầu của ngành công nghiệp cơ sở dữ liệu, không có sự phân biệt rõ ràng giữa client và server; toàn bộ cơ sở dữ liệu chạy trên một máy tính. Sự ra đời của kiến trúc client-server vào những năm 80 đã thay đổi cuộc chơi, cho phép duy trì trạng thái dữ liệu tập trung và hỗ trợ nhiều người dùng cùng lúc.

Tuy nhiên, DuckDB (và SQLite) đã chọn con đường kiến trúc in-process để tối ưu hóa hiệu suất và tính đơn giản cho các nhà phân tích dữ liệu. Cách tiếp cận này hoạt động tuyệt vời khi dữ liệu nằm cục bộ, nhưng lại gặp khó khăn khi nhiều tiến trình cần sửa đổi cùng một tệp cơ sở dữ liệu lúc một lúc. Trước đây, người dùng thường phải dùng các giải pháp thay thế (workaround) như RPC tùy chỉnh hay chuyển sang PostgreSQL. Quack ra đời để lấp đầy khoảng trống này một cách chính thức.

Quack hoạt động như thế nào?

Quack cho phép DuckDB hoạt động đồng thời ở vai trò client và server. Hai instance có thể nằm trên hai máy tính khác nhau hoặc chỉ là hai cửa sổ terminal trên cùng một laptop.

Để sử dụng, bạn cần cài đặt extension quack trên cả hai instance. Ví dụ, trên máy chủ (server), bạn chạy lệnh sau để khởi động dịch vụ:

INSTALL quack FROM core_nightly;
LOAD quack;
CALL quack_serve('quack:localhost', token = 'super_secret');
CREATE TABLE hello AS FROM VALUES ('world') v(s);

Trên máy khách (client), bạn có thể kết nối và truy vấn dữ liệu từ máy chủ:

INSTALL quack FROM core_nightly;
LOAD quack;
CREATE SECRET (TYPE quack, TOKEN 'super_secret');
ATTACH 'quack:localhost' AS remote;
FROM remote.hello;

Kết quả trả về sẽ là nội dung của bảng hello từ máy chủ. Bạn cũng có thể sao chép dữ liệu từ local sang remote hoặc gửi các truy vấn phức tạp để thực thi trực tiếp trên server thông qua hàm query.

Thiết kế giao thức: Đơn giản và Hiệu quả

Quack được thiết kế với triết lý tận dụng các công nghệ đã được chứng minh, đặc biệt là HTTP.

  • Dựa trên HTTP: Việc sử dụng HTTP giúp Quack tận dụng được toàn bộ hạ tầng mạng hiện có như load balancing, tường lửa và xác thực. Nó cũng cho phép DuckDB-Wasm (chạy trên trình duyệt) kết nối trực tiếp với DuckDB server.
  • Mô hình Request-Response: Tương tác luôn do client khởi tạo. Quack đã được tối ưu hóa để giảm thiểu số lượng vòng lặp request-response (round-trips). Một truy vấn có thể được xử lý hoàn chỉnh chỉ trong một vòng lặp duy nhất.
  • Serialization: Dữ liệu được mã hóa bằng MIME type application/duckdb mới, tận dụng các nguyên thủy tuần tự hóa nội bộ hiệu quả của DuckDB.
  • Bảo mật: Mặc định, Quack tạo ra một token xác thực ngẫu nhiên và chỉ bind vào localhost. Nếu cần exposing ra Internet, nhóm phát triển khuyến nghị sử dụng proxy HTTP (như nginx) để xử lý SSL.

Minh họa giao thức QuackMinh họa giao thức Quack

Hiệu suất ấn tượng

Đội ngũ DuckDB đã thực hiện các bài kiểm tra benchmark (đo lường hiệu suất) so sánh Quack với giao thức PostgreSQL và Arrow Flight SQL trên các máy ảo AWS.

Chuyển dữ liệu hàng loạt (Bulk Transfer)

Trong bài kiểm tra chuyển 60 triệu hàng dữ liệu (76 GB CSV), Quack đã thể hiện sự vượt trội rõ rệt:

  • DuckDB Quack: 4.94 giây
  • Arrow Flight: 17.40 giây
  • PostgreSQL: 158.37 giây

Quack hiện là một trong những cách nhanh nhất để truyền tải bảng dữ liệu qua socket, tận dụng tối đa khả năng truyền tải song song.

Ghi dữ liệu nhỏ (Small Writes)

Với các tác vụ ghi nhỏ (append), Quack cũng đạt hiệu suất cao hơn PostgreSQL và Arrow Flight SQL ở mức 8 luồng song song, đạt khoảng 5.434 giao dịch mỗi giây (tx/s). Tuy nhiên, PostgreSQL vẫn có khả năng mở rộng (scale) tốt hơn ở số lượng luồng rất cao, điều mà nhóm DuckDB đang hướng tới cải thiện trong tương lai.

Tại sao không dùng Arrow Flight SQL?

Một câu hỏi tự nhiên là tại sao DuckDB không sử dụng giao thức Arrow Flight SQL có sẵn? Lý do chính nằm ở hiệu suất và sự kiểm soát.

Arrow Flight SQL yêu cầu ít nhất hai vòng lặp giao thức (round-trips) cho mỗi truy vấn, điều này không tối ưu cho các bản cập nhật nhỏ hoặc môi trường có độ trễ cao. Quack được thiết kế để thực thi truy vấn và lấy kết quả chỉ trong một round-trip. Ngoài ra, việc sử dụng định dạng tuần tự hóa riêng cho phép DuckDB tự do đổi mới và thêm các kiểu dữ liệu mới mà không bị giới hạn bởi các tiêu chuẩn bên ngoài.

Kết luận và Tương lai

Quack đánh dấu bước tiến quan trọng, đưa DuckDB từ một công cụ phân tích cục bộ trở thành một thành phần cốt lõi trong kiến trúc dữ liệu hiện đại. Nó mở ra các trường hợp sử dụng mới nơi việc tập trung hóa trạng thái dữ liệu quan trọng hơn việc truy vấn siêu cục bộ.

DuckCon #7DuckCon #7

Trong tương lai, Quack sẽ được tích hợp sâu vào DuckLake để đóng vai trò là Catalog server từ xa. Đội ngũ cũng lên kế hoạch cải thiện khả năng xử lý giao dịch đồng thời và thêm các tính năng như replication (sao chép) để thiết lập các cụm máy chủ read-replica.

Nếu bạn muốn tìm hiểu thêm về Quack và các tính năng mới, hãy tham gia hội nghị cộng đồng DuckCon #7 vào ngày 24 tháng 6 tới đây.

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