本文翻譯自以下:
原文 http://instea.sk/2015/04/netflix-zuul-vs-nginx-performance/
直接連接服務(wù)
不走代理直接訪問(wèn)服務(wù)
$ ab -n 10000 -c 200 http://target/sample.html
....
Document Path: /sample.html
Document Length: 26650 bytes
Total transferred: 268940000 bytes
HTML transferred: 266500000 bytes
Requests per second: 2928.45 [#/sec] (mean)
Time per request: 68.295 [ms] (mean)
Time per request: 0.341 [ms] (mean, across all concurrent requests)
Transfer rate: 76911.96 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 33 6.0 32 66
Processing: 20 35 7.5 35 392
Waiting: 20 35 6.4 34 266
Total: 24 68 7.8 66 423
Percentage of the requests served within a certain time (ms)
50% 66
66% 67
75% 69
80% 70
90% 74
95% 81
98% 91
99% 92
100% 423 (longest request)
測(cè)試結(jié)果為:2928 ; 2725 ; 2834 ; 2648 req/s拧略,此結(jié)果只供參考
通過(guò)nginx訪問(wèn)服務(wù)
配置nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# Make site accessible from http://localhost/
server_name localhost;
# allow file upload
client_max_body_size 10M;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://target:80;
}
}
執(zhí)行測(cè)試腳本
$ ab -n 50000 -c 200 http://proxy/sample.html
...
Server Software: nginx/1.4.6
Server Hostname: proxy
Server Port: 80
Document Path: /sample.html
Document Length: 26650 bytes
Concurrency Level: 200
Time taken for tests: 52.366 seconds
Complete requests: 50000
Failed requests: 0
Total transferred: 1344700000 bytes
HTML transferred: 1332500000 bytes
Requests per second: 954.81 [#/sec] (mean)
Time per request: 209.465 [ms] (mean)
Time per request: 1.047 [ms] (mean, across all concurrent requests)
Transfer rate: 25076.93 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 3 50 11.7 48 114
Processing: 37 159 11.9 160 208
Waiting: 36 159 11.9 160 207
Total: 40 209 10.4 209 256
Percentage of the requests served within a certain time (ms)
50% 209
66% 212
75% 214
80% 216
90% 220
95% 224
98% 232
99% 238
100% 256 (longest request)
測(cè)試結(jié)果為:954 ; 953 ; 941 req/s惭笑,并發(fā)量變低
通過(guò)Zuul訪問(wèn)服務(wù)
實(shí)現(xiàn)Zuul
@SpringBootApplication
@Controller
@EnableZuulProxy
public class DemoApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(DemoApplication.class).web(true).run(args);
}
}
定義路由
zuul:
routes:
sodik:
path: /sodik/**
url: http://target
執(zhí)行測(cè)試腳本
$ ab -n 50000 -c 200 http://proxy:8080/sodik/sample.html
Server Software: Apache-Coyote/1.1
Server Hostname: proxy
Server Port: 8080
Document Path: /sodik/sample.html
Document Length: 26650 bytes
Concurrency Level: 200
Time taken for tests: 136.164 seconds
Complete requests: 50000
Failed requests: 2
(Connect: 0, Receive: 0, Length: 2, Exceptions: 0)
Non-2xx responses: 2
Total transferred: 1343497042 bytes
HTML transferred: 1332447082 bytes
Requests per second: 367.20 [#/sec] (mean)
Time per request: 544.657 [ms] (mean)
Time per request: 2.723 [ms] (mean, across all concurrent requests)
Transfer rate: 9635.48 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 12 92.3 2 1010
Processing: 15 532 321.6 461 10250
Waiting: 10 505 297.2 441 9851
Total: 17 544 333.1 467 10270
Percentage of the requests served within a certain time (ms)
50% 467
66% 553
75% 626
80% 684
90% 896
95% 1163
98% 1531
99% 1864
100% 10270 (longest request)
測(cè)試結(jié)果為:367 req/s,并發(fā)量比較低赫冬,并且出現(xiàn)了2次請(qǐng)求錯(cuò)誤
再多測(cè)試幾次
Document Path: /sodik/sample.html
Document Length: 26650 bytes
Concurrency Level: 200
Time taken for tests: 50.080 seconds
Complete requests: 50000
Failed requests: 0
Total transferred: 1343550000 bytes
HTML transferred: 1332500000 bytes
Requests per second: 998.39 [#/sec] (mean)
Time per request: 200.322 [ms] (mean)
Time per request: 1.002 [ms] (mean, across all concurrent requests)
Transfer rate: 26199.09 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 16 7.9 16 126
Processing: 15 184 108.1 203 1943
Waiting: 13 183 105.9 202 1934
Total: 18 200 107.8 218 1983
Percentage of the requests served within a certain time (ms)
50% 218
66% 228
75% 235
80% 239
90% 254
95% 287
98% 405
99% 450
100% 1983 (longest request)
測(cè)試結(jié)果為:998 req/s,并發(fā)量和通過(guò)Nginx訪問(wèn)服務(wù)差不多
結(jié)論
Zuul的原始性能接近Nginx屠橄。事實(shí)上座硕,在啟動(dòng)預(yù)熱之后,顯示測(cè)試結(jié)果更好一些。但Nginx看上去會(huì)穩(wěn)定一下馒稍,Zuul出現(xiàn)了2次的請(qǐng)求錯(cuò)誤皿哨。
如果你想使用Zuul的其他功能,或者希望通過(guò)它與其他的Netflix服務(wù)集成(比如Eureka)纽谒,Zuul可以作為其他簡(jiǎn)單反向代理的替代品证膨。