使用资源池QoS保障关键业务带宽

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

默认情况下,阿里云账号下同一地域的所有 Bucket 共享带宽。当多个 Bucket 并发传输大量数据时,可能因带宽争抢导致关键业务传输延迟。您可以通过资源池QoS限制非关键业务带宽,避免影响关键业务。

申请资源池

当阿里云账号下某个地域的带宽达到400 Gbps或以上时,可联系技术支持申请创建资源池。

说明

阿里云账号下的单个地域最多允许创建100个资源池,单个资源池最多允许添加100Bucket。

参考以下示例提交工单申请。

地域:华东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

  1. 通过本地XML配置文件(qos.xml)配置指定Bucket的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 为指定Bucket(示例值为examplebucket)添加以上带宽配置。

    ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml
  3. 查看Bucket的带宽配置。

    ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo

SDK

目前仅支持通过Python SDK V2Go SDK V2Bucket设置带宽上限。

  1. 通过本地qos.xml文件配置Bucket的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 为指定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。其中,内网和外网下载带宽不限制。

控制台

  1. 查看RAM用户ID

  2. 资源池QoS页面,单击目标资源池名称,然后单击资源池内目标Bucket右侧的配置请求者流控,按照以上要求设置RAM用户访问Bucket的带宽。

ossutil

使用前,需安装ossutil

以下示例用于限制RAM用户访问资源池内某个Bucket的带宽:

  1. 通过本地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>
  2. 查看RAM用户ID

  3. 为访问Bucket(示例值为examplebucket)的RAM用户(UID266xxxx)添加以上带宽配置。

    ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx --body file://qos.xml
  4. (可选)获取该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 V2Go SDK V2限制RAM用户访问Bucket的带宽上限。

  1. 通过本地qos.xml文件配置指定RAM用户访问资源池内某个Bucket的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 查看RAM用户ID

  3. 为访问BucketRAM用户设置以上带宽配置。

    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

  1. 查看RAM用户ID

  2. 调用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回源私有BucketRAM角色带宽:

  • 总上传带宽为100Gbps。其中,内网上传带宽不限制,外网上传带宽限制为20Gbps。

  • 总下载带宽为100Gbps。其中,内网下载带宽不限制,外网下载带宽限制为40Gbps。

控制台

  1. 查看RAM角色ID

  2. 资源池QoS页面,单击目标资源池名称,然后单击资源池内目标Bucket右侧的配置请求者流控,按照以上要求设置Bucket请求者带宽。

ossutil

使用前,需安装ossutil

  1. 通过本地XML配置文件(qos.xml)配置该角色访问指定Bucket的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 查看RAM角色ID

  3. 为该角色(角色ID362xxxx)添加访问指定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
  4. (可选)列举资源池所有RAM角色的带宽配置。

    ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool  --parameters requesterQosInfo

SDK

目前仅支持通过Python SDK V2Go SDK V2限制RAM角色访问Bucket的带宽上限。

  1. 通过本地qos.xml文件配置指定RAM用户访问资源池内某个Bucket的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 查看RAM角色ID

  3. 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

  1. 查看RAM角色ID

  2. 调用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 在网络负载高峰时仍能获得充足带宽。

说明

单个资源池最多允许创建100BucketGroup。BucketGroup限制3~30个字符,只支持小写字母、数字和短横线。

假设资源池中有三个 Bucket:realtime-chat、scheduled-postsarchived-comments。其中,realtime-chat 用于高实时性要求的在线业务,而scheduled-posts 和 archived-comments的优先级较低。

为防止低优先级Bucket影响高优先级业务,可将scheduled-posts 和 archived-comments 加入一个 BucketGroup,并限制其带宽。这样可优先满足 realtime-chat 的带宽需求,保障在线业务稳定运行。

  • 总上传带宽为20Gbps。其中,公网上传带宽为10Gbps,内网上传带宽不限制。

  • 总下载带宽为30Gbps。其中,公网下载带宽为20Gbps,内网下载带宽不限制。

控制台

  1. 资源池QoS页面,单击目标资源池名称,然后单击创建BucketGroup,定义BucketGroup名称并按照以上要求设置BucketGroup带宽。

  2. 在目标资源池页面,单击目标Bucket右侧的配置BucketGroup,将示例中的scheduled-postsarchived-comments两个Bucket分别加入BucketGroup。

ossutil

使用前,需安装ossutil

  1. scheduled-postsarchived-comments两个Bucket加入BucketGroup。

    1. 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
    2. 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
    3. (可选)获取BucketGroup中添加的Bucket列表。

      ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
  2. 通过本地XML配置文件(qos.xml)配置资源池内指定BucketGroup的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. 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
  4. (可选)获取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 V2Go SDK V2限制BucketGroup的带宽上限。

  1. 将资源池内的两个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))
    }
    
  2. 通过本地XML配置文件(qos.xml)配置资源池内指定BucketGroup的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. 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。

控制台

  1. 查看RAM用户IDRAM角色ID

  2. 资源池QoS页面,单击目标资源池名称。在资源池请求者列表页签,单击目标RAM用户或者RAM角色右侧的修改流控配置,按照以上要求设置资源池请求者带宽。

ossutil

使用前,需安装ossutil

  1. 通过本地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>
  2. 查看RAM用户IDRAM角色ID

  3. RAM用户(UID266xxxx)添加以上带宽配置。

    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
  4. (可选)列举资源池所有RAM用户的带宽配置。

    ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool  --parameters requesterQosInfo

SDK

目前仅支持通过Python SDK V2Go SDK V2限制RAM用户或RAM角色访问资源池的带宽上限。

  1. 通过本地qos.xml文件配置指定RAM用户或RAM角色访问资源池的带宽上限。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 查看RAM用户IDRAM角色ID

  3. 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

  1. 查看RAM用户IDRAM角色ID

  2. 调用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% 时自动触发告警,便于及时调整带宽配置应对业务高峰。