Benchmark
Được xây dựng trên Swoole với kiến trúc persistent process, Vietiso xử lý hàng chục nghìn request mỗi giây — không bị giới hạn bởi chi phí khởi động PHP-FPM truyền thống.
Môi trường kiểm thử
| Thông số | Giá trị |
|---|---|
| CPU | AMD EPYC 7713 (16 cores) |
| RAM | 32 GB DDR4 |
| OS | Ubuntu 22.04 LTS |
| Network | 10 Gbps (loopback) |
| Tool | wrk2 + wrk |
| Connections | 256 concurrent |
| Duration | 60 giây / lần chạy |
| Warmup | 30 giây |
| Workers | 16 (= số core) |
Phiên bản framework:
| Framework | Phiên bản |
|---|---|
| Vietiso | PHP 8.3 + Swoole 5.1 |
| Laravel | 11.x / PHP 8.3 + PHP-FPM |
| Symfony | 7.x / PHP 8.3 + PHP-FPM |
| Fastify | v4.x / Node.js 22 LTS |
| Express | v4.x / Node.js 22 LTS |
Kịch bản 1 — Hello World
Phản hồi văn bản đơn giản, không có I/O.
| Framework | Ngôn ngữ | Req/s ↑ | P50 Latency | P95 Latency | P99 Latency | Memory/worker |
|---|---|---|---|---|---|---|
| Vietiso ⭐ | PHP + Swoole | 78,540 | 0.8 ms | 1.9 ms | 3.2 ms | 32 MB |
| Fastify | Node.js | 71,350 | 0.9 ms | 2.1 ms | 3.4 ms | 68 MB |
| Express | Node.js | 34,200 | 1.8 ms | 4.6 ms | 7.2 ms | 75 MB |
| Symfony | PHP (FPM) | 2,840 | 22 ms | 58 ms | 95 ms | 12 MB |
| Laravel | PHP (FPM) | 1,190 | 48 ms | 120 ms | 195 ms | 18 MB |
Kịch bản 2 — JSON API
Trả về JSON object với serialization.
| Framework | Ngôn ngữ | Req/s ↑ | P50 Latency | P95 Latency | P99 Latency | Memory/worker |
|---|---|---|---|---|---|---|
| Vietiso ⭐ | PHP + Swoole | 67,820 | 0.9 ms | 2.3 ms | 3.8 ms | 34 MB |
| Fastify | Node.js | 62,100 | 1.1 ms | 2.5 ms | 4.0 ms | 70 MB |
| Express | Node.js | 28,700 | 2.2 ms | 5.8 ms | 9.1 ms | 78 MB |
| Symfony | PHP (FPM) | 2,410 | 26 ms | 68 ms | 112 ms | 14 MB |
| Laravel | PHP (FPM) | 980 | 58 ms | 145 ms | 235 ms | 22 MB |
Kịch bản 3 — Database Query
Truy vấn 1 bản ghi từ PostgreSQL rồi trả JSON. Vietiso tận dụng connection pooling của Swoole nên không mất thời gian kết nối lại mỗi request.
| Framework | Ngôn ngữ | Req/s ↑ | P50 Latency | P95 Latency | P99 Latency | Memory/worker |
|---|---|---|---|---|---|---|
| Vietiso ⭐ | PHP + Swoole | 22,800 | 3.1 ms | 7.4 ms | 12.0 ms | 38 MB |
| Fastify | Node.js | 18,500 | 3.8 ms | 9.2 ms | 15.5 ms | 82 MB |
| Express | Node.js | 11,200 | 6.2 ms | 14.8 ms | 24.0 ms | 89 MB |
| Symfony | PHP (FPM) | 1,650 | 38 ms | 92 ms | 148 ms | 16 MB |
| Laravel | PHP (FPM) | 680 | 85 ms | 210 ms | 340 ms | 26 MB |
Tại sao Vietiso nhanh?
⚡ Persistent Process
Khác với PHP-FPM, Swoole giữ tiến trình sống xuyên suốt. Không còn overhead khởi động framework, load class, parse config ở mỗi request.
🔗 Connection Pooling
Kết nối tới database, Redis, RabbitMQ được tái sử dụng giữa các request — giảm đáng kể latency và overhead kết nối.
🔄 Coroutines
I/O bất đồng bộ với coroutine built-in. Một worker có thể xử lý nhiều request song song mà không cần tạo thêm thread.
📦 Async I/O
File I/O, DNS lookup, network đều non-blocking. Worker không bao giờ bị block chờ I/O hoàn thành.
🪄 Zero-Reflection Proxy
Thay vì dùng PHP Reflection API ở mỗi request để phân tích class, constructor, dependency — Vietiso sinh code proxy tại compile time. Proxy được cache lại và gọi trực tiếp như code thường, không có overhead reflection runtime.
Tóm tắt
| So sánh | Kết quả |
|---|---|
| Nhanh hơn Fastify (Hello World) | +10% req/s |
| Nhanh hơn Fastify (JSON API) | +9% req/s |
| Nhanh hơn Fastify (DB Query) | +23% req/s |
| Nhanh hơn Laravel (DB Query) | ~34x |
| Nhanh hơn Symfony (DB Query) | ~14x |
| Latency P99 (Hello World) | 3.2 ms |
| Memory per worker (Hello World) | 32 MB |