使用ASM流量调度套件进行分布式系统流量控制
ASM流量调度套件提供了一个对业务无侵入、可扩展的流量动态调度架构,用于统一管理和控制分布式系统中的所有流量,以达到增强云原生分布式应用的可靠性、优化分布式应用成本和资源利用率等目的。本文介绍ASM流量调度套件的概念和相关功能。
什么是ASM流量调度套件
ASM流量调度套件是基于服务网格的流量统一调度架构模式,以及基于该架构模式开发的多种流量调度策略的统称,旨在对云原生分布式应用中的请求进行统一的负载调度与管理。这些能力可以增强云原生分布式应用的可靠性,同时优化成本和资源利用效率。
ASM流量调度套件的核心架构主要包括ASM请求调度控制器和ASM请求调度Agent。当Sidecar转发Pod的出站或入站请求时,将与ASM请求调度Agent进行交互,并从Agent处获取流量调度决策,进而对请求进行限流、排队等调度行为。ASM流量调度套件提供一系列预置的流量调度策略,这些策略将经过ASM请求调度控制器向ASM请求调度Agent进行发布,以动态控制流量负载的调度行为。
开启ASM流量调度套件
容器服务 Serverless 版和容器计算服务 ACS(Container Compute Service)暂不支持开启ASM流量调度套件。
要使用ASM流量调度套件,首先需要确保ASM实例版本在1.21.6.82及以上,并且已经向ASM实例中添加Kubernetes集群。具体操作,请参见添加集群到ASM实例。
开启ASM流量调度套件的步骤如下:
控制台
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 ,然后单击启用流量调度套件。
参考以下内容配置后,单击确定。
配置项
说明
依赖存储类
套件Agent依赖于集群中的存储类进行元数据交换,您可以通过查看Ack集群存储类进行查看和确认。
Agent资源设置
用于配置套件Agent Pod的运行资源需求和限制。资源限制(Limit)默认值为2CPU 1024MiB内存,所需资源(Request)默认值为0.5CPU 512MiB。您可以根据您的实际需求进行调整。
调度超时时间
流量调度套件支持在系统过载时对请求进行排队,排队时长超过给定时间的请求将被丢弃。默认值为60s。
生效范围
您可以根据实际需求,选择流量调度套件的生效范围,不配置则默认全局生效。目前支持的生效范围有:
网关生效范围:指定网关相关联的资源生效。
工作负载范围:指定某工作负载生效。
命名空间范围:指定某个命名空间生效。
功能成功开启后,您随时可以通过单击修改流量调度套件配置修改上述配置。
kubectl
使用kubectl连接到ASM实例,具体操作,请参见通过控制面kubectl访问Istio资源。
执行以下命令。
kubectl patch asmmeshconfig default --type=merge --patch='{"spec":{"adaptiveSchedulerConfiguration":{"enabled":true,"schedulerScopes":[{"namespace":"default"}]}}}'
ASM流量调度套件支持的流量调度策略
以下为ASM流量调度套件目前支持的策略及对应说明。
策略 | 说明 | 相关文档 |
流量速率限制 | 流量速率限制策略即RateLimtingPolicy。此策略提供针对网格内指定服务服务提供全局限流能力,相比Istio社区限流方案增加分用户限流、设置突发流量窗口、自定义请求token消耗速率等高级限流功能。 | |
基于平均延迟的请求优先级调度 | 基于平均延迟的请求优先级调度策略通过将实时延迟和历史平均值进行比较来检测流量过载,并通过令牌桶和优先级机制来对请求进行调度。当系统发生过载时,优先级高的请求能够更快地被处理。 | |
并发度控制 | 并发度控制会维护正在处理的请求记录(即已经发送但尚未响应的请求),当正在处理的请求数量超过指定限制时,拒绝后续到来的请求。 | |
可控并发下的请求优先级调度 | 通过指定的并发数限制来判断流量是否过载,当请求并发数超过指定上限后,后续请求将被排队并根据请求优先级进行调度。 | |
服务渐进式上线策略 | ASM流量管理套件支持服务渐进式上线策略。当新服务发布时,通过同步配置渐进式上线策略可以使得服务接收到的流量逐渐增加,确保服务平稳上线。 | |
指定请求调用配额下的请求优先级调度 | 当系统中正在处理的请求速率超过指定的配额时,后续的请求将会被排队,同时优先级更高的请求能够被更快地处理。 |
配置采集ASM流量调度套件相关指标
如果您的Kubernetes集群集成了阿里云可观测监控Prometheus版或自建Prometheus实例,您可以通过以下方式配置采集ASM请求调度Agent的监控指标,以监控ASM流量调度套件中各个策略对流量的调度控制行为。
阿里云可观测监控Prometheus版
您可以使用以下内容新增自定义采集规则。具体操作,请参见其它Prometheus服务发现配置。
scrape_configs:
- job_name: asm-adaptive-scheduler-stats
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: http
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_namespace
action: keep
regex: istio-system
- source_labels:
- __meta_kubernetes_pod_container_port_name
action: keep
regex: server
- source_labels:
- __meta_kubernetes_pod_container_name
action: keep
regex: aperture-agent
自建Prometheus实例
您需要将阿里云可观测监控Prometheus版中的JSON内容添加到Prometheus实例的scrape_configs配置中。具体操作,请参见Prometheus configuration。