本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
默认情况下,阿里云账号下同一地域的所有 Bucket 共享带宽。当多个 Bucket 并发传输大量数据时,可能因带宽争抢导致关键业务传输延迟。您可以通过资源池QoS限制非关键业务带宽,避免影响关键业务。
申请资源池
当阿里云账号下某个地域的带宽达到400 Gbps或以上时,可联系技术支持申请创建资源池。
阿里云账号下的单个地域最多允许创建100个资源池,单个资源池最多允许添加100个Bucket。
参考以下示例提交工单申请。
地域:华东1(杭州)
资源池:qos-resource-pool-1
Bucket:qos-examplebucket-1, qos-examplebucket-2
总上传带宽:300 Gbps
内网上传带宽:100 Gbps
外网上传带宽:200 Gbps
总下载带宽:100 Gbps
内网下载带宽:50 Gbps
外网下载带宽:50 Gbps
QoS分层流控
流控配置适用对象
通过QoSConfiguration可以精确控制Bucket、 Bucket请求者、BucketGroup(由资源池内多个Bucket组成)、资源池请求者的各层级流控。
流控配置示例
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
参数取值说明如下:
正整数:限制最大带宽,单位为 Gbps。
-1(默认值):不限制带宽,共享资源池的带宽。
0:禁止该类型的带宽。
警告设置为 0 会完全阻断流量,可能导致服务中断。
流控层级约束关系
Bucket请求者流控<Bucket流控<资源池流控
BucketGroup流控<资源池流控
资源池请求者流控<资源池流控
流控生效原则
各层级流控同时生效,最大带宽取所有限制中的最小值:例如,同一用户在 Bucket 和资源池中分别设置了 20 Gbps 和 10 Gbps 总带宽,则该用户访问该 Bucket 的最大带宽为10 Gbps。
各层级流控动态变化,下层带宽之和不能超过上层设定的总带宽:例如,资源池总带宽为50Gbps,资源池内的Bucket A带宽限制为30Gbps,Bucket B带宽不限制(默认继承资源池总带宽)。则Bucket A 最大带宽可以达到30 Gbps,Bucket B 最大带宽可以达到50 Gbps,Bucket A+Bucket B最大可以达到50 Gbps。
限制Bucket的带宽
为防止某个Bucket 流量过大影响其他Bucket,可为该Bucket设置总带宽上限。达到上限后系统会自动限速,确保整体稳定性。
以下示例用于限制资源池内指定Bucket的带宽。其中:
总上传带宽限制为100Gbps。其中,外网上传带宽限制为20Gbps,内网上传带宽不限制。
总上传带宽限制为100Gbps。其中,外网下载带宽限制为20Gbps,内网下载带宽不限制。
控制台
在资源池QoS页面,单击目标资源池名称,然后单击资源池内目标Bucket右侧的修改流控配置,按照以上要求设置Bucket带宽。
ossutil
使用前,需安装ossutil。
通过本地XML配置文件(qos.xml)配置指定Bucket的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>
为指定Bucket(示例值为examplebucket)添加以上带宽配置。
ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml
查看Bucket的带宽配置。
ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo
SDK
目前仅支持通过Python SDK V2和Go SDK V2为Bucket设置带宽上限。
通过本地qos.xml文件配置Bucket的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>
为指定Bucket设置以上带宽配置。
import alibabacloud_oss_v2 as oss def PutBucketQoSInfo(): # 从环境变量中加载凭证信息,用于身份验证 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 加载默认配置并获取配置对象 cfg = oss.config.load_default() # 设置凭证提供者 cfg.credentials_provider = credentials_provider # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou cfg.region = "cn-hangzhou" # 使用配置对象初始化OSS客户端 client = oss.Client(cfg) # 初始化qos_xml_body为空字符串 qos_xml_body = "" # 打开名为'qos.xml'的文件,并读取其中的内容到qos_xml_body变量中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 构造一个操作输入请求对象,用于设置存储空间的QoS信息 req = oss.OperationInput( op_name = 'PutBucketQoSInfo', # 操作名称,这里是指定设置存储空间QoS信息的操作 method = 'PUT', # HTTP方法类型,此处为PUT,表示更新资源 parameters = { 'qosInfo': '', # 这里是参数列表,指定要设置的是QoS信息 }, headers = None, # 请求头信息,如果不需要特殊设置则可以为None body = qos_xml_body, # 请求体,包含之前从'qos.xml'文件读取的内容 bucket = 'examplebucket', # 目标存储空间的名称 ) # 调用客户端的invoke_operation方法执行请求,并接收响应 resp = client.invoke_operation(req) # 打印响应的状态码 print(resp.status_code) # 打印响应的头部信息 print(resp.headers) if __name__ == "__main__": PutBucketQoSInfo()
package main import ( "bytes" "context" "crypto/md5" "encoding/base64" "fmt" "os" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) func PutBucketQoSInfo() { // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。 var region = "cn-hangzhou" // 加载默认配置并设置凭证提供者和区域 cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // 创建OSS客户端 client := oss.NewClient(cfg) // 定义存储空间名称 bucketName := "examplebucket" // 读取QoS配置文件内容 qosConf, err := os.ReadFile("qos.xml") if err != nil { // 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序 fmt.Printf("failed to read qos.xml: %v\n", err) os.Exit(1) } // 计算输入数据的MD5值,并将其转换为Base64编码字符串 calcMd5 := func(input []byte) string { if len(input) == 0 { return "1B2M2Y8AsgTpgAmY7PhCfg==" } h := md5.New() h.Write(input) return base64.StdEncoding.EncodeToString(h.Sum(nil)) } // 创建操作输入参数,包括操作名称、方法类型、参数等 input := &oss.OperationInput{ OpName: "PutBucketQoSInfo", // 操作名称 Method: "PUT", // HTTP方法类型 Parameters: map[string]string{ "qosInfo": "", // QoS信息相关参数 }, Headers: map[string]string{ "Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性 }, Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容 Bucket: oss.Ptr(bucketName), // 存储空间名称 } // 执行操作请求,并接收响应结果或错误 res, err := client.InvokeOperation(context.TODO(), input) if err != nil { // 如果发生错误,则打印错误信息并退出程序 fmt.Printf("invoke operation got error: %v\n", err) os.Exit(1) } // 打印操作结果 fmt.Println("The result of PutBucketQoSInfo:", res.Status) }
API
调用PutBucketQoSInfo按以下示例限制Bucket带宽。
<QoSConfiguration>
<TotalUploadBandwidth>100</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>100</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>
限制用户访问Bucket的带宽
不同业务共享OSS资源池中的同一个Bucket时,您可以通过限制指定RAM用户访问某个Bucket的带宽,避免该RAM用户过度占用该Bucket的带宽。
以下示例用于限制RAM用户访问Bucket的带宽。其中:
总上传带宽为100Gbps。其中,内网和外网上传带宽不限制。
总下载带宽为100Gbps。其中,内网和外网下载带宽不限制。
控制台
ossutil
使用前,需安装ossutil。
以下示例用于限制RAM用户访问资源池内某个Bucket的带宽:
通过本地XML配置文件(qos.xml)配置指定RAM用户访问资源池内某个Bucket的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>
查看RAM用户ID。
为访问Bucket(示例值为examplebucket)的RAM用户(UID为266xxxx)添加以上带宽配置。
ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx --body file://qos.xml
(可选)获取该RAM用户访问资源池内某个Bucket的带宽配置。
ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx
SDK
目前仅支持通过Python SDK V2和Go SDK V2限制RAM用户访问Bucket的带宽上限。
通过本地qos.xml文件配置指定RAM用户访问资源池内某个Bucket的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>
查看RAM用户ID。
为访问Bucket的RAM用户设置以上带宽配置。
import alibabacloud_oss_v2 as oss def PutBucketRequesterQoSInfo(): # 从环境变量中加载凭证信息,用于身份验证 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 加载默认配置并获取配置对象 cfg = oss.config.load_default() # 设置凭证提供者 cfg.credentials_provider = credentials_provider # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou cfg.region = "cn-hangzhou" # 使用配置对象初始化OSS客户端 client = oss.Client(cfg) # 初始化qos_xml_body为空字符串 qos_xml_body = "" # 打开名为'qos.xml'的文件,并读取其中的内容到qos_xml_body变量中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 构造一个操作输入请求对象,用于设置存储空间的请求者QoS信息 req = oss.OperationInput( op_name = 'PutBucketRequesterQoSInfo', # 操作名称,这里是指定设置存储空间请求者QoS信息的操作 method = 'PUT', # HTTP方法类型,此处为PUT,表示更新资源 parameters = { 'requesterQosInfo': '', # 参数列表,指定要设置的是请求者QoS信息 'qosRequester': '2598732222222xxxx', # 请求者的唯一标识符,用于区分不同的请求者 }, headers = None, # 请求头信息,如果不需要特殊设置则可以为None body = qos_xml_body, # 请求体,包含之前从'qos.xml'文件读取的内容 bucket = 'examplebucket', # 目标存储空间的名称 ) # 调用客户端的invoke_operation方法执行请求,并接收响应 resp = client.invoke_operation(req) # 打印响应的状态码 print(resp.status_code) # 打印响应的头部信息 print(resp.headers) # 打印响应的内容(HTTP响应体),通常包含请求返回的具体数据 print(resp.http_response.content) if __name__ == "__main__": PutBucketRequesterQoSInfo()
package main import ( "bytes" "context" "crypto/md5" "encoding/base64" "fmt" "os" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) func PutBucketRequesterQoSInfo() { // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou var region = "cn-hangzhou" // 加载默认配置并设置凭证提供者和区域 cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // 创建OSS客户端 client := oss.NewClient(cfg) // 定义存储空间名称和请求者ID bucketName := "examplebucket" requester := "2598732222222xxxx" // 读取QoS配置文件内容 qosConf, err := os.ReadFile("qos.xml") if err != nil { // 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序 fmt.Printf("failed to read qos.xml: %v\n", err) os.Exit(1) } // 计算输入数据的MD5值,并将其转换为Base64编码字符串 calcMd5 := func(input []byte) string { if len(input) == 0 { return "1B2M2Y8AsgTpgAmY7PhCfg==" } h := md5.New() h.Write(input) return base64.StdEncoding.EncodeToString(h.Sum(nil)) } // 创建操作输入参数,包括操作名称、方法类型、参数等 input := &oss.OperationInput{ OpName: "PutBucketRequesterQoSInfo", // 操作名称应与实际操作匹配 Method: "PUT", // HTTP方法类型 Parameters: map[string]string{ "requesterQosInfo": "", // 请求者QoS信息相关参数 "qosRequester": requester, // 请求者ID }, Headers: map[string]string{ "Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性 }, Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容 Bucket: oss.Ptr(bucketName), // 存储空间名称 } // 执行操作请求,并接收响应结果或错误 res, err := client.InvokeOperation(context.TODO(), input) if err != nil { // 如果发生错误,则打印错误信息并退出程序 fmt.Printf("invoke operation got error: %v\n", err) os.Exit(1) } // 打印操作结果 fmt.Println("The result of PutBucketRequesterQoSInfo:", res.Status) }
API
查看RAM用户ID。
调用PutBucketRequesterQoSInfo按以下示例限制RAM用户访问Bucket的带宽。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>
限制云服务访问Bucket的带宽
应用程序或服务通常使用 RAM 角色访问 OSS。通过限制 RAM 角色对资源池中指定 Bucket 的带宽上限,可防止其占用过多带宽而影响其他服务。
例如,您使用一个 Bucket 存储静态资源并启用 CDN 加速。为使 CDN 能从私有 Bucket 获取文件,需开启私有 Bucket 回源功能。启用后,CDN 会通过AliyunCDNAccessingPrivateOSSRole
这一角色访问 Bucket 内的资源。
以下示例用于限制CDN回源私有Bucket的RAM角色带宽:
总上传带宽为100Gbps。其中,内网上传带宽不限制,外网上传带宽限制为20Gbps。
总下载带宽为100Gbps。其中,内网下载带宽不限制,外网下载带宽限制为40Gbps。
控制台
ossutil
使用前,需安装ossutil。
通过本地XML配置文件(qos.xml)配置该角色访问指定Bucket的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>
查看RAM角色ID。
为该角色(角色ID为362xxxx)添加访问指定Bucket(示例值为examplebucket)带宽配置。
ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=362xxxx --body file://qos.xml
(可选)列举资源池所有RAM角色的带宽配置。
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
目前仅支持通过Python SDK V2和Go SDK V2限制RAM角色访问Bucket的带宽上限。
通过本地qos.xml文件配置指定RAM用户访问资源池内某个Bucket的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>
查看RAM角色ID。
为RAM角色设置以上带宽配置。
import alibabacloud_oss_v2 as oss def PutBucketRequesterQoSInfo(): # 从环境变量中加载凭证信息,用于身份验证 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 加载默认配置并获取配置对象 cfg = oss.config.load_default() # 设置凭证提供者 cfg.credentials_provider = credentials_provider # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou cfg.region = "cn-hangzhou" # 使用配置对象初始化OSS客户端 client = oss.Client(cfg) # 初始化qos_xml_body为空字符串 qos_xml_body = "" # 打开名为'qos.xml'的文件,并读取其中的内容到qos_xml_body变量中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 构造一个操作输入请求对象,用于设置存储空间的请求者QoS信息 req = oss.OperationInput( op_name = 'PutBucketRequesterQoSInfo', # 操作名称,这里是指定设置存储空间请求者QoS信息的操作 method = 'PUT', # HTTP方法类型,此处为PUT,表示更新资源 parameters = { 'requesterQosInfo': '', # 参数列表,指定要设置的是请求者QoS信息 'qosRequester': '2598732222222xxxx', # 请求者的唯一标识符,用于区分不同的请求者 }, headers = None, # 请求头信息,如果不需要特殊设置则可以为None body = qos_xml_body, # 请求体,包含之前从'qos.xml'文件读取的内容 bucket = 'examplebucket', # 目标存储空间的名称 ) # 调用客户端的invoke_operation方法执行请求,并接收响应 resp = client.invoke_operation(req) # 打印响应的状态码 print(resp.status_code) # 打印响应的头部信息 print(resp.headers) # 打印响应的内容(HTTP响应体),通常包含请求返回的具体数据 print(resp.http_response.content) if __name__ == "__main__": PutBucketRequesterQoSInfo()
package main import ( "bytes" "context" "crypto/md5" "encoding/base64" "fmt" "os" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) func PutBucketRequesterQoSInfo() { // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou var region = "cn-hangzhou" // 加载默认配置并设置凭证提供者和区域 cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // 创建OSS客户端 client := oss.NewClient(cfg) // 定义存储空间名称和请求者ID bucketName := "examplebucket" requester := "2598732222222xxxx" // 读取QoS配置文件内容 qosConf, err := os.ReadFile("qos.xml") if err != nil { // 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序 fmt.Printf("failed to read qos.xml: %v\n", err) os.Exit(1) } // 计算输入数据的MD5值,并将其转换为Base64编码字符串 calcMd5 := func(input []byte) string { if len(input) == 0 { return "1B2M2Y8AsgTpgAmY7PhCfg==" } h := md5.New() h.Write(input) return base64.StdEncoding.EncodeToString(h.Sum(nil)) } // 创建操作输入参数,包括操作名称、方法类型、参数等 input := &oss.OperationInput{ OpName: "PutBucketRequesterQoSInfo", // 操作名称应与实际操作匹配 Method: "PUT", // HTTP方法类型 Parameters: map[string]string{ "requesterQosInfo": "", // 请求者QoS信息相关参数 "qosRequester": requester, // 请求者ID }, Headers: map[string]string{ "Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性 }, Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容 Bucket: oss.Ptr(bucketName), // 存储空间名称 } // 执行操作请求,并接收响应结果或错误 res, err := client.InvokeOperation(context.TODO(), input) if err != nil { // 如果发生错误,则打印错误信息并退出程序 fmt.Printf("invoke operation got error: %v\n", err) os.Exit(1) } // 打印操作结果 fmt.Println("The result of PutBucketRequesterQoSInfo:", res.Status) }
API
查看RAM角色ID。
调用PutBucketRequesterQoSInfo按以下示例限制RAM角色访问Bucket的带宽。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>
批量限制多个低优先级Bucket的带宽
在同一个资源池中,将多个低优先级 Bucket 加入一个 BucketGroup,并限制其带宽,可确保高优先级 Bucket 在网络负载高峰时仍能获得充足带宽。
单个资源池最多允许创建100个BucketGroup。BucketGroup限制3~30个字符,只支持小写字母、数字和短横线。
假设资源池中有三个 Bucket:realtime-chat、scheduled-posts和archived-comments。其中,realtime-chat 用于高实时性要求的在线业务,而scheduled-posts 和 archived-comments的优先级较低。
为防止低优先级Bucket影响高优先级业务,可将scheduled-posts 和 archived-comments 加入一个 BucketGroup,并限制其带宽。这样可优先满足 realtime-chat 的带宽需求,保障在线业务稳定运行。
总上传带宽为20Gbps。其中,公网上传带宽为10Gbps,内网上传带宽不限制。
总下载带宽为30Gbps。其中,公网下载带宽为20Gbps,内网下载带宽不限制。
控制台
在资源池QoS页面,单击目标资源池名称,然后单击创建BucketGroup,定义BucketGroup名称并按照以上要求设置BucketGroup带宽。
在目标资源池页面,单击目标Bucket右侧的配置BucketGroup,将示例中的
scheduled-posts
和archived-comments
两个Bucket分别加入BucketGroup。
ossutil
使用前,需安装ossutil。
将
scheduled-posts
和archived-comments
两个Bucket加入BucketGroup。将
scheduled-posts
加入BucketGroup。ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket scheduled-posts --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group
将
archived-comments
加入BucketGroup。ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket archived-comments --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group
(可选)获取BucketGroup中添加的Bucket列表。
ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
通过本地XML配置文件(qos.xml)配置资源池内指定BucketGroup的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>20</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth> <TotalDownloadBandwidth>30</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>
为BucketGroup配置带宽。
ossutil api invoke-operation --op-name put-resource-pool-bucket-group-qos-info --method PUT --parameters resourcePoolBucketGroupQosInfo --parameters resourcePool pool-for-ai --parameters resourcePoolBucketGroup offline-group --body=file://qos.xml
(可选)获取BucketGroup的带宽配置。
ossutil api invoke-operation --op-name get-resource-pool-bucket-group-qos-info --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=offline-group --parameters resourcePoolBucketGroupQoSInfo
SDK
目前仅支持通过Python SDK V2和Go SDK V2限制BucketGroup的带宽上限。
将资源池内的两个Bucket分别加入BucketGroup。
import alibabacloud_oss_v2 as oss def PutBucketResourcePoolBucketGroup(): # 从环境变量中加载凭证信息,用于身份验证 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 加载默认配置并获取配置对象 cfg = oss.config.load_default() # 设置凭证提供者 cfg.credentials_provider = credentials_provider # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou cfg.region = "cn-hangzhou" # 使用配置对象初始化OSS客户端 client = oss.Client(cfg) # 构造一个操作输入请求对象,用于将存储空间添加到指定的资源池存储空间组 req = oss.OperationInput( op_name = 'PutBucketResourcePoolBucketGroup', # 操作名称,这里是指定将存储空间添加到资源池存储空间组的操作 method = 'PUT', # HTTP方法类型,此处为PUT,表示更新资源 parameters = { 'resourcePoolBucketGroup': 'example-group', # 存储空间组的唯一标识符,用于区分不同的存储空间组 'resourcePool': 'example-resource-pool', # 资源池的唯一标识符,用于区分不同的资源池 }, headers = None, # 请求头信息,如果不需要特殊设置则可以为None body = None, # 请求体,由于是PUT请求且无需传递额外数据,因此为None bucket = 'examplebucket', # 目标存储空间的名称,表示要将该存储空间添加到指定的资源池存储空间组 ) # 调用客户端的invoke_operation方法执行请求,并接收响应 resp = client.invoke_operation(req) # 打印响应的状态码 print(resp.status_code) # 打印响应的头部信息 print(resp.headers) # 打印响应的内容(HTTP响应体),通常包含请求返回的具体数据 print(resp.http_response.content) if __name__ == "__main__": PutBucketResourcePoolBucketGroup()
package main import ( "context" "fmt" "io" "os" "strings" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) // PutBucketResourcePoolBucketGroup 函数用于向指定存储空间组中添加资源池 func PutBucketResourcePoolBucketGroup() { // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。 var region = "cn-hangzhou" // 加载默认配置并设置凭证提供者和区域 cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // 创建OSS客户端 client := oss.NewClient(cfg) // 创建操作输入参数,包括操作名称、方法类型、参数等 input := &oss.OperationInput{ OpName: "PutBucketResourcePoolBucketGroup", // 操作名称 Method: "PUT", // HTTP方法类型 Parameters: map[string]string{ // 参数列表 "resourcePoolBucketGroup": "example-group", // 资源池存储空间组名称 "resourcePool": "example-resource-pool", // 资源池名称 }, Headers: map[string]string{}, // HTTP头信息 Body: nil, // 请求体 Bucket: oss.Ptr("test-bucket"), // 存储空间名称 } // 执行操作请求,并接收响应结果或错误 res, err := client.InvokeOperation(context.TODO(), input) if err != nil { // 如果发生错误,则打印错误信息并退出程序 fmt.Printf("invoke operation got error: %v\n", err) os.Exit(1) } var body []byte if b, ok := res.Body.(io.Reader); ok { buf := new(strings.Builder) _, _ = io.Copy(buf, b) body = []byte(buf.String()) } else { body = []byte(fmt.Sprintf("%v", res.Body)) } // 打印操作结果 fmt.Println("The result of PutBucketResourcePoolBucketGroup:", string(body)) }
通过本地XML配置文件(qos.xml)配置资源池内指定BucketGroup的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>20</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth> <TotalDownloadBandwidth>30</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>
为BucketGroup配置带宽。
import alibabacloud_oss_v2 as oss def PutResourcePoolBucketGroupQoSInfo(): # 从环境变量中加载凭证信息,用于身份验证 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 加载默认配置并获取配置对象 cfg = oss.config.load_default() # 设置凭证提供者 cfg.credentials_provider = credentials_provider # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou cfg.region = "cn-hangzhou" # 使用配置对象初始化OSS客户端 client = oss.Client(cfg) # 初始化qos_xml_body为空字符串 qos_xml_body = "" # 打开名为'qos.xml'的文件,并读取其中的内容到qos_xml_body变量中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 构造一个操作输入请求对象,用于设置资源池存储空间组的QoS信息 req = oss.OperationInput( op_name = 'PutResourcePoolBucketGroupQoSInfo', # 操作名称,这里是指定设置资源池存储空间组QoS信息的操作 method = 'PUT', # HTTP方法类型,此处为PUT,表示更新资源 parameters = { 'resourcePoolBucketGroupQosInfo': '', # 参数列表,指定要设置的是资源池存储空间组QoS信息 'resourcePool': 'example-resource-pool', # 资源池的唯一标识符,用于区分不同的资源池 'resourcePoolBucketGroup': 'example-group', # 存储空间组的唯一标识符,用于区分不同的存储空间组 }, headers = None, # 请求头信息,如果不需要特殊设置则可以为None body = qos_xml_body, # 请求体,包含之前从'qos.xml'文件读取的内容 bucket = None, # 目标存储空间的名称,这里不需要指定具体的存储空间,因此为None ) # 调用客户端的invoke_operation方法执行请求,并接收响应 resp = client.invoke_operation(req) # 打印响应的状态码 print(resp.status_code) # 打印响应的头部信息 print(resp.headers) # 打印响应的内容(HTTP响应体),通常包含请求返回的具体数据 print(resp.http_response.content) if __name__ == "__main__": PutResourcePoolBucketGroupQoSInfo()
package main import ( "bytes" "context" "crypto/md5" "encoding/base64" "fmt" "os" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) func PutResourcePoolBucketGroupQosInfo() { // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。 var region = "cn-hangzhou" // 加载默认配置并设置凭证提供者和区域 cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // 创建OSS客户端 client := oss.NewClient(cfg) // 定义资源池名称和存储空间组名称 resourcePool := "example-resource-pool" group := "example-group" // 读取QoS配置文件内容 qosConf, err := os.ReadFile("qos.xml") if err != nil { // 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序 fmt.Printf("failed to read qos.xml: %v\n", err) os.Exit(1) } // 计算输入数据的MD5值,并将其转换为Base64编码字符串 calcMd5 := func(input []byte) string { if len(input) == 0 { return "1B2M2Y8AsgTpgAmY7PhCfg==" } h := md5.New() h.Write(input) return base64.StdEncoding.EncodeToString(h.Sum(nil)) } // 创建操作输入参数,包括操作名称、方法类型、参数等 input := &oss.OperationInput{ OpName: "PutResourcePoolBucketGroupQoSInfo", // 操作名称 Method: "PUT", // HTTP方法类型 Parameters: map[string]string{ // 参数列表 "resourcePool": resourcePool, // 资源池名称 "resourcePoolBucketGroup": group, // 存储空间组名称 "resourcePoolBucketGroupQosInfo": "", // QoS信息相关参数 }, Headers: map[string]string{ // HTTP头信息 "Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性 }, Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容 Bucket: nil, // 存储空间名称,这里为空,因为此操作不针对特定的存储空间 } // 执行操作请求,并接收响应结果或错误 res, err := client.InvokeOperation(context.TODO(), input) if err != nil { // 如果发生错误,则打印错误信息并退出程序 fmt.Printf("invoke operation got error: %v\n", err) os.Exit(1) } // 打印操作结果 fmt.Println("The result of PutResourcePoolBucketGroupQoSInfo:", res.Status) }
API
调用PutResourcePoolBucketGroupQoSInfo按以下示例限制BucketGroup的带宽。
<QoSConfiguration>
<TotalUploadBandwidth>20</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>30</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>
限制用户访问资源池的带宽
多个 RAM 用户或角色访问同一 OSS 资源池的不同 Bucket 时,可限制各自带宽上限,防止某用户独占资源池带宽。
单个资源池最多允许为300个请求者(包括RAM用户和RAM角色)设置带宽阈值。
以下示例用于限制RAM用户访问资源池的带宽。其中:
总上传带宽为100Gbps。其中,内网上传带宽为50Gbps,外网上传带宽为50Gbps。
总下载带宽为200Gbps。其中,内网下载带宽为150Gbps,外网下载带宽为50Gbps。
控制台
ossutil
使用前,需安装ossutil。
通过本地XML配置文件(qos.xml)为RAM用户或者RAM角色配置访问资源池的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
为RAM用户(UID为266xxxx)添加以上带宽配置。
ossutil api invoke-operation --op-name put-resource-pool-requester-qos-info --method PUT --parameters resourcePool=examplepool --parameters qosRequester=266xxxx --parameters requesterQosInfo --body=file://qos.xml
(可选)列举资源池所有RAM用户的带宽配置。
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
目前仅支持通过Python SDK V2和Go SDK V2限制RAM用户或RAM角色访问资源池的带宽上限。
通过本地qos.xml文件配置指定RAM用户或RAM角色访问资源池的带宽上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
为RAM用户或RAM角色设置以上带宽配置。
import alibabacloud_oss_v2 as oss def PutResourcePoolRequesterQoSInfo(): # 从环境变量中加载凭证信息,用于身份验证 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 加载默认配置并获取配置对象 cfg = oss.config.load_default() # 设置凭证提供者 cfg.credentials_provider = credentials_provider # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou cfg.region = "cn-hangzhou" # 使用配置对象初始化OSS客户端 client = oss.Client(cfg) # 初始化qos_xml_body为空字符串 qos_xml_body = "" # 打开名为'qos.xml'的文件,并读取其中的内容到qos_xml_body变量中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 构造一个操作输入请求对象,用于设置资源池请求者的QoS信息 req = oss.OperationInput( op_name = 'PutResourcePoolRequesterQoSInfo', # 操作名称,这里是指定设置资源池请求者QoS信息的操作 method = 'PUT', # HTTP方法类型,此处为PUT,表示更新资源 parameters = { 'requesterQosInfo': '', # 参数列表,指定要设置的是请求者QoS信息 'resourcePool': 'example-resource-pool', # 资源池的唯一标识符,用于区分不同的资源池 'qosRequester': '2598732222222xxxx', # 请求者的唯一标识符,用于区分不同的请求者 }, headers = None, # 请求头信息,如果不需要特殊设置则可以为None body = qos_xml_body, # 请求体,包含之前从'qos.xml'文件读取的内容 bucket = None, # 目标存储空间的名称,这里不需要指定具体的存储空间,因此为None ) # 调用客户端的invoke_operation方法执行请求,并接收响应 resp = client.invoke_operation(req) # 打印响应的状态码 print(resp.status_code) # 打印响应的头部信息 print(resp.headers) # 打印响应的内容(HTTP响应体),通常包含请求返回的具体数据 print(resp.http_response.content) if __name__ == "__main__": PutResourcePoolRequesterQoSInfo()
package main import ( "bytes" "context" "crypto/md5" "encoding/base64" "fmt" "os" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) func PutResourcePoolRequesterQoSInfo() { // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。 var region = "cn-hangzhou" // 加载默认配置并设置凭证提供者和区域 cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // 创建OSS客户端 client := oss.NewClient(cfg) // 定义资源池名称和请求者ID resourcePool := "example-resource-pool" requester := "2598733333333xxxx" // 读取QoS配置文件内容 qosConf, err := os.ReadFile("qos.xml") if err != nil { // 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序 fmt.Printf("failed to read qos.xml: %v\n", err) os.Exit(1) } // 计算输入数据的MD5值,并将其转换为Base64编码字符串 calcMd5 := func(input []byte) string { if len(input) == 0 { return "1B2M2Y8AsgTpgAmY7PhCfg==" } h := md5.New() h.Write(input) return base64.StdEncoding.EncodeToString(h.Sum(nil)) } // 创建操作输入参数,包括操作名称、方法类型、参数等 input := &oss.OperationInput{ OpName: "PutResourcePoolRequesterQoSInfo", // 操作名称 Method: "PUT", // HTTP方法类型 Parameters: map[string]string{ "requesterQosInfo": "", // 请求者QoS信息相关参数 "resourcePool": resourcePool, // 资源池名称 "qosRequester": requester, // 请求者ID }, Headers: map[string]string{ "Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性 }, Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容 Bucket: nil, // 此操作不针对特定存储空间 } // 执行操作请求,并接收响应结果或错误 res, err := client.InvokeOperation(context.TODO(), input) if err != nil { // 如果发生错误,则打印错误信息并退出程序 fmt.Printf("invoke operation got error: %v\n", err) os.Exit(1) } // 打印操作结果 fmt.Println("The result of PutResourcePoolRequesterQoSInfo:", res.Status) }
API
调用PutResourcePoolRequesterQoSInfo按以下示例限制RAM用户或RAM角色访问资源池的带宽。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
监控带宽使用
在业务运行期间,可以在云监控-对象存储OSS资源池,实时查看资源池内关键业务的带宽使用情况,确保资源分配合理且业务运行稳定。
设置带宽告警
为确保关键业务稳定运行,可以通过云监控服务创建告警规则,当带宽使用率超过 80% 时自动触发告警,便于及时调整带宽配置应对业务高峰。