Compare commits
2 Commits
a64e7499bc
...
ef0464234a
Author | SHA1 | Date | |
---|---|---|---|
ef0464234a | |||
9f9ccedbc7 |
10
README.md
10
README.md
@ -20,11 +20,13 @@ We use roadsign and nginx to host a same static file, and test them with [go-wrk
|
||||
Here's the result:
|
||||
|
||||
| **Software** | Total Requests | Requests per Seconds | Transfer per Seconds | Avg Time | Fastest Time | Slowest Time | Errors Count |
|
||||
|:---------------------:|----------------|:--------------------:|:--------------------:|:-----------:|:------------:|:------------:|:------------:|
|
||||
| _Nginx_ | 515749 | 4299.58 | 2.05MB | 13.954846ms | 0s | 410.6972ms | 0 |
|
||||
| _RoadSign_ | 3256820 | 27265.90 | 12.27MB | 2.20055ms | 0s | 56.8726ms | 0 |
|
||||
| _RoadSign w/ Prefork_ | 2188594 | 18248.45 | 8.21MB | 3.287951ms | 0s | 121.5189ms | 0 |
|
||||
|:---------------------:|:--------------:|:--------------------:|:--------------------:|:-----------:|:------------:|:------------:|:------------:|
|
||||
| _Nginx_ | 515749 | 4299.58 | 2.05MB | 13.954846ms | 0s (Cached) | 410.6972ms | 0 |
|
||||
| _RoadSign_ | 8905230 | 76626.70 | 30.98MB | 783.016µs | 28.542µs | 46.773083ms | 0 |
|
||||
| _RoadSign w/ Prefork_ | 4784308 | 40170.41 | 16.24MB | 1.493636ms | 34.291µs | 8.727666ms | 0 |
|
||||
|
||||
As result, roadsign undoubtedly is the fastest one.
|
||||
|
||||
It can be found that the prefork feature makes RoadSign more stable in concurrency. We can see this from the **Slowest Time**. At the same time, the **Fastest Time** is affected because reusing ports requires some extra steps to handle load balancing. Enable this feature at your own discretion depending on your use case.
|
||||
|
||||
More details can be found at benchmark's [README.md](./test/benchmark/README.md)
|
@ -21,10 +21,12 @@ func InitAdministration() *fiber.App {
|
||||
TrustedProxies: viper.GetStringSlice("security.administration_trusted_proxies"),
|
||||
})
|
||||
|
||||
app.Use(logger.New(logger.Config{
|
||||
Output: log.Logger,
|
||||
Format: "[Administration] [${time}] ${status} - ${latency} ${method} ${path}\n",
|
||||
}))
|
||||
if viper.GetBool("performance.request_logging") {
|
||||
app.Use(logger.New(logger.Config{
|
||||
Output: log.Logger,
|
||||
Format: "[Administration] [${time}] ${status} - ${latency} ${method} ${path}\n",
|
||||
}))
|
||||
}
|
||||
|
||||
app.Use(basicauth.New(basicauth.Config{
|
||||
Realm: fmt.Sprintf("RoadSign v%s", roadsign.AppVersion),
|
||||
|
@ -22,10 +22,12 @@ func InitServer() *fiber.App {
|
||||
BodyLimit: viper.GetInt("hypertext.limitation.max_body_size"),
|
||||
})
|
||||
|
||||
app.Use(logger.New(logger.Config{
|
||||
Output: log.Logger,
|
||||
Format: "[Proxies] [${time}] ${status} - ${latency} ${method} ${path}\n",
|
||||
}))
|
||||
if viper.GetBool("performance.request_logging") {
|
||||
app.Use(logger.New(logger.Config{
|
||||
Output: log.Logger,
|
||||
Format: "[Proxies] [${time}] ${status} - ${latency} ${method} ${path}\n",
|
||||
}))
|
||||
}
|
||||
|
||||
if viper.GetInt("hypertext.limitation.max_qps") > 0 {
|
||||
app.Use(limiter.New(limiter.Config{
|
||||
|
@ -13,11 +13,12 @@ hypertext:
|
||||
max_body_size: -1
|
||||
max_qps: -1
|
||||
ports:
|
||||
- :80
|
||||
- :8000
|
||||
secured_ports: []
|
||||
paths:
|
||||
configs: ./config
|
||||
performance:
|
||||
request_logging: true
|
||||
network_timeout: 3000
|
||||
prefork: false
|
||||
security:
|
||||
|
@ -8,25 +8,31 @@ Welcome to contribute more tests of others reverse proxy software!
|
||||
All tests are running on my workstation:
|
||||
|
||||
```text
|
||||
.., LittleSheep@PEROPERO-WORKSTATION
|
||||
....,,:;+ccllll --------------------------------
|
||||
...,,+:; cllllllllllllllllll OS: Windows 10 Pro x86_64
|
||||
,cclllllllllll lllllllllllllllllll Host: LENOVO 82TF
|
||||
llllllllllllll lllllllllllllllllll Kernel: 10.0.19045
|
||||
llllllllllllll lllllllllllllllllll Uptime: 1 hour, 22 mins
|
||||
llllllllllllll lllllllllllllllllll Shell: pwsh 7.4.0
|
||||
llllllllllllll lllllllllllllllllll Resolution: 2560x1600
|
||||
llllllllllllll lllllllllllllllllll DE: Aero
|
||||
WM: Explorer
|
||||
llllllllllllll lllllllllllllllllll WM Theme: Custom
|
||||
llllllllllllll lllllllllllllllllll Terminal: Windows Terminal
|
||||
llllllllllllll lllllllllllllllllll CPU: 12th Gen Intel i7-12700H (20) @ 2.690GHz
|
||||
llllllllllllll lllllllllllllllllll GPU: Caption
|
||||
llllllllllllll lllllllllllllllllll GPU: NVIDIA GeForce RTX 3070 Laptop GPU
|
||||
`'ccllllllllll lllllllllllllllllll GPU
|
||||
`' \*:: :ccllllllllllllllll Memory: 7318MiB / 16192MiB
|
||||
````''*::cll
|
||||
``
|
||||
..' littlesheep@LittleSheepdeMacBook-Pro
|
||||
,xNMM. ------------------------------------
|
||||
.OMMMMo OS: macOS Sonoma 14.1 23B2073 arm64
|
||||
lMM" Host: MacBook Pro (14-inch, Nov 2023, Three Thunderbolt 4 ports)
|
||||
.;loddo:. .olloddol;. Kernel: 23.1.0
|
||||
cKMMMMMMMMMMNWMMMMMMMMMM0: Uptime: 2 days, 1 hour, 16 mins
|
||||
.KMMMMMMMMMMMMMMMMMMMMMMMWd. Packages: 63 (brew), 4 (brew-cask)
|
||||
XMMMMMMMMMMMMMMMMMMMMMMMX. Shell: zsh 5.9
|
||||
;MMMMMMMMMMMMMMMMMMMMMMMM: Display (Color LCD): 3024x1964 @ 120Hz (as 1512x982) [Built-in]
|
||||
:MMMMMMMMMMMMMMMMMMMMMMMM: DE: Aqua
|
||||
.MMMMMMMMMMMMMMMMMMMMMMMMX. WM: Quartz Compositor
|
||||
kMMMMMMMMMMMMMMMMMMMMMMMMWd. WM Theme: Multicolor (Dark)
|
||||
'XMMMMMMMMMMMMMMMMMMMMMMMMMMk Font: .AppleSystemUIFont [System], Helvetica [User]
|
||||
'XMMMMMMMMMMMMMMMMMMMMMMMMK. Cursor: Fill - Black, Outline - White (32px)
|
||||
kMMMMMMMMMMMMMMMMMMMMMMd Terminal: iTerm 3.4.22
|
||||
;KMMMMMMMWXXWMMMMMMMk. Terminal Font: MesloLGMNFM-Regular (12pt)
|
||||
"cooc*" "*coo'" CPU: Apple M3 Max (14) @ 4.06 GHz
|
||||
GPU: Apple M3 Max (30) [Integrated]
|
||||
Memory: 18.45 GiB / 36.00 GiB (51%)
|
||||
Swap: Disabled
|
||||
Disk (/): 72.52 GiB / 926.35 GiB (8%) - apfs [Read-only]
|
||||
Local IP (en0): 192.168.50.0/24 *
|
||||
Battery: 100% [AC connected]
|
||||
Power Adapter: 96W USB-C Power Adapter
|
||||
Locale: zh_CN.UTF-8
|
||||
```
|
||||
|
||||
## Results
|
||||
@ -54,13 +60,13 @@ go-wrk -c 60 -d 120 http://localhost:8001
|
||||
go-wrk -c 60 -d 120 http://localhost:8000
|
||||
# => Running 120s test @ http://localhost:8000
|
||||
# => 60 goroutine(s) running concurrently
|
||||
# => 3256820 requests in 1m59.446620043s, 1.43GB read
|
||||
# => Requests/sec: 27265.90
|
||||
# => Transfer/sec: 12.27MB
|
||||
# => Avg Req Time: 2.20055ms
|
||||
# => Fastest Request: 0s
|
||||
# => Slowest Request: 56.8726ms
|
||||
# => Number of Errors: 0
|
||||
# => 8905230 requests in 1m56.215762709s, 3.52GB read
|
||||
# => Requests/sec: 76626.70
|
||||
# => Transfer/sec: 30.98MB
|
||||
# => Avg Req Time: 783.016µs
|
||||
# => Fastest Request: 28.542µs
|
||||
# => Slowest Request: 46.773083ms
|
||||
# => Number of Errors: 0
|
||||
```
|
||||
|
||||
### RoadSign w/ Prefork
|
||||
@ -68,12 +74,12 @@ go-wrk -c 60 -d 120 http://localhost:8000
|
||||
```shell
|
||||
go-wrk -c 60 -d 120 http://localhost:8000
|
||||
# => Running 120s test @ http://localhost:8000
|
||||
# => 60 goroutine(s) running concurrently
|
||||
# => 2188594 requests in 1m59.933175915s, 985.16MB read
|
||||
# => Requests/sec: 18248.45
|
||||
# => Transfer/sec: 8.21MB
|
||||
# => Avg Req Time: 3.287951ms
|
||||
# => Fastest Request: 0s
|
||||
# => Slowest Request: 121.5189ms
|
||||
# => Number of Errors: 0
|
||||
```
|
||||
# => 60 goroutine(s) running concurrently
|
||||
# => 4784308 requests in 1m59.100307178s, 1.89GB read
|
||||
# => Requests/sec: 40170.41
|
||||
# => Transfer/sec: 16.24MB
|
||||
# => Avg Req Time: 1.493636ms
|
||||
# => Fastest Request: 34.291µs
|
||||
# => Slowest Request: 8.727666ms
|
||||
# => Number of Errors: 0
|
||||
```
|
||||
|
@ -17,6 +17,7 @@ hypertext:
|
||||
paths:
|
||||
configs: ./config
|
||||
performance:
|
||||
request_logging: false
|
||||
network_timeout: 3000
|
||||
prefork: true
|
||||
security:
|
||||
|
@ -17,6 +17,7 @@ hypertext:
|
||||
paths:
|
||||
configs: ./config
|
||||
performance:
|
||||
request_logging: false
|
||||
network_timeout: 3000
|
||||
prefork: false
|
||||
security:
|
||||
|
Loading…
Reference in New Issue
Block a user