Giới thiệu Keybench: Công cụ đo hiệu năng có thể lập trình cho các kho lưu trữ Key-Value

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

Keybench là một công cụ đo hiệu năng mới, có thể lập trình và mở rộng dành riêng cho các kho lưu trữ key-value. Được thiết kế để lấp đầy khoảng trống của các công cụ như sysbench hay HammerDB, Keybench cho phép người dùng viết các bài kiểm tra (workload) bằng ngôn ngữ Lua để đo lường chính xác thông lượng và độ trễ của các engine lưu trữ như RocksDB hay TidesDB.

Giới thiệu Keybench: Công cụ đo hiệu năng có thể lập trình cho các kho lưu trữ Key-Value

Giới thiệu Keybench: Công cụ đo hiệu năng có thể lập trình cho các kho lưu trữ Key-Value

Trong lĩnh vực phát triển phần mềm và hệ thống, việc đo lường hiệu năng của các cơ sở dữ liệu là vô cùng quan trọng. Mới đây, một công cụ mới mang tên Keybench đã được giới thiệu như một giải pháp chuyên biệt để đánh giá hiệu suất của các kho lưu trữ key-value (sorted key-value stores).

Keybench ra đời nhằm lấp đầy khoảng trống mà các công cụ phổ biến như sysbench hay HammerDB chưa đáp ứng đầy đủ đối với các engine lưu trữ key-value hiện đại. Đây là một công cụ có thể lập trình (scriptable) và mở rộng (extensible), cho phép các nhà phát triển tùy biến sâu rộng các bài kiểm tra hiệu năng.

Điểm nổi bật của Keybench

Khác với các công cụ benchmark cứng nhắc, Keybench cho phép người dùng viết các bài kiểm tra (workload) bằng ngôn ngữ Lua. Điều này mang lại sự linh hoạt cao trong việc mô phỏng các tình huống thực tế. Công cụ sẽ chạy các script này trên một hoặc nhiều engine lưu trữ, đo thời gian cho từng thao tác và báo cáo chi tiết về thông lượng (throughput) cũng như độ trễ (latency).

Một ưu điểm lớn là cùng một script Lua có thể chạy unchanged trên nhiều engine khác nhau. Điều này đảm bảo rằng sự so sánh hiệu năng phản ánh đúng chất lượng của engine lưu trữ, không bị ảnh hưởng bởi sự khác biệt của công cụ đo lường.

Các chỉ số được đo lường

Keybench cung cấp hai loại tỷ lệ thông lượng và một phân phối độ trễ chi tiết:

  • wu/s (Workload units per second): Số đơn vị công việc mỗi giây. Một đơn vị là một lần gọi đến hàm run() trong script của bạn. Đây là tốc độ của toàn bộ thao tác logic (ví dụ: "xem giỏ hàng" hay "thanh toán"), bất kể nó bao nhiêu thao tác key cơ bản.
  • ops/s (Primitive operations per second): Số thao tác nguyên thủy mỗi giây. Bao gồm các lệnh put, get, del, range, hoặc scan.
  • Độ trễ (Latency): Được ghi nhận cho từng loại thao tác dưới dạng phân phối (histogram) thay vì chỉ lấy giá trị trung bình. Báo cáo sẽ hiển thị các chỉ số p50, p99, p99.9 và giá trị max cho từng thao tác.

Cấu trúc và hoạt động

Keybench được xây dựng với 5 thành phần chính, mỗi thành phần đều có thể thay thế:

  1. Engine: Quản lý tính song song. Keybench tạo các luồng worker và phân bổ ngân sách thao tác cho chúng.
  2. Workload: Là một bảng Lua, chứa hàm load (để nạp dữ liệu thử nghiệm) và hàm run (để đo lường).
  3. Store: Cung cấp tập hợp các động từ (verbs) thống nhất (put, get, del, v.v.) để tương tác với bất kỳ engine nào được chọn.
  4. Backend: Là plugin tự đăng ký. Mỗi engine nằm trong thư mục backends/ với đoạn mã xây dựng riêng.
  5. Reporter: Nơi nhận dữ liệu. Có thể là báo cáo dạng console (dễ đọc), TSV (dành cho máy tính/excel), hoặc timeline (theo dõi thời gian thực).

Các engine được hỗ trợ

Hiện tại, Keybench hỗ trợ ba engine chính:

  • Skiplist: Một engine skiplist trong bộ nhớ (in-memory), sử dụng làm tham chiếu và được biên dịch mặc định.
  • RocksDB: Engine dạng cây LSM phổ biến, hỗ trợ lưu trữ persistent.
  • TidesDB: Một engine cây LSM khác, hỗ trợ tính năng giao dịch (transactional).

Cách sử dụng và mở rộng

Để xây dựng Keybench, bạn chỉ cần một trình biên dịch C và pthreads. Lệnh make sẽ tạo ra tệp thực thi với engine skiplist. Để thêm RocksDB hoặc TidesDB, bạn có thể sử dụng các tùy chọn như make ROCKSDB=1 hoặc make TIDESDB=1.

Công cụ này cho phép so sánh hiệu năng giữa các engine thông qua các tham số dòng lệnh, thay đổi số luồng (threads), kích thước lô (batch size), và thời gian chạy. Ngoài ra, Keybench còn cung cấp script plot.py để trực quan hóa kết quả benchmark thành các biểu đồ và đồ thị thông qua các tệp TSV đầu ra.

Đối với các nhà phát triển muốn thêm engine mới, quy trình khá đơn giản: tạo thư mục trong backends/, triển khai bảng kv_backend, và đăng ký nó. Lõi của Keybench không cần phải chỉnh sửa.

Keybench hiện đang ở phiên bản 0.1.0 và là một dự án mã nguồn mở thú vị, đặc biệt hữu ích cho những ai đang làm việc với tối ưu hóa hệ thống lưu trữ dữ liệu.

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