当下游断开连接时,如何停止处理上游rq?

时间:2018-07-16 05:42:27

标签: grpc envoyproxy

我在为我的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

0 个答案:

没有答案