ASM中GRPC/HTTP2流式传输场景的Sidecar资源占用调优

简介: 当应用使用GRPC流式传输时,数据经由Sidecar进行转发,由于Sidecar工作于7层,所以Sidecar会对GRPC消息元信息进行解析后在转发,在一些场景下(例如在单连接上建立大规模Stream)可能会造成Sidecar内存占用提升。本文将介绍Sidecar控制GRPC流式传输性能的相关参数和其作用机制,用户可以通过这些参数对Sidecar资源占用进行调整,已取得运行性能和资源消耗的平衡。S

当应用使用GRPC流式传输时,数据经由Sidecar进行转发,由于Sidecar工作于7层,所以Sidecar会对GRPC消息元信息进行解析后在转发,在一些场景下(例如在单连接上建立大规模Stream)可能会造成Sidecar内存占用提升。本文将介绍Sidecar控制GRPC流式传输性能的相关参数和其作用机制,用户可以通过这些参数对Sidecar资源占用进行调整,已取得运行性能和资源消耗的平衡。

Sidecar针对GRPC的配置参数

Sidecar针对流式GRPC传输提供了如下参数,对这些参数进行调整,可使得Sidecar在性能与资源占用上取得平衡。

参数名称

作用

有效取值范围

默认值

http2_protocol_options.initial_connection_window_size

该参数用于设置GRPC流式传输中发送端的连接(Connection)级别的HTTP2流初始窗口大小。在上游(Upstream)调低该值可以降低上下游双端的内存压力。

参考1:HTTP2流控windows size;参考2:Envoy文档

65535 - 2147483647

65535

http2_protocol_options.initial_stream_window_size

该参数用于设置GRPC流式传输中发送端的流(Stream)级别的HTTP2流初始窗口大小。在上游(Upstream)调低该值可以降低上下游双端的内存压力。

参考1:HTTP2流控windows size;参考2:Envoy文档

65535 - 2147483647

65535

http2_protocol_options.max_concurrent_streams

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

1 - 2147483647

2147483647

stream_idle_timeout(仅下游连接)

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

300s

应用配置到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。

目录
相关文章
|
4月前
|
安全 前端开发 网络协议
|
4月前
|
数据采集 前端开发 安全
socks5代理是什么意思?它跟http代理有什么不同点?它有什么应用场景?
**SOCKS5**是一种代理协议,位于会话层,作为前端与服务器间的中介,确保通信安全。与**HTTP代理**不同,SOCKS5不处理应用层协议,提供更快的速度,且适用范围更广,不仅限于HTTP。主要应用场景包括数据采集和电子商务。选择使用取决于具体业务需求。
|
1月前
|
存储 算法 数据安全/隐私保护
基于 HTTP Header 传输签名参数
基于 HTTP Header 传输签名参数
45 13
|
11天前
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
32 0
|
16天前
|
负载均衡 中间件 Go
五分钟给你的 gRPC 服务加上 HTTP 接口
五分钟给你的 gRPC 服务加上 HTTP 接口
|
18天前
|
网络协议 编译器 Go
揭秘!TCP、RPC、gRPC、HTTP大PK,谁才是网络通信界的超级巨星?一篇文章带你秒懂!
【8月更文挑战第25天】本文以教程形式深入对比了TCP、RPC、gRPC与HTTP这四种关键通信协议,并通过Go语言中的示例代码展示了各自的实现方法。TCP作为一种可靠的传输层协议,确保了数据的完整性和顺序性;RPC与gRPC作为远程过程调用框架,特别适合于分布式系统的函数调用与数据交换,其中gRPC在性能和跨语言支持方面表现出色;HTTP则是广泛应用于Web浏览器与服务器通信的应用层协议。选择合适的协议需根据具体需求综合考量。
89 0
|
2月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
2月前
|
网络协议 Python
Python实现HTTP 传输的断点续传机制
使用Python `requests`库实现HTTP断点续传下载大文件,通过设置`Range`头部从上次中断的位置开始继续下载。示例代码展示了一个名为`resume_download`的函数,它接收URL、文件名和最后字节位置参数,以追加方式打开文件并逐块写入内容。要启用HTTP长连接,可添加`Connection: keep-alive`到请求头。
|
4月前
|
前端开发 安全 JavaScript
HTTP的系统登录页面,如何避免明文传输用户密码?
该文讨论了登录页面中密码安全传输的问题。当使用HTTP时,密码以明文形式传输,存在风险。在示例中,前端使用JavaScript的CryptoJS库和当前时间戳作为动态加密key对密码进行DES加密。后端接收到密文后,利用相同的时间戳解密。为了增强安全性,文章还建议使用RSA等非对称加密算法。
538 7
|
3月前
|
缓存 网络协议 应用服务中间件
深入理解 web 协议(一)- http 包体传输
深入理解 web 协议(一)- http 包体传输