当应用使用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 Size和Protocol Options。 | 65535~2147483647 | 65535 |
http2_protocol_options.initial_stream_window_size | 用于设置HTTP2流式传输中发送端的流(Stream)级别的HTTP2流初始窗口大小。在上游(Upstream)调低该值可以降低上下游双端的内存压力。更多信息,请参见Initial Flow-Control Window Size和Protocol 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过滤器模板
登录ASM控制台。
在左侧导航栏,选择 。
在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
在网格详情页面左侧导航栏,选择 。
在Envoy过滤器模板页面,单击创建Envoy过滤器模板,配置相关参数,然后单击创建。
区域
说明
基本信息
配置自定义Envoy过滤器模板的名称。本文配置为h2-control。
多版本适配Envoy过滤器模板
单击添加Envoy过滤器模板适配版本,选择适配Isito版本,将步骤一编写的EnvoyFilter粘贴到YAML框中。
将Envoy过滤器模板绑定至指定的工作负载及命名空间。具体操作,请参见使用Envoy过滤器模板创建Envoy过滤器。