- 1 Tổng quan về Axum và Actix Web
- 2 Kiến trúc và triết lý thiết kế
- 3 Cài đặt và code mẫu REST API cơ bản
- 4 Đánh giá hiệu năng thực tế (benchmark)
- 5 Các yếu tố ảnh hưởng đến hiệu năng
- 6 Khả năng mở rộng, bảo trì và độ ổn định
- 7 Khi nào chọn Axum, khi nào chọn Actix?
- 8 FAQ cho dev khi chọn framework REST API Rust
- 9 Tài liệu tham khảo và link hữu ích
Tổng quan về Axum và Actix Web
Axum là gì?
Axum là một web framework hiện đại cho Rust, được phát triển bởi team của Tokio. Axum hướng tới sự đơn giản, an toàn kiểu dữ liệu (type safety), và tận dụng tối đa các pattern bất đồng bộ (async/await) của Rust. Điểm mạnh của Axum là thiết kế handler function rõ ràng, middleware dạng Tower stack dễ mở rộng, và tích hợp tốt với hệ sinh thái Tokio.
Actix Web là gì?
Actix Web là framework lâu đời nhất trong cộng đồng Rust web, nổi bật với hiệu năng cao nhờ kiến trúc actor model và tận dụng tối đa hệ thống async runtime riêng (Actix runtime). Actix Web có hệ middleware mạnh, hỗ trợ cả sync và async handler, cho phép dev tối ưu hóa hiệu năng đến mức cực đại.
Tại sao Axum và Actix nổi bật?
- Cả hai đều có benchmark thuộc top đầu trên Techempower, thường đạt từ 100k đến hơn 200k req/s.
- Được cộng đồng Rust backend lựa chọn cho các sản phẩm yêu cầu hiệu năng cao, bảo mật và ổn định lâu dài.
- Tài liệu, example, và hệ plugin/middleware phong phú.
Kiến trúc và triết lý thiết kế
Axum
- Typed Handler: Axum thiết kế handler nhận tham số đã được parse, không cần unwrap dữ liệu, giảm lỗi runtime.
- Tower Middleware: Middleware trong Axum dựa trên stack Tower, dễ mở rộng, dễ kết hợp với các service khác.
- Async-first: Mọi route đều hỗ trợ async/await, tận dụng triệt để sức mạnh concurrency của Rust.
- Routing theo kiểu chain: Khai báo rõ ràng, dễ đọc, tương tự ExpressJS nhưng an toàn kiểu dữ liệu hơn.
Actix Web
- Actor Model: Tận dụng actor system cho hiệu năng và concurrency, thích hợp với các ứng dụng real-time hoặc cần quản lý state phức tạp.
- Handler trait: Hỗ trợ cả sync lẫn async, handler logic linh hoạt hơn, phù hợp nhiều dạng dự án.
- Middleware custom mạnh: Cho phép dev tự do tạo và thao tác middleware ở mức rất thấp nếu cần tối ưu.
- Routing bằng macro hoặc builder: Đa dạng cách khai báo route, có thể tận dụng macro cho code ngắn gọn.
So sánh nhanh
| Tiêu chí | Axum | Actix Web |
|---|---|---|
| Kiểu handler | Function (typed) | Trait (sync/async) |
| Middleware | Tower stack | Custom chain |
| Runtime | Tokio | Actix runtime |
| Độ an toàn type | Cao | Vừa phải |
| Tài liệu, community | Đang tăng mạnh | Lâu đời, ổn định |

