在HTTP2流式传输场景下调优Sidecar资源占用

当应用使用HTTP2流式传输时,Sidecar基于七层协议对消息元信息进行解析转发,在一些场景下(例如在单连接上建立大规模Stream)可能会增加Sidecar的内存占用。本文介绍Sidecar控制HTTP2流式传输性能的相关参数和作用机制,您可以通过这些参数对Sidecar的资源占用进行调优。

配置说明

Sidecar针对流式HTTP2传输提供了如下参数,您可以对这些参数进行调整,平衡Sidecar的性能与资源占用。

参数

作用

取值范围

默认值

http2_protocol_options.initial_connection_window_size

用于设置HTTP2流式传输中发送端的连接(Connection)级别的HTTP2流初始窗口大小。在上游(Upstream)调低该值可以降低上下游双端的内存压力。更多信息,请参见Initial Flow-Control Window SizeProtocol Options

65535~2147483647

65535

http2_protocol_options.initial_stream_window_size

用于设置HTTP2流式传输中发送端的流(Stream)级别的HTTP2流初始窗口大小。在上游(Upstream)调低该值可以降低上下游双端的内存压力。更多信息,请参见Initial Flow-Control Window SizeProtocol Options

65535~2147483647

65535

http2_protocol_options.max_concurrent_streams

用于设置在一个连接上最多建立多少个流。调高该值可以提高并发数量和传输效率,同时增大发送、接收双方的CPU和Memory占用;适当调低该值可以降低并发数量和传输效率,但可以减少发送、接收双方的CPU和Memory占用。

1~2147483647

2147483647

stream_idle_timeout(仅下游连接)

用于设置空闲流(Stream)的超时时间,当流在该时间没有任何活动时,该流将被终止。缩短该时间可以更快将空闲Stream关闭,从而释放相关上下文和缓冲区所占用的空间。

300s

调整Sidecar相关配置

将上述配置作用到指定Sidecar,需要借助自定义EnvoyFilter模板,具体步骤如下:

步骤一:使用模板编写EnvoyFilter

本文提供三个模板,分别用于调整上游连接、下游连接和上下游连接,请将模板中的${TO_BE_POPULATE}替换为您实际的期望值。

  • 调整上游连接参数模板:

    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:
      name: h2-control
      namespace: default
    spec:
      configPatches:
      - applyTo: CLUSTER
        match:
          proxy:
            proxyVersion: ^1\.[1-9][0-9].*
        patch:
          operation: MERGE
          value:
            http2_protocol_options:
              initial_connection_window_size: ${TO_BE_POPULATE}
              initial_stream_window_size: ${TO_BE_POPULATE}
              max_concurrent_streams: ${TO_BE_POPULATE}
  • 调整下游连接参数模板:

    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:
      name: h2-control
      namespace: default
    spec:
      configPatches:
      - applyTo: NETWORK_FILTER
        match:
          listener:
            filterChain:
              filter:
                name: envoy.filters.network.http_connection_manager
          proxy:
            proxyVersion: ^1\.[1-9][0-9].*
        patch:
          operation: MERGE
          value:
            typed_config:
              '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
              http2_protocol_options:
                initial_connection_window_size: ${TO_BE_POPULATE}
                initial_stream_window_size: ${TO_BE_POPULATE}
                max_concurrent_streams: ${TO_BE_POPULATE}
              stream_idle_timeout: ${TO_BE_POPULATE}
  • 调整上下游连接模板:

    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:
      name: h2-control
      namespace: default
    spec:
      configPatches:
      - applyTo: CLUSTER
        match:
          proxy:
            proxyVersion: ^1\.[1-9][0-9].*
        patch:
          operation: MERGE
          value:
            http2_protocol_options:
              initial_connection_window_size: ${TO_BE_POPULATE}
              initial_stream_window_size: ${TO_BE_POPULATE}
              max_concurrent_streams: ${TO_BE_POPULATE}
      - applyTo: NETWORK_FILTER
        match:
          listener:
            filterChain:
              filter:
                name: envoy.filters.network.http_connection_manager
          proxy:
            proxyVersion: ^1\.[1-9][0-9].*
        patch:
          operation: MERGE
          value:
            typed_config:
              '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
              http2_protocol_options:
                initial_connection_window_size: ${TO_BE_POPULATE}
                initial_stream_window_size: ${TO_BE_POPULATE}
                max_concurrent_streams: ${TO_BE_POPULATE}
              stream_idle_timeout: ${TO_BE_POPULATE}

步骤二:创建自定义Envoy过滤器模板

  1. 登录ASM控制台

  2. 在左侧导航栏,选择服务网格 > 网格管理

  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

  4. 在网格详情页面左侧导航栏,选择插件扩展中心 > Envoy过滤器模板

  5. Envoy过滤器模板页面,单击创建Envoy过滤器模板,配置相关参数,然后单击创建

    区域

    说明

    基本信息

    配置自定义Envoy过滤器模板的名称。本文配置为h2-control

    多版本适配Envoy过滤器模板

    单击添加Envoy过滤器模板适配版本,选择适配Isito版本,将步骤一编写的EnvoyFilter粘贴到YAML框中。

  6. 将Envoy过滤器模板绑定至指定的工作负载及命名空间。具体操作,请参见使用Envoy过滤器模板创建Envoy过滤器