我在为我的gRPC服务器设置特使时遇到问题。我想使用envoy进行gRPC负载平衡。
我的客户端创建了1000 rq/sec
,服务器响应延迟为500ms
,其中有2个副本。
问题是:
客户端启动时,upstream_rq_active
增加。响应比请求慢。我了解到,由于请求过多,特使将一些请求排入了队列,以备后用。在我的测试场景中,当upstream_rq_active
到达15k
附近时,特使关闭了下游连接。但是,待处理的请求仍在处理中。当特使从上游获取响应时,无法将其发送到下游。这样就得到了503
。
我的问题是,当下游连接断开时,如何停止处理待处理的请求?
配置:
listeners:
-
name: "test-svc-gRPC-listener"
address:
socket_address:
address: "0.0.0.0"
port_value: 8787
filter_chains:
-
filters:
-
name: "envoy.http_connection_manager"
config:
tracing:
operation_name: egress
stat_prefix: "ingress_8787"
codec_type: "AUTO"
generate_request_id: true
route_config:
name: "test-svc-gRPC-route"
virtual_hosts:
-
name: "test-svc-gRPC-route"
domains:
- "*"
routes:
-
match:
prefix: "/"
route:
cluster: "test-svc-gRPC"
timeout: 15s
http_filters:
-
name: "envoy.router"
clusters:
-
name: "test-svc-gRPC"
connect_timeout: "1s"
type: "strict_dns"
lb_policy: "ROUND_ROBIN"
http2_protocol_options: {}
hosts:
-
socket_address:
address: "echo-server.default"
port_value: 8080