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。

目录
相关文章
|
1月前
|
Cloud Native 算法 区块链
站在巨人的肩膀上:gRPC通过HTTP/2构建云原生时代的通信标准
gRPC是云原生时代高效通信标准,基于HTTP/2实现,支持四种服务方法。通过.proto文件定义接口,生成多语言Stub,实现跨语言调用。其请求响应结构清晰,结合Headers、Data帧与Trailers,保障高性能与可扩展性,广泛应用于微服务架构中。
106 0
|
3月前
|
网络协议 安全 API
WebSocket、Socket、TCP 和 HTTP 的差别与应用场景
WebSocket、Socket、TCP 和 HTTP 是网络通信中的四大“使者”,各具特色:HTTP 适合短时请求,TCP 稳定可靠,Socket 灵活定制,WebSocket 实现实时双向通信。本文用通俗语言解析它们的区别与应用场景,助你为项目选择最合适的通信方式。
1458 3
|
4月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
231 18
|
4月前
|
安全 Linux 定位技术
Curl访问Kerberos SPNEGO保护的HTTP资源
最后,记住,虽然Kerberos的魔法强大且久经考验,但它仍需你谨慎掌握。SPNEGO的舞步看似复杂,但一旦跳起来,你会发现自己在安全和便捷的旋律中翩翩起舞。而Curl,这一灵活敏捷的小工具,它的确有能力成为你施展这些魔法的得力助手。
107 14
|
11月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
323 3
|
6月前
|
XML 网络协议 程序员
Apipost接口调试全解:从HTTP到gRPC,程序员必备的“协议生存指南
Apipost是一款强大的接口调试工具,支持多种主流API协议。它涵盖HTTP/HTTPS、WebSocket、Socket.IO、gRPC、GraphQL、TCP及ISO8583金融报文等冷门协议。通过Body多样化、全局参数配置、性能分析等功能优化HTTP调试;提供WebSocket多消息存档与事件监听;gRPC支持服务反射和流式调试;GraphQL可自动生成Schema;TCP报文模板专业精准;SSE配置简单。此外,Apipost还具备环境变量、脚本加持和文档生成功能,是提升开发效率的全能工具。
|
6月前
|
JSON JavaScript 前端开发
gRPC技术中的gRPC到HTTP的转换
从上述内容,我们可以看到,gRPC到HTTP的转换并没有改变gRPC强大的性能和可扩展性。它只是让这些强大的功能能更好地适应不同的环境和需求,兼容了更广泛的网络设施。所以,技术总是在变化,并且始终在寻找更好的平衡点,以满足不断变化的业务需求。我们也应该持续学习,掌握这些新的变化,以便更好地解决实际问题。
182 11
|
7月前
|
JavaScript 前端开发 API
Superagent 异步请求:如何处理复杂的 HTTP 场景
Superagent 异步请求:如何处理复杂的 HTTP 场景
|
7月前
|
Cloud Native 算法 中间件
如何使用服务网格实现全方位的流量调度场景
阿里云服务网格(ASM)通过流量调度套件扩展了Istio的限流、熔断能力,实现分用户限流、请求排队等复杂流量管理功能,提升分布式系统高可用性与可观测性。
|
9月前
|
Kubernetes 容灾 Cloud Native
服务网格容灾系列场景(三):使用服务网格应对服务级故障容灾
文章介绍了使用服务网格应对服务级故障容灾的实践:服务网格ASM通过多集群、多地域部署和基于地理位置的故障转移机制,实现服务级故障的自动检测与秒级流量切换,能够确保业务在复杂故障场景下的高可用性。

热门文章

最新文章