|
|

Traefik 是什么?
Traefik 是一个现代化的七层反向代理和负载均衡器,主打一个核心理念 —— 服务即配置(Service Discovery First)。
和传统反向代理(如 Nginx)最大的不同在于:你不需要手写大量配置文件,Traefik 会主动“观察”你的运行环境,自动生成路由规则。
因为“服务即配置”这个特点,Traefik 特别适合这些场景:
- Docker / Docker Compose
- Kubernetes(Ingress Controller)
- 微服务架构
- 小团队或独立开发者的在线服务
简单来说,如果你的服务是“动态变化的”,Traefik 会比传统反向代理省心得多。
基准
配置
我要感谢exoscale.ch的vincentbernat,他慷慨地提供了基准测试所需的基础设施。
我使用了 4 台虚拟机进行测试,配置如下:
32 GB 内存
8个CPU核心
10GB 固态硬盘
Ubuntu 14.04 LTS 64 位
设置
一台虚拟机用于启动基准测试工具wrk
一台虚拟机用于 Traefik (v1.0.0-beta.416) / nginx (v1.4.6)
在 Go 中为 2 个后端服务器配置了两个虚拟机,谁是?
每台虚拟机都已使用以下限制进行了调优:
Nginx
以下是 Nginx 配置文件的使用方法/etc/nginx/nginx.conf:
以下是使用的 Nginx 虚拟主机配置文件:
Traefik
以下是traefik.toml使用的文件:
结果
whoami:
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --latency http://IP-whoami:80/bench
Running 1m test @ http://IP-whoami:80/bench
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 70.28ms 134.72ms 1.91s 89.94%
Req/Sec 2.92k 742.42 8.78k 68.80%
Latency Distribution
50% 10.63ms
75% 75.64ms
90% 205.65ms
99% 668.28ms
3476705 requests in 1.00m, 384.61MB read
Socket errors: connect 0, read 0, write 0, timeout 103
Requests/sec: 57894.35
Transfer/sec: 6.40MB
nginx:
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --latency http://IP-nginx:8001/bench
Running 1m test @ http://IP-nginx:8001/bench
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 101.25ms 180.09ms 1.99s 89.34%
Req/Sec 1.69k 567.69 9.39k 72.62%
Latency Distribution
50% 15.46ms
75% 129.11ms
90% 302.44ms
99% 846.59ms
2018427 requests in 1.00m, 298.36MB read
Socket errors: connect 0, read 0, write 0, timeout 90
Requests/sec: 33591.67
Transfer/sec: 4.97MB
Traefik
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --latency http://IP-traefik:8000/bench
Running 1m test @ http://IP-traefik:8000/bench
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 91.72ms 150.43ms 2.00s 90.50%
Req/Sec 1.43k 266.37 2.97k 69.77%
Latency Distribution
50% 19.74ms
75% 121.98ms
90% 237.39ms
99% 687.49ms
1705073 requests in 1.00m, 188.63MB read
Socket errors: connect 0, read 0, write 0, timeout 7
Requests/sec: 28392.44
Transfer/sec: 3.14MB
结论
Traefik 的速度显然比 Nginx 慢,但差距并不大:Traefik 每秒可处理 28392 个请求,Nginx 每秒可处理 33591 个请求,两者的性能比为 85%。对于一个年轻的项目来说,这相当不错了 :) !
一些可以改进的方面:
使用GO_REUSEPORT监听器
每个 CPU 核心运行一个单独的服务器实例GOMAXPROCS=1(基准测试表明,Traefik 的上下文切换比 nginx 要多得多)。
原文:超链接登录可见。 |
上一篇:NAS 威联通 QTS 和 QuTS Hero 操作系统区别下一篇:发现一些好的技术博客、作者
|