更新时间:2023-03-23 gmt 08:00

大规格实例优化-凯发k8国际娱乐官网入口

当网格内实例规模持续增大时,会引起istio控制面组件istiod和数据面组件envoy的内存飙升问题。在购买网格时,可以为网格启用mantis插件来解决此问题。

大规格实例优化特性仅在“华东-上海一”区域开放。

mantis插件介绍

mantis致力于解决由网格内实例规模增大而引起的istio控制面组件istiod和数据面组件envoy的内存飙升问题。同时,从多个维度输出了istio相关性能模型,填补了istio在大规模实例场景下的性能模型空白,为istio性能提升提供了有力支撑。

  • 提高控制面istiod稳定性

    istio采用的是全局更新配置信息策略,如下图所示,当服务b的相关信息发生变化时,istiod会生成全量xds并推送给网格内所有proxy,这会导致istiod的瞬时cpu、内存占用过高,可能导致istiod重启。

    mantis根据服务依赖关系按需更新配置,当服务b的相关信息发生变化时,istiod会将服务b相关的更新推送给调用服务b的相关服务(服务a和服务d)的所有endpoint中,包括生成配置和下发配置,可极大缓解istiod cpu、内存占用过高的问题,提高控制面的稳定性。

  • 减小数据面sidecar资源消耗

    istio使用envoy作为网格数据面的sidecar。目前istio采用的是全局更新配置信息策略,即网格内每一个实例中的envoy都储存了网格内其他所有服务的相关信息,包括listener、route、cluster和endpoint。这在实例规模不断增大的情况下,将会发生内存爆炸,在实际生产环境中是不可接受的。

    mantis根据服务依赖关系按需更新配置,即每一个实例的envoy只存储和本服务需要调用的服务的相关信息,可以将envoy的内存占用最小化。

mantis工作原理

mantis的架构和工作流程如下图所示:

网格安装mantis后,会在用户集群安装centralgateway(cgw)组件。cgw包含网格全局的服务路由信息,用于转发首包流量;网格控制面会根据服务调用关系按需更新服务路由信息。

网格安装初始化完成后,所有服务实例(pod)的envoy中只存储了cgw组件的路由信息。

  1. 当某个服务service a的实例(pod)第一次访问另一个服务service b时,由于service a实例的envoy中没有service b的路由信息,envoy会将请求发送到cgw上。
  2. cgw保存了网格全局的服务路由信息,所以cgw可以将请求转发到service b的实例。
  3. 同时,cgw会将service b的路由信息上报到mantis控制面。
  4. 然后再由mantis控制面下发给service a的所有实例。
  5. 在后续service a访问service b时,由于service a所有实例的envoy中已经存在service b的路由信息,请求将会被直接转发给service b的实例。

而对于service a未访问过的服务,service a所有实例的envoy中不会存储服务的路由信息,可以有效减小envoy内存消耗。

mantis使用约束

  • 启用mantis插件对网格有如下限制:

    企业版网格,1.8.4-r4及以上网格版本,扁平网络拓扑。

  • mantis插件仅针对http协议的服务做优化。
  • 安装mantis插件后,暂时不支持卸载。
  • 安装mantis插件的网格升级时,会同步升级mantis插件。
  • 启用mantis插件后,如有访问外部服务的需求,需要为集群所在vpc子网配置nat网关。
分享:
网站地图