This is an automated email from the ASF dual-hosted git repository.
dengliming pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shenyu-website.git
The following commit(s) were added to refs/heads/main by this push:
new ab8375f165 Add ShenYu benchmark test report (#888)
ab8375f165 is described below
commit ab8375f165212742aec4279c8544b4fab750c989
Author: Zhang Yuxuan <[email protected]>
AuthorDate: Sun Apr 16 22:01:55 2023 +0800
Add ShenYu benchmark test report (#888)
* add ShenYu benchmark test report
* add ShenYu benchmark test report
---
docs/benchmark-test/_category_.json | 4 +
docs/benchmark-test/benchmark-test.md | 204 ++++++++++++++++++++
.../zh/docusaurus-plugin-content-docs/current.json | 7 +
.../current/benchmark-test/_category_.json | 4 +
.../current/benchmark-test/benchmark-test.md | 205 +++++++++++++++++++++
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 44536 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 45054 bytes
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 44121 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 44050 bytes
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 44738 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 43864 bytes
.../8-thread/3-netty-cache-selector.jpg | Bin 0 -> 44139 bytes
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 44612 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 44243 bytes
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 43761 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 43072 bytes
.../8-thread/3-netty-cache-selector.jpg | Bin 0 -> 43917 bytes
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 43810 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 44106 bytes
.../8-thread/3-netty-cache-selector.jpg | Bin 0 -> 41508 bytes
.../8-thread/1-netty-cache-selector.png | Bin 0 -> 44323 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 44586 bytes
.../8-thread/3-netty-cache-selector.jpg | Bin 0 -> 45090 bytes
.../8-thread/1-netty-cache-selector.jpg | Bin 0 -> 43794 bytes
.../8-thread/2-netty-cache-selector.jpg | Bin 0 -> 44141 bytes
.../8-thread/3-netty-cache-selector.jpg | Bin 0 -> 44146 bytes
static/img/shenyu/benchmark-test/origin/1.png | Bin 0 -> 48027 bytes
27 files changed, 424 insertions(+)
diff --git a/docs/benchmark-test/_category_.json
b/docs/benchmark-test/_category_.json
new file mode 100644
index 0000000000..566577bd39
--- /dev/null
+++ b/docs/benchmark-test/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Benchmark Test",
+ "position": 8
+}
diff --git a/docs/benchmark-test/benchmark-test.md
b/docs/benchmark-test/benchmark-test.md
new file mode 100644
index 0000000000..3a3618d306
--- /dev/null
+++ b/docs/benchmark-test/benchmark-test.md
@@ -0,0 +1,204 @@
+---
+sidebar_position: 8
+title: ShenYu Benchmark Test Report
+keywords: ["test", "benchmark-test"]
+description: ShenYu Benchmark Test Report
+---
+
+### Hardware
+
+Back-end Mock Service Server:
+
+- CPU: 4 cores and 8 threads Intel Cascade Lake @ 3.0GHz
+- RAM: 16G
+
+Gateway node server:
+
+- CPU: 4 cores and 8 threads Intel Cascade Lake @ 3.0GHz
+- RAM: 16G
+
+The test tool takes up few resources and is installed on the gateway node
server.
+
+### ShenYu Version
+
+- ShenYu Admin: 2.6.0
+- ShenYu Bootstrap: 2.6.0
+
+### Test Tool
+
+wrk-4.2.0
+
+### Test Case Description
+
+- Use the Mock service to simulate an interface with an average response time
of 20ms and about 2k response messages
+- Each test lasts 3 minutes
+- The HTTP request side is tested with `NettyClient` and `WebClient`
respectively
+- JVM Configuration:
+ - -Xmx 4g
+ - -Xms 4g
+ - -Xmn 1g
+ - -Xss 512k
+ - -XX: +DisableExplicitGC
+ - -XX: LargePageSizeInBytes=128m
+- shenyu-bootstrap 配置:
+
+ ```yml
+ matchCache:
+ selector:
+ selectorEnabled: false
+ initialCapacity: 10000 # initial capacity in cache
+ maximumSize: 10000 # max size in cache
+ rule:
+ initialCapacity: 10000 # initial capacity in cache
+ maximumSize: 65536 # max size in cache
+ trie:
+ enabled: true
+ childrenSize: 10000
+ pathVariableSize: 1000
+ pathRuleCacheSize: 1000
+ matchMode: antPathMatch
+ ```
+
+- Netty 配置
+
+ ```yml
+ netty:
+ http:
+ # set to false, user can custom the netty tcp server config.
+ webServerFactoryEnabled: true
+ selectCount: 1
+ workerCount: 8
+ accessLog: false
+ serverSocketChannel:
+ soRcvBuf: 87380
+ soBackLog: 128
+ soReuseAddr: false
+ connectTimeoutMillis: 10000
+ writeBufferHighWaterMark: 65536
+ writeBufferLowWaterMark: 32768
+ writeSpinCount: 16
+ autoRead: false
+ allocType: "pooled"
+ messageSizeEstimator: 8
+ singleEventExecutorPerGroup: true
+ socketChannel:
+ soKeepAlive: false
+ soReuseAddr: false
+ soLinger: -1
+ tcpNoDelay: true
+ soRcvBuf: 87380
+ soSndBuf: 16384
+ ipTos: 0
+ allowHalfClosure: false
+ connectTimeoutMillis: 10000
+ writeBufferHighWaterMark: 65536
+ writeBufferLowWaterMark: 32768
+ writeSpinCount: 16
+ autoRead: false
+ allocType: "pooled"
+ messageSizeEstimator: 8
+ singleEventExecutorPerGroup: true
+ ```
+
+- HttpClient 配置
+
+ ```yml
+ httpclient:
+ strategy: webClient # netty
+ connectTimeout: 45000
+ responseTimeout: 3000
+ readerIdleTime: 3000
+ writerIdleTime: 3000
+ allIdleTime: 3000
+ readTimeout: 3000
+ writeTimeout: 3000
+ wiretap: false
+ keepAlive: false
+ maxInMemorySize: 1 #1mb
+ pool:
+ type: ELASTIC
+ name: proxy
+ maxConnections: 16
+ acquireTimeout: 45000
+ maxIdleTime: 3000
+ ```
+
+### Benchmark Test Results
+
+- `Direct` access to back-end services under 600 concurrency
+
+ | **QPS** | **50% latency (ms)** | **75% latency (ms)** | **90% latency
(ms)** | **99% latency (ms)** | **Avg response time (ms)** | **Max response
time (ms)** |
+
|:---------------:|:----------------------:|:----------------------:|:----------------------:|:----------------------:|:----------------:|:----------------:|
+ | 28998.20 | 19.81 | 23.78 | 28.26
| 41.24 | 20.92 | 402.90 |
+
+- Access to back-end services via `NettyClient` under 600, 800, 1000
concurrency
+
+ | | **QPS** | **50% latency (ms)** | **75% latency (ms)** |
**90% latency (ms)** | **99% latency (ms)** | **Avg response time (ms)** |
**Max response time (ms)** |
+
|:-----------:|:--------:|:--------------------:|:--------------------:|:--------------------:|:--------------------:|:--------------:|:--------------:|
+ | 600 concurrency | 20472.95 | 19.37 | 25.36 |
32.89 | 69.92 | 22.09 | 1043.33 |
+ | 800 concurrency | 20703.55 | 23.57 | 31.32 |
40.11 | 77.28 | 26.11 | 576.47 |
+ | 1000 concurrency | 20979.91 | 29.21 | 37.86 |
47.23 | 80.91 | 31.20 | 860.55 |
+ | 1200 concurrency | 21129.88 | 32.45 | 42.40 |
52.68 | 96.10 | 35.06 | 1070 |
+
+- Access to back-end services via `HttpClient` under 600, 800, 1000 concurrency
+
+ | | **QPS** | **50% latency (ms)** | **75% latency (ms)** |
**90% latency (ms)** | **99% latency (ms)** | **Avg response time (ms)** |
**Max response time (ms)** |
+
|:-----------:|:--------:|:--------------------:|:--------------------:|:--------------------:|:--------------------:|:--------------:|:--------------:|
+ | 600 concurrency | 18640.47 | 15.77 | 24.77 |
38.26 | 80.31 | 20.32 | 852.06 |
+ | 800 concurrency | 18723.44 | 18.12 | 28.69 |
44.96 | 95.3 | 23.52 | 765.26 |
+ | 1000 concurrency | 18928.99 | 19.99 | 31.42 |
49.09 | 108.84 | 25.93 | 1040 |
+ | 1200 concurrency | 18965.37 | 22.10 | 34.62 |
54.48 | 122.31 | 28.66 | 1075 |
+
+### Screenshot of Benchmark Test Result
+
+- `Direct` access to back-end services
+
+ <img src="/img/shenyu/benchmark-test/origin/1.png" width="100%"
height="100%" />
+
+- Access to back-end services via `NettyClient`
+ - 600 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/netty/600-currency/8-thread/1-netty-cache-selector.png"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/600-currency/8-thread/2-netty-cache-selector.png"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/600-currency/8-thread/3-netty-cache-selector.png"
width="100%" height="100%" />
+
+ - 800 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/netty/800-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/800-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/800-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1000 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/netty/1000-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1000-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1000-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1200 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/netty/1200-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1200-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1200-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+- Access to back-end services via `HttpClient`
+ - 600 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/http/600-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/600-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/600-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 800 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/http/800-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/800-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1000 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/http/1000-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/1000-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1200 concurrency
+
+ <img
src="/img/shenyu/benchmark-test/http/1200-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/1200-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current.json
b/i18n/zh/docusaurus-plugin-content-docs/current.json
index 69fa582dfe..636a972a6f 100755
--- a/i18n/zh/docusaurus-plugin-content-docs/current.json
+++ b/i18n/zh/docusaurus-plugin-content-docs/current.json
@@ -70,5 +70,12 @@
"sidebar.tutorialSidebar.category.SPI": {
"message": "SPI",
"description": "The label for category SPI in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Benchmark Test": {
+
+ "message": "基准测试",
+
+ "description": "ShenYu Benchmark Test"
+
}
}
diff --git
a/i18n/zh/docusaurus-plugin-content-docs/current/benchmark-test/_category_.json
b/i18n/zh/docusaurus-plugin-content-docs/current/benchmark-test/_category_.json
new file mode 100644
index 0000000000..eee4d46dad
--- /dev/null
+++
b/i18n/zh/docusaurus-plugin-content-docs/current/benchmark-test/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "基准测试",
+ "position": 8
+}
diff --git
a/i18n/zh/docusaurus-plugin-content-docs/current/benchmark-test/benchmark-test.md
b/i18n/zh/docusaurus-plugin-content-docs/current/benchmark-test/benchmark-test.md
new file mode 100644
index 0000000000..1608b7b39d
--- /dev/null
+++
b/i18n/zh/docusaurus-plugin-content-docs/current/benchmark-test/benchmark-test.md
@@ -0,0 +1,205 @@
+---
+sidebar_position: 8
+title: ShenYu 基准测试报告
+keywords: ["test", "benchmark-test"]
+description: ShenYu 基准测试报告
+---
+
+### 硬件环境
+
+后端Mock服务所在服务器:
+
+- CPU: 4核8线程 Intel Cascade Lake @ 3.0GHz
+- RAM: 16G
+
+网关节点所在服务器:
+
+- CPU: 4核8线程 Intel Cascade Lake @ 3.0GHz
+- RAM: 16G
+
+测试工具占用资源很少,安装在网关节点服务器。
+
+### ShenYu 版本
+
+- ShenYu Admin: 2.6.0
+- ShenYu Bootstrap: 2.6.0
+
+### 测试工具
+
+wrk-4.2.0
+
+### 测试用例说明
+
+- 使用 Mock 服务模拟一个平均响应时长 20ms ,响应报文约 2k 的接口
+- 每次测试时长 3 分钟
+- HTTP 请求端分别使用 `NettyClient` 和 `WebClient` 进行测试
+- JVM 配置:
+ - -Xmx 4g
+ - -Xms 4g
+ - -Xmn 1g
+ - -Xss 512k
+ - -XX: +DisableExplicitGC
+ - -XX: LargePageSizeInBytes=128m
+- shenyu-bootstrap 配置:
+
+ ```yml
+ matchCache:
+ selector:
+ selectorEnabled: false
+ initialCapacity: 10000 # initial capacity in cache
+ maximumSize: 10000 # max size in cache
+ rule:
+ initialCapacity: 10000 # initial capacity in cache
+ maximumSize: 65536 # max size in cache
+ trie:
+ enabled: true
+ childrenSize: 10000
+ pathVariableSize: 1000
+ pathRuleCacheSize: 1000
+ matchMode: antPathMatch
+ ```
+
+- Netty 配置
+
+ ```yml
+ netty:
+ http:
+ # set to false, user can custom the netty tcp server config.
+ webServerFactoryEnabled: true
+ selectCount: 1
+ workerCount: 8
+ accessLog: false
+ serverSocketChannel:
+ soRcvBuf: 87380
+ soBackLog: 128
+ soReuseAddr: false
+ connectTimeoutMillis: 10000
+ writeBufferHighWaterMark: 65536
+ writeBufferLowWaterMark: 32768
+ writeSpinCount: 16
+ autoRead: false
+ allocType: "pooled"
+ messageSizeEstimator: 8
+ singleEventExecutorPerGroup: true
+ socketChannel:
+ soKeepAlive: false
+ soReuseAddr: false
+ soLinger: -1
+ tcpNoDelay: true
+ soRcvBuf: 87380
+ soSndBuf: 16384
+ ipTos: 0
+ allowHalfClosure: false
+ connectTimeoutMillis: 10000
+ writeBufferHighWaterMark: 65536
+ writeBufferLowWaterMark: 32768
+ writeSpinCount: 16
+ autoRead: false
+ allocType: "pooled"
+ messageSizeEstimator: 8
+ singleEventExecutorPerGroup: true
+ ```
+
+- HttpClient 配置
+
+ ```yml
+ httpclient:
+ strategy: webClient # netty
+ connectTimeout: 45000
+ responseTimeout: 3000
+ readerIdleTime: 3000
+ writerIdleTime: 3000
+ allIdleTime: 3000
+ readTimeout: 3000
+ writeTimeout: 3000
+ wiretap: false
+ keepAlive: false
+ maxInMemorySize: 1 #1mb
+ pool:
+ type: ELASTIC
+ name: proxy
+ maxConnections: 16
+ acquireTimeout: 45000
+ maxIdleTime: 3000
+ ```
+
+### 基准测试结果
+
+- 600 并发下`直接`访问后端服务
+
+ | **QPS** | **50% latency (ms)** | **75% latency (ms)** | **90% latency
(ms)** | **99% latency (ms)** | **平均响应时间(ms)** | **最大响应时间(ms)** |
+
|:---------------:|:----------------------:|:----------------------:|:----------------------:|:----------------------:|:----------------:|:----------------:|
+ | 28998.20 | 19.81 | 23.78 | 28.26
| 41.24 | 20.92 | 402.90 |
+
+- 600、800、1000 并发下通过 `NettyClient` 访问后端服务
+
+ | | QPS | 50% latency (ms) | 75% latency (ms) | 90% latency
(ms) | 99% latency (ms) | 平均响应时间(ms) | 最大响应时间(ms) |
+
|:---------:|:----------:|:------------------:|:------------------:|:------------------:|:------------------:|:------------:|:------------:|
+ | 600 并发 | 20472.95 | 19.37 | 25.36 | 32.89
| 69.92 | 22.09 | 1043.33 |
+ | 800 并发 | 20703.55 | 23.57 | 31.32 | 40.11
| 77.28 | 26.11 | 576.47 |
+ | 1000 并发 | 20979.91 | 29.21 | 37.86 | 47.23
| 80.91 | 31.20 | 860.55 |
+ | 1200 并发 | 21129.88 | 32.45 | 42.40 | 52.68
| 96.10 | 35.06 | 1070 |
+
+- 600、800、1000 并发下通过 `HttpClient` 访问后端服务
+
+ | | QPS | 50% latency (ms) | 75% latency (ms) | 90% latency
(ms) | 99% latency (ms) | 平均响应时间(ms) | 最大响应时间(ms) |
+
|:---------:|:----------:|:------------------:|:------------------:|:------------------:|:------------------:|:------------:|:------------:|
+ | 600 并发 | 18640.47 | 15.77 | 24.77 | 38.26
| 80.31 | 20.32 | 852.06 |
+ | 800 并发 | 18723.44 | 18.12 | 28.69 | 44.96
| 95.3 | 23.52 | 765.26 |
+ | 1000 并发 | 18928.99 | 19.99 | 31.42 | 49.09
| 108.84 | 25.93 | 1040 |
+ | 1200 并发 | 18965.37 | 22.10 | 34.62 | 54.48
| 122.31 | 28.66 | 1075 |
+
+### 基准测试结果截图
+
+- `直接`访问后端服务
+
+ <img src="/img/shenyu/benchmark-test/origin/1.png" width="100%"
height="100%" />
+
+- 通过 `NettyClient` 访问后端服务
+ - 600 并发
+
+ <img
src="/img/shenyu/benchmark-test/netty/600-currency/8-thread/1-netty-cache-selector.png"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/600-currency/8-thread/2-netty-cache-selector.png"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/600-currency/8-thread/3-netty-cache-selector.png"
width="100%" height="100%" />
+
+ - 800 并发
+
+ <img
src="/img/shenyu/benchmark-test/netty/800-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/800-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/800-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1000 并发
+
+ <img
src="/img/shenyu/benchmark-test/netty/1000-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1000-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1000-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1200 并发
+
+ <img
src="/img/shenyu/benchmark-test/netty/1200-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1200-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/netty/1200-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+- 通过 `HttpClient` 访问后端服务
+ - 600 并发
+
+ <img
src="/img/shenyu/benchmark-test/http/600-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/600-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/600-currency/8-thread/3-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 800 并发
+
+ <img
src="/img/shenyu/benchmark-test/http/800-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/800-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1000 并发
+
+ <img
src="/img/shenyu/benchmark-test/http/1000-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/1000-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+ - 1200 并发
+
+ <img
src="/img/shenyu/benchmark-test/http/1200-currency/8-thread/1-netty-cache-selector.jpg"
width="100%" height="100%" />
+ <img
src="/img/shenyu/benchmark-test/http/1200-currency/8-thread/2-netty-cache-selector.jpg"
width="100%" height="100%" />
+
+
\ No newline at end of file
diff --git
a/static/img/shenyu/benchmark-test/http/1000-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/1000-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..91b6b113b3
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/1000-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/1000-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/1000-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..c02f50246b
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/1000-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/1200-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/1200-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..f3b35f09b0
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/1200-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/1200-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/1200-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..3fbcade84a
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/1200-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/600-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/600-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..4d31fc9e96
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/600-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/600-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/600-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..a986baad2d
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/600-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/600-currency/8-thread/3-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/600-currency/8-thread/3-netty-cache-selector.jpg
new file mode 100644
index 0000000000..81906f564e
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/600-currency/8-thread/3-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/800-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/800-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..01a85493e1
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/800-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/http/800-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/http/800-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..afc6520cec
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/http/800-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..603b204f29
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..c529ebf240
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/3-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/3-netty-cache-selector.jpg
new file mode 100644
index 0000000000..718d5d08ca
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/1000-currency/8-thread/3-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..9bd3d271a7
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..44eec7f877
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/3-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/3-netty-cache-selector.jpg
new file mode 100644
index 0000000000..1bf862d3f1
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/1200-currency/8-thread/3-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/1-netty-cache-selector.png
b/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/1-netty-cache-selector.png
new file mode 100644
index 0000000000..f6a2e15227
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/1-netty-cache-selector.png
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..b042f865f6
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/3-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/3-netty-cache-selector.jpg
new file mode 100644
index 0000000000..ace4236623
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/600-currency/8-thread/3-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/1-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/1-netty-cache-selector.jpg
new file mode 100644
index 0000000000..1ca9d93c82
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/1-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/2-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/2-netty-cache-selector.jpg
new file mode 100644
index 0000000000..c1b2c964dd
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/2-netty-cache-selector.jpg
differ
diff --git
a/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/3-netty-cache-selector.jpg
b/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/3-netty-cache-selector.jpg
new file mode 100644
index 0000000000..b0adaf5d32
Binary files /dev/null and
b/static/img/shenyu/benchmark-test/netty/800-currency/8-thread/3-netty-cache-selector.jpg
differ
diff --git a/static/img/shenyu/benchmark-test/origin/1.png
b/static/img/shenyu/benchmark-test/origin/1.png
new file mode 100644
index 0000000000..325391a03e
Binary files /dev/null and b/static/img/shenyu/benchmark-test/origin/1.png
differ