网格优化中心概述

本文介绍网格优化中心的作用及相关功能。

功能介绍

Service Mesh是一种用于管理微服务架构中网络通信的解决方案,通过在每个服务实例中添加代理,实现流量控制、服务发现、负载均衡等功能。虽然Service Mesh能够提供很多强大的功能,但也存在一些性能问题,例如:

  • 延迟增加:Service Mesh中每个服务的请求都必须经过一系列的代理,在代理的处理过程中会增加一定的延迟。

  • 资源占用增加:每个代理都需要一定的CPU、内存等资源,因此随着服务数量的增加,代理的资源占用也会相应增加。

  • 若开启TLS安全机制,Service Mesh中的代理会对流量进行加密和解密,将消耗一定的资源。

在实际使用中,需要根据具体情况进行选择和优化,以达到更好的性能和用户体验。阿里云服务网格ASM通过多维度、不同层面的性能优化手段来构建网格优化中心,提升产品的性能指标与高可用性:

一、收敛服务发现的范围,提升网格配置的推送效率

二、基于访问日志分析自动推荐生成Sidecar对象,以减少代理资源消耗

三、AdaptiveXDS:自适应配置推送优化

四、软硬结合性能优化的持续推进

五、资源超卖模式下的支持

一、收敛服务发现的范围,提升网格配置的推送效率

在Istio中,可以通过以下几种方式收敛服务发现的范围,从而提高控制平面推送网格配置的效率。通过收敛服务发现范围,可以达到如下目标,包括有效降低控制面组件CPU资源消耗与内存资源消耗、有效降低控制面组件与网格代理之间的通信时的带宽资源消耗。

通过Discovery Selector可以定义一组过滤规则,用于筛选出需要同步到控制平面的服务发现信息:

  • 基于命名空间范围的筛选,自动发现数据面Kubernetes集群中指定命名空间下的服务。

  • 与Istiod直接交互,有效提升控制面的处理效率。

此外,通过exportToworkloadSelector来收敛规则配置的范围,既可以支持全局设置(MeshConfig)或命名级别设置,又可以支持细粒度设置(perservice/config)。定义的内容示例如下图所示。

  • exportTo:用于控制规则(VirtualService、DestinationRule、ServiceEntry等)的可用性范围。

  • workloadSelector:用于配置规则(DestinationRule、ServiceEntry、EnvoyFilter、Sidecar)适用的服务范围。

image.png

ASM提供了对应的功能。如下图所示,您可以通过选中或取消选中命名空间来定义服务发现的范围。

image.png

如下图所示,您也可以通过编辑标签选择器的方式选择对应的命名空间下的服务。如果数据面Kubernetes集群的命名空间与任一标签选择器匹配,该命名空间下的服务将被包括在自动发现范围之内。同时,数据面Kubernetes集群的命名空间必须与每个标签选择器中定义的所有规则相符,才能被该选择器选中。更多信息,请参见配置服务发现范围提升网格配置的推送效率

image.png

二、基于访问日志分析自动推荐生成Sidecar对象,以减少代理资源消耗

此优化方案基于xDS和Sidecar对象实现。

xDS协议是X Discovery Service的简写,是Service Mesh控制面和数据面Sidecar Proxy之间的通信协议。x表示包含多种协议的集合,例如:LDS表示监听器的发现,CDS表示服务和版本的信息,EDS表示服务和版本有哪些实例,以及每个服务实例的特征信息,RDS表示路由的发现。

xDS协议是网格代理获取配置信息的传输协议,也是Istio与网格代理连接的桥梁。xDS可以简单理解为网格内的服务发现数据和治理规则的集合。xDS数据量的大小和网格规模呈正相关。

默认情况下,下发xDS使用的是全量下发策略,即网格里的所有网格代理内存里都会有整个网格内所有的服务发现数据。

在大多数情况下,在大规模集群中的一个简单的工作负载可能只与少数其他工作负载进行通信。将它的配置更改为仅包含一组必要的服务会对网格代理的内存占用产生较大影响。Sidecar资源对象可以帮助定义这种配置约束关系。

基于访问日志分析自动推荐生成Sidecar资源对象的工作实现原理如下:

  1. 通过分析数据平面网格代理产生的访问日志获取数据平面服务之间的调用依赖关系,为数据平面中的每个工作负载自动推荐生成相应的Sidecar资源对象。

  2. 根据分析结果生成出Sidecar资源对象之后,允许用户进行二次确认,或者用户基于自动生成的内容进行定制修改。

适用场景为已存在服务调用的日志数据,且现有业务服务的调用依赖关系变化不大,通过该方式可以一次性地实现优化。以bookinfo书评应用为例,通过几次请求之后,每个网格代理都会产生对应的访问日志。以productpage服务为例,生成的推荐的Sidecar资源对象内容如下:

image.png

使用该功能的前提条件如下:

