area/perfhelp wantedinvestigate
仓库指标
- Star
- (27,997 star)
- PR 合并指标
- (平均合并 8天) (30 天内合并 378 个 PR)
描述
I did some simple tests today and found that envoy's performance seems to be getting worse and worse. Although I know features should always come at some cost. But those costs seem to be too much.
And although I know that performance is not the first goal of Envoy. But with continuous enhancement of Envoy, the performance seems to degrade too quickly. Here are some simple results of single envoy worker:
| Version | QPS |
|---|---|
| v1.12.4 | 26921.48 |
| v1.13.3 | 25182.18 |
| v1.14.7 | 23732.31 |
| v1.15.5 | 21010.66 |
| v1.16.5 | 19116.81 |
| v1.17.4 | 17804.78 |
| v1.18.4 | 16953.67 |
| v1.19.1 | 16046.59 |
| v1.20.0 | 15949.65 |
I think we should at least prevent it from further deterioration, and at the same time find ways to optimize it.
Here is my config yaml:
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 9090
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
codec_type: auto
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: host-one # prefix route
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster: httpbin
http_filters:
- name: envoy.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
dynamic_stats: false
suppress_envoy_headers: true
clusters:
- name: httpbin
connect_timeout: 5s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: httpbin
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: localhost
port_value: 8080
admin:
access_log_path: "/dev/null"
address:
socket_address:
address: 0.0.0.0
port_value: 20000
Back-end: multi-processes Nginx that will return simple short string.
Client command: wrk -c 200 -t 2 -d 180s http://localhost:9090/