Cài đặt và code mẫu REST API cơ bản
1. Cài đặt Axum và Actix Web
Thêm vào Cargo.toml
# Cho Axum
[dependencies]
axum = "0.7"
tokio = { version = "1", features = ["full"] }
# Cho Actix Web
[dependencies]
actix-web = "4"
tokio = { version = "1", features = ["full"] }
2. Code mẫu REST API đơn giản
Axum
use axum::{
routing::get,
Router,
};
async fn hello_world() -> &'static str {
"Hello from Axum!"
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(hello_world));
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
Giải thích: Khởi tạo một API đơn giản trả về “Hello from Axum!”. Toàn bộ logic đều async, khai báo route rõ ràng.
Actix Web
use actix_web::{get, App, HttpServer, Responder};
#[get("/")]
async fn hello_world() -> impl Responder {
"Hello from Actix!"
}
#[tokio::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(hello_world))
.bind(("0.0.0.0", 3000))?
.run()
.await
}
Giải thích: Tương tự, code rất ngắn gọn. Actix dùng macro để define route. Toàn bộ runtime chạy trên Tokio, hỗ trợ async handler.
Đánh giá hiệu năng thực tế (benchmark)
Môi trường test
- Máy test: CPU 8 core, RAM 16GB, SSD, OS Linux hoặc MacOS
- Công cụ benchmark:
wrk,bombardier, hoặchey - Build release: Luôn build ở mode release (
cargo build --release)
Script benchmark mẫu
Axum:
cargo run --release
# Benchmark với wrk
wrk -t8 -c200 -d30s http://localhost:3000/
Actix Web:
cargo run --release
wrk -t8 -c200 -d30s http://localhost:3000/
Kết quả thực tế
| Framework | Requests/sec | p95 Latency |
|---|---|---|
| Axum | 180,479 | 1.5ms |
| Actix Web | 219,699 | 1.1ms |

- Actix Web thường nhỉnh hơn về raw req/s, nhất là ở các route đơn giản, tối ưu hoá tốt.
- Axum rất tiệm cận về hiệu năng, nhất là khi dự án tận dụng tối đa stack middleware của Tower.
- Hiệu năng thực tế còn phụ thuộc vào thiết lập hệ điều hành, kernel, tối ưu hoá network stack.
Lưu ý: Số liệu này là ví dụ minh hoạ, nên tự benchmark trên môi trường thực tế của bạn để có kết quả chính xác nhất.
Các yếu tố ảnh hưởng đến hiệu năng
Runtime và thread pool
- Tokio (Axum) và Actix runtime đều hỗ trợ đa luồng, non-blocking IO, tối ưu concurrency cực tốt.
- Thread pool cần được cấu hình phù hợp với số core vật lý trên máy chủ.
Xử lý state, middleware, serialization
- Tránh sử dụng global state không đồng bộ.
- Sử dụng
serdecho (de)serialization, tận dụng derive để giảm chi phí runtime. - Middleware càng ít logic blocking càng tốt, tránh sử dụng thread-blocking trong handler.
Kết nối DB, pool, cache
- Luôn sử dụng connection pool (ví dụ:
sqlx,deadpool,bb8) để tái sử dụng kết nối, tránh tạo mới từng request. - Redis, memcache hoặc in-memory cache nên dùng client async, hỗ trợ pool tốt.
Gợi ý tối ưu hiệu năng
- Ưu tiên zero-copy, tránh clone data không cần thiết.
- Sử dụng
Pin,Arckhi cần chia sẻ data giữa các thread. - Bật tối ưu hoá level cao nhất khi build release (
-C opt-level=3).
Khả năng mở rộng, bảo trì và độ ổn định
Mở rộng codebase
- Axum: Codebase rõ ràng, chia module theo từng handler, middleware viết lại dễ dàng.
- Actix Web: Có thể tận dụng actor system để chia nhỏ logic, phù hợp các ứng dụng cần chia process/state rõ ràng.
Khả năng test, DI
- Axum: Hỗ trợ test khá dễ nhờ handler function thuần, injection state vào request lifecycle dễ dàng.
- Actix Web: Có test framework riêng, DI qua app data, tuy nhiên phức tạp hơn Axum nếu muốn mock sâu.
Hỗ trợ async, stream, WebSocket
- Cả hai đều hỗ trợ stream response, WebSocket, SSE.
- Axum tận dụng tower layers, pipeline async rõ ràng, dễ gắn thêm middleware.
- Actix mạnh về websocket nhờ actor model, quản lý session/state phức tạp tốt.
Cộng đồng, plugin, docs
- Actix Web: Đã có nhiều năm phát triển, docs, plugins đa dạng, nhiều mẫu code thực chiến.
- Axum: Cộng đồng tăng rất nhanh, docs cải thiện liên tục, đặc biệt tích hợp tốt với tokio/serde/hyper.
Khi nào chọn Axum, khi nào chọn Actix?
Tình huống nên chọn Axum
- Bạn muốn codebase an toàn tuyệt đối về kiểu dữ liệu: Axum có type system mạnh, ít bug runtime liên quan tới dữ liệu đầu vào.
- Dự án cần tích hợp chặt với hệ sinh thái Tokio: Ví dụ kết hợp nhiều Tower service, sử dụng hyper/tokio-native driver, async stack chuẩn.
- Ưu tiên maintainability, clear structure: Axum dùng function handler, phân chia module rõ, dễ onboard team mới.
Tình huống nên chọn Actix Web
- Yêu cầu hiệu năng cao nhất có thể, tối ưu từng microsecond: Actix thường nhỉnh hơn một chút về raw performance.
- Ứng dụng cần real-time, quản lý state phức tạp: Actor model của Actix cực mạnh khi cần quản lý nhiều kết nối, websocket, session.
- Team đã quen với hệ sinh thái Actix, tận dụng nhiều plugin, middleware sẵn có.
Bảng so sánh nhanh
| Tiêu chí | Axum | Actix Web |
|---|---|---|
| Độ dễ học | Dễ tiếp cận | Mất thời gian hơn |
| Hiệu năng | ~Rất cao | Rất cao nhất |
| Quản lý state | Dễ, typed rõ ràng | Phức tạp hơn |
| WebSocket | Hỗ trợ | Cực mạnh (actor) |
| Maintainability | Tốt | Tốt nhưng code lớn cần chú ý |
| Plugin/middleware | Đang phát triển | Rất phong phú |
Lời khuyên tổng kết
- Nếu là dự án mới, dev backend vừa học Rust hoặc ưu tiên maintain dễ, nên chọn Axum.
- Nếu bạn cần squeeze từng % hiệu năng, làm real-time, hoặc xử lý state phức tạp, Actix Web là lựa chọn đỉnh.
- Hãy benchmark trên chính use case của bạn!
FAQ cho dev khi chọn framework REST API Rust
Axum có thực sự chậm hơn Actix không?
Trên các benchmark “Hello World”, Actix Web thường cao hơn 10–20% req/s.
Tuy nhiên, khi ứng dụng thực tế dùng DB, cache, business logic…, chênh lệch này rất nhỏ, chủ yếu phụ thuộc vào code app.
Có nên lo lắng về security, memory leak ở Axum hoặc Actix không?
Cả hai framework đều dùng Rust safety, rất khó bị memory leak nếu không sử dụng unsafe code.
Các vấn đề security chủ yếu nằm ở cách implement logic, kiểm soát input, và dependency (serde, database driver…).
Dễ migrate từ Axum sang Actix hoặc ngược lại không?
Mỗi framework có ecosystem riêng, migration codebase lớn sẽ tốn effort, nhưng concept HTTP handler, middleware đều có thể mapping.
Nếu dự án nhỏ, đổi framework khá nhanh do cấu trúc route/data tương tự.
Framework nào tốt cho microservice?
Axum rất hợp với microservice nhờ typed API, dễ chia nhỏ project.
Actix Web phù hợp cho service real-time, websocket, hoặc cần tối ưu performance max.
Có công cụ nào hỗ trợ debug, hot reload?
Axum và Actix đều chạy tốt với cargo-watch hoặc nodemon cho Rust.
Debugging có thể dùng logging middleware, tracing (axum tích hợp tốt với tracing).







