使用ASM流量调度套件进行分布式系统流量控制
ASM流量调度套件提供了一个对业务无侵入、可扩展的流量动态调度架构,用于统一管理和控制分布式系统中的所有流量,以达到增强云原生分布式应用的可靠性、优化分布式应用成本和资源利用率等目的。本文介绍ASM流量调度套件的概念和相关功能。
什么是ASM流量调度套件
ASM流量调度套件是基于服务网格的流量统一调度架构模式,以及基于该架构模式开发的多种流量调度策略的统称,旨在对云原生分布式应用中的请求进行统一的负载调度与管理。这些能力可以增强云原生分布式应用的可靠性,同时优化成本和资源利用效率。
ASM流量调度套件的核心架构主要包括ASM请求调度控制器和ASM请求调度Agent。当Sidecar转发Pod的出站或入站请求时,将与ASM请求调度Agent进行交互,并从Agent处获取流量调度决策,进而对请求进行限流、排队等调度行为。ASM流量调度套件提供一系列预置的流量调度策略,这些策略将经过ASM请求调度控制器向ASM请求调度Agent进行发布,以动态控制流量负载的调度行为。
开启ASM流量调度套件
启用ASM流量管理套件前请确认数据面集群中存在一个名称为alibabacloud-cnfs-nas的storageclasses。关于创建存储类,请参见存储类(StorageClass)。
容器服务 Serverless 版暂不支持开启ASM流量调度套件。
要使用ASM流量调度套件,首先需要确保ASM实例版本在1.21.6.82及以上,并且已经向ASM实例中添加Kubernetes集群。具体操作,请参见添加集群到ASM实例。
开启ASM流量调度套件的步骤如下:
使用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。