当应用使用GRPC流式传输时,数据经由Sidecar进行转发,由于Sidecar工作于7层,所以Sidecar会对GRPC消息元信息进行解析后在转发,在一些场景下(例如在单连接上建立大规模Stream)可能会造成Sidecar内存占用提升。本文将介绍Sidecar控制GRPC流式传输性能的相关参数和其作用机制,用户可以通过这些参数对Sidecar资源占用进行调整,已取得运行性能和资源消耗的平衡。
Sidecar针对GRPC的配置参数
Sidecar针对流式GRPC传输提供了如下参数,对这些参数进行调整,可使得Sidecar在性能与资源占用上取得平衡。
应用配置到Sidecar
要将上述配置作用到指定ASM Sidecar,需要借助自定义ASM提供的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过滤器模板
打开服务网格控制台,并进入服务网格详情页面,点击导航栏中的【插件市场】,搜索【自定义】,找到自定义Envoy过滤器模板,点击【应用此模板】
输入名称h2-control(该名称可自定义),点击【添加Envoy过滤器模板适配版本】,并在新增的项目上选择这个Envoy过滤器适配的版本。选择当前网格实例版本即可。
将第一步通过模板编写的EnvoyFilter YAML粘贴至刚才添加的适配版本输入框中,点击确定保存。完成创建。参考文档:https://help.aliyun.com/document_detail/157263.html绑定工作负载至期望调整的Workload。