依赖用户开通日志服务来采集访问日志内容,并要求产生的日志需要覆盖全部业务调用,才能得到全部的依赖关系。一旦某业务路径没有调用产生日志,则很有可能丢失对应的服务依赖关系,从而导致生成的Sidecar资源对象定义内容不准确,进而可能导致之后的该业务路径访问调用不通。

如下图所示,ASM提供了使用基于访问日志分析自动推荐的Sidecar资源对象来提升xDS推送的效率。更多信息,请参见使用基于访问日志分析自动推荐的Sidecar资源

image.png

三、AdaptiveXDS:自适应配置推送优化

为了缓解上述方案中的局限性,ASM提供了另外一种优化手段,即按需推送xDS配置的能力,自适应应用服务的变更。

自适应配置推送优化根据网格内服务的访问日志分析服务之间的依赖关系,并自动为服务生成Sidecar资源对象以优化针对该服务工作负载的配置推送。功能开启后,集群中会部署名为istio-axds-egressgateway的出口网关,服务之间调用的所有HTTP流量初始都将指向该出口网关,并通过网关记录的访问日志自动分析服务之间的依赖关系。

通过如下架构图可以看到:

  • 在托管侧,Adaptive XdsController组件负责管理AdaptiveXds-EgressGateway的生命周期、生成AdaptiveXds-EgressGateway所需的EnvoyFilter及Bootstrap配置等。

  • 启用该功能之后,AdaptiveXds-EgressGateway会上报访问日志到Access Log Service(ALS)服务。

  • Access Log Service(ALS)负责接收网格代理发送的日志数据,并结合ALSAnalyzer分析日志内容,然后根据服务调用依赖关系生成对应的Sidecar资源对象。

image.png

为集群内的服务启用自适应配置推送优化能力,可以按照命名空间范围进行开启。开启后,命名空间内的服务都将自动地进行基于Sidecar资源对象的配置推送优化。

此外,您也可以在Kubernetes服务的annotations中增加asm.alibabacloud.com/asm-adaptive-xds: true注解以单独为该服务打开优化选项。

在使用ASM产品的某客户场景中,通过该方式优化之后,网格代理中的配置减少了90%,所消耗的内存消耗从400 MB减少到50 MB。

ASM提供自适应配置推送优化提升xDS推送的效率以及减少网格代理的不必要配置。更多信息,请参见使用自适应配置推送优化提升控制平面推送效率

四、软硬结合性能优化的持续推进

数据面的形态是多样的,运行的ECS规格型号、OS的版本等都不尽相同。通过探测节点的特征,可以更好地理解节点所具备的支撑能力,例如可以根据Kernel版本判断是否支持eBPF的相关功能,根据是否支持AVX扩展指令集决定开启TLS加解密处理能力,或者判断是否提供了Device Plugin等。

image.png

也就是说,通过检测Kubernetes集群中每个节点上可用的硬件功能特征,包括CPUID特征、指令集扩展等,然后根据探测到的特征,自适应动态配置相应的特性,自适应启用或禁用对应特性,整个过程对用户无感知。

采用此方式,可以充分利用用户使用的节点环境,动态启用这些特性,从而提升相应的能力。ASM支持根据是否支持AVX指令集动态启用Multi-Buffer特性,提升TLS加解密性能。更多信息,请参见基于英特尔架构的阿里云服务网格ASM技术加速应用服务加密通

image.png

具体来说:

  1. 在服务网格控制面,通过扩展MeshConfig或者CRD方式,为您提供统一的声明式配置定义。

  2. 控制面的配置通过xDS协议下发到数据面Envoy代理。这一部分也是ASM产品中的一些扩展能力。

  3. 工作负载Pod的调度优先与自适应动态配置。通过对节点的特征标识,ASM优先将启动Multi-Buffer功能的Pod调度到对应的节点上,从而使相关的功能能够被启用。除了调度之外,ASM产品支持自适应动态配置能力,即使没有对应的节点可调度,这些Pod在其他节点上部署时,也能够自适应去禁用这些功能。

五、资源超卖模式下的支持

在Kubernetes系统中,Kubelet通过参考Pod的QoS等级来管理单机容器的资源质量,例如OOM(Out of Memory)优先级控制等。Pod的QoS级别分为Guaranteed、Burstable和BestEffort。QoS级别取决于Pod配置的Request和Limit(CPU、内存)。

image.png

ack-koordinator提供动态资源超卖功能,通过对节点负载数据的实时收集,可以充分挖掘集群中已分配但未使用的资源量,以实现对集群资源的动态超卖。

一般不强制资源限制和所需资源配置为相同值。建议您参照工作负载类型,对资源限制和所需资源进行配置。

  • 若QoS为Guaranteed类型的工作负载,建议您两者配置为相同值。

  • 若为其他类型的Pod,建议您保持与原生资源类型中所需资源小于资源限制的约定。

ASM支持设置注入的Istio代理以及isito-init初始化容器的ACK动态超卖资源。更多信息,请参见配置Sidecar代理在Sidecar中配置ACK动态超卖资源