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。

目录
相关文章
|
21天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
37 3
|
27天前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
9天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
43 3
|
22天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
24 3
|
23天前
|
前端开发 JavaScript 数据库
https页面加载http资源的解决方法
https页面加载http资源的解决方法
38 4
|
22天前
|
网络协议 前端开发 API
HTTP 和 TCP 协议的应用场景有哪些不同
【10月更文挑战第25天】HTTP(超文本传输协议)和 TCP(传输控制协议)处于网络协议栈的不同层次,各自具有独特的功能和特点,因此它们的应用场景也存在明显的差异。
|
2月前
|
前端开发 JavaScript 数据库
https页面加载http资源的解决方法
https页面加载http资源的解决方法
174 7
|
1月前
|
存储 前端开发 NoSQL
拿下奇怪的前端报错(四):1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点
在一个使用MongoDB GridFS存储文件的项目中,音频和视频文件在大部分设备上播放时长显示为无限,而单独播放则正常。经调查发现,问题源于HTTP Range请求的处理不当,导致最后一个字节未被正确返回。通过调整请求参数,使JavaScript/MongoDB的操作范围与HTTP Range一致,最终解决了这一问题。此案例强调了对HTTP协议深入理解及跨系统集成时注意细节的重要性。
|
2月前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。
|
3月前
|
存储 算法 数据安全/隐私保护
基于 HTTP Header 传输签名参数
基于 HTTP Header 传输签名参数
84 13