Tous les produits
Search
Centre de documentation

Object Storage Service:Utiliser la QoS des pools de ressources pour garantir la bande passante aux services critiques

Dernière mise à jour :Aug 18, 2026

Par défaut, tous les buckets d'une même région sous un compte Alibaba Cloud partagent la bande passante. Lorsque plusieurs buckets transfèrent simultanément de grandes quantités de données, la contention de la bande passante peut retarder les transferts des services critiques. Pour résoudre ce problème, configurez la limitation de débit (throttling) via la QoS des pools de ressources : la limitation basée sur des seuils empêche un bucket de consommer une bande passante excessive, tandis que la limitation basée sur la priorité garantit une bande passante minimale aux services essentiels. Ces méthodes complémentaires assurent la stabilité de vos charges de travail critiques.

Fonctionnement

Limitation basée sur des seuils

Vous pouvez définir des plafonds de bande passante pour les objets à chaque niveau, tels que les buckets et les BucketGroups, afin d'éviter une consommation excessive des ressources.

Relations hiérarchiques

Hiérarchie du pool de ressources : Un pool de ressources peut contenir une hiérarchie d'objets à plusieurs niveaux. Les schémas suivants illustrent plusieurs structures courantes.

Scénario 1 : Structure de buckets plate

image

Scénario 2 : BucketGroups imbriqués

image

Scénario 3 : BucketGroups et buckets mixtes

image

Dimension du demandeur (indépendante) : Le demandeur ne fait pas partie de la hiérarchie du pool de ressources. Il constitue une dimension indépendante pour la limitation de débit.

Scénario 4 : Application simultanée de la limitation pour le demandeur et le pool de ressources

image

Principes de limitation

Principe de base

resource pool: Max 100Gbps
├─ bucket A: Max 40Gbps ← Cannot exceed 40 Gbps, even if other resources are idle
├─ bucket B: Max 30Gbps
└─ bucket C: Unlimited ← Can use all remaining bandwidth

Règles de contrainte

  1. Application simultanée de plusieurs limites : La bande passante effective correspond au minimum de toutes les limites applicables.

  2. La somme des bandes passantes des objets enfants ne peut pas dépasser la bande passante totale de leur parent.

  3. Le demandeur est une contrainte indépendante : Cette contrainte s'applique en plus des contraintes hiérarchiques du pool de ressources, et la limite la plus basse a la priorité.

Exemple

Lorsqu'un utilisateur RAM accède à un bucket, le trafic est soumis à la fois :

  • À la limite du demandeur (20 Gbps) ← Dimension indépendante

  • À la limite du bucket (30 Gbps) ← Hiérarchie du pool de ressources

Bande passante maximale effective = min(20 Gbps, 30 Gbps) = 20 Gbps

Limitation basée sur la priorité

Vous pouvez configurer de 3 à 10 niveaux de priorité au sein d'un pool de ressources. Plus le chiffre est élevé, plus la priorité est haute. En attribuant un engagement de bande passante minimale aux objets selon différents niveaux de priorité, vous garantissez que les services prioritaires obtiennent la bande passante en premier lors d'une contention des ressources. Les objets sans niveau de priorité spécifié utilisent la priorité par défaut. Les niveaux de priorité sans engagement de bande passante minimale configuré utilisent l'engagement par défaut.

Mécanismes principaux

  1. Bande passante garantie : Chaque niveau de priorité dispose d'un engagement de bande passante minimale, qui garantit la disponibilité de la bande passante spécifiée.

  2. Mécanisme de préemption : Le trafic à haute priorité peut préempter la bande passante du trafic à faible priorité qui utilise une bande passante supérieure à son engagement de bande passante minimale. Les priorités les plus élevées préemptent en premier.

  3. Utilisation de la bande passante inactive : Le trafic à faible priorité peut utiliser la partie inactive de l'engagement de bande passante minimale d'une priorité supérieure. Toutefois, le trafic à priorité plus élevée a toujours la priorité pour utiliser toute bande passante disponible.

  4. Contrainte de configuration : La somme de tous les engagements de bande passante minimale sur tous les niveaux de priorité ne peut pas dépasser la bande passante totale du pool de ressources.

Scénarios types

Dans les scénarios suivants, le pool de ressources possède une limite de bande passante totale de 100 Gbps et est configuré avec plusieurs niveaux de priorité. Plus le chiffre est élevé, plus la priorité est haute.

Scénario 1 : Un niveau de priorité élevée préempte la bande passante d'un niveau de priorité faible qui dépasse son engagement de bande passante minimale

Chaque niveau de priorité a un engagement de bande passante minimale de 20 Gbps. La demande est de 10 Gbps pour la Priorité 1, 30 Gbps pour la Priorité 2 et 80 Gbps pour la Priorité 3.

Priorité

Engagement minimal

Demande

Allocation réelle

Description

Priorité 3

20 Gbps

80 Gbps

70 Gbps

Reçoit son engagement de 20 Gbps, préempte les 10 Gbps de bande passante inactive de la Priorité 1 et s'attribue les 40 Gbps restants du pool.

Priorité 2

20 Gbps

30 Gbps

20 Gbps

Reçoit son engagement de 20 Gbps. La demande supplémentaire de 10 Gbps est préemptée par la Priorité 3.

Priorité 1

20 Gbps

10 Gbps

10 Gbps

Reçoit 10 Gbps comme demandé. Ses 10 Gbps restants de bande passante garantie sont inactifs et préemptés par la Priorité 3.

Allocation finale : 10 + 20 + 70 = 100 Gbps

Scénario 2 : Les priorités plus élevées préemptent en premier

Chaque niveau de priorité a un engagement de bande passante minimale de 25 Gbps. La demande est de 0 Gbps pour la Priorité 1, 5 Gbps pour la Priorité 2, 40 Gbps pour la Priorité 3 et 60 Gbps pour la Priorité 4.

Priorité

Engagement minimal

Demande

Allocation réelle

Description

Priorité 4

25 Gbps

60 Gbps

60 Gbps

Reçoit son engagement de 25 Gbps et préempte 35 Gbps supplémentaires grâce à sa priorité élevée.

Priorité 3

25 Gbps

40 Gbps

35 Gbps

Reçoit son engagement de 25 Gbps et préempte les 10 Gbps restants en tant que priorité suivante la plus élevée.

Priorité 2

25 Gbps

5 Gbps

5 Gbps

La demande est inférieure à l'engagement. Reçoit 5 Gbps comme demandé.

Priorité 1

25 Gbps

0 Gbps

0 Gbps

La demande est inférieure à l'engagement. Reçoit 0 Gbps comme demandé.

Allocation finale : 0 + 5 + 35 + 60 = 100 Gbps

Scénario 3 : La somme des engagements minimaux est inférieure à la bande passante totale

Chaque niveau de priorité a un engagement de bande passante minimale de 10 Gbps (pour un total de 40 Gbps). La demande est de 50 Gbps pour la Priorité 1, 50 Gbps pour la Priorité 2, 30 Gbps pour la Priorité 3 et 20 Gbps pour la Priorité 4.

Priorité

Engagement minimal

Demande

Allocation réelle

Description

Priorité 4

10 Gbps

20 Gbps

20 Gbps

Priorité la plus élevée ; la demande est entièrement satisfaite.

Priorité 3

10 Gbps

30 Gbps

30 Gbps

Deuxième priorité la plus élevée ; la demande est entièrement satisfaite.

Priorité 2

10 Gbps

50 Gbps

40 Gbps

Reçoit son engagement de 10 Gbps plus les 30 Gbps restants de bande passante disponible.

Priorité 1

10 Gbps

50 Gbps

10 Gbps

Reçoit uniquement son engagement de 10 Gbps. La demande supplémentaire est préemptée par le trafic à priorité plus élevée.

Allocation finale : 10 + 40 + 30 + 20 = 100 Gbps

Combinaison des méthodes de limitation

Lorsque les deux méthodes sont utilisées, la bande passante effective pour une ressource est déterminée par l'interaction entre le plafond basé sur les seuils, l'engagement minimal basé sur la priorité et la demande réelle.

Règles de priorité

  • Le plafond basé sur les seuils est une limite stricte : La bande passante allouée finale ne peut pas dépasser ce plafond, quel que soit l'engagement de bande passante minimale.

  • L'engagement basé sur la priorité est une garantie souple : Le système tente de respecter cet engagement, mais l'allocation ne peut pas dépasser la limite stricte.

Exemples de configuration

Configuration standard

Le bucket A est configuré avec :

  • Limitation basée sur la priorité : engagement de bande passante minimale de 50 Gbps ← Dimension de priorité

  • Limitation basée sur les seuils : plafond maximal de 80 Gbps ← Hiérarchie du pool de ressources

Résultat : La bande passante disponible pour le bucket A varie d'un minimum garanti de 50 Gbps à un maximum de 80 Gbps.

Configuration conflictuelle

Si le bucket A présente une configuration conflictuelle :

  • Limitation basée sur la priorité : engagement de bande passante minimale de 80 Gbps ← Dimension de priorité

  • Limitation basée sur les seuils : plafond maximal de 50 Gbps ← Hiérarchie du pool de ressources

Résultat : La bande passante réellement disponible pour le bucket A est de 50 Gbps. Le plafond basé sur les seuils est une limite stricte et a la priorité, annulant l'engagement minimal plus élevé.

Demander un pool de ressources

Lorsque la bande passante de votre compte dans une région atteint ou dépasse 400 Gbps, contactez le Support technique pour demander un pool de ressources, un accès à la console et la limitation basée sur la priorité.

Fournissez les informations suivantes lorsque vous soumettez un ticket :

Important

Les buckets au sein d'un même pool de ressources doivent appartenir au même utilisateur, se trouver dans la même région et avoir le même type de redondance. Le processus de création du pool de ressources peut impliquer une migration des données et une réallocation des ressources.

Region: China (Hangzhou)
Resource pool name: qos-resource-pool-1
Bucket list: qos-examplebucket-1, qos-examplebucket-2
Total upload bandwidth: 300 Gbps
Internal network upload bandwidth: 100 Gbps
Public network upload bandwidth: 200 Gbps
Total download bandwidth: 100 Gbps
Internal network download bandwidth: 50 Gbps
Public network download bandwidth: 50 Gbps
Console access to resource pool: Required
Priority-based throttling: Required

Ajouter des buckets dans la console

Si vous avez déjà créé un pool de ressources, vous pouvez y ajouter des buckets d'objets dans la console OSS.

  1. Sur la page Resource Pool QoS, accédez à la page de détails du pool de ressources cible, puis cliquez sur l'onglet Buckets .

  2. Cliquez sur Add Bucket. Dans la boîte de dialogue Add Bucket, la section Buckets à gauche affiche les buckets qui se trouvent dans la même région que le pool de ressources, utilisent le même type de redondance et n'ont pas encore été ajoutés au pool de ressources. Les buckets qui ne répondent pas à ces critères sont grisés et ne peuvent pas être sélectionnés ; vous ne pouvez pas saisir manuellement les noms des buckets. Sélectionnez les buckets que vous souhaitez ajouter et cliquez sur > pour les déplacer vers Buckets Selected à droite. Vous pouvez ajouter jusqu'à 20 buckets par lot. Vous pouvez filtrer les buckets par nom à l'aide de la zone de recherche de chaque côté.

  3. Cliquez sur OK. Dans la boîte de dialogue Confirm adding the following Buckets to the resource pool , vérifiez la liste des buckets à ajouter, puis cliquez sur OK pour soumettre. La soumission ne peut pas être annulée. Pour l'annuler, contactez le Support technique.

  4. Après avoir soumis la demande, l'état du traitement s'affiche au-dessus de la liste des buckets. Vous pouvez cliquer sur Refresh dans le message pour mettre à jour l'état. (La liste des demandes peut présenter un délai après la soumission.)

Après la soumission, le backend termine généralement le traitement sous 24 heures. Lorsque certains buckets sont ajoutés avec succès, ils sont retirés du message de traitement et seuls les buckets non encore ajoutés restent affichés. Une fois tous les buckets ajoutés, le message de traitement disparaît. Si certains buckets ne sont toujours pas ajoutés 24 heures après la soumission, le message indique que les demandes d'ajout pour ces buckets ne sont pas terminées. Dans ce cas, contactez le Support technique.

Important
  • Seuls les buckets d'objets peuvent être ajoutés. Les buckets de table et les buckets vectoriels ne sont pas pris en charge.

  • Les buckets à ajouter doivent se trouver dans la même région que le pool de ressources et utiliser le même type de redondance. Par exemple, si tous les buckets du pool de ressources sont de type LRS (stockage localement redondant), vous ne pouvez ajouter que des buckets LRS dans la même région.

  • Vous pouvez ajouter jusqu'à 20 buckets par lot et soumettre jusqu'à 2 demandes d'ajout par jour.

  • La suppression de buckets d'un pool de ressources n'est pas prise en charge.

Limitation basée sur des seuils

Utilisez cette fonctionnalité pour limiter la bande passante maximale et empêcher une entité spécifique de consommer des ressources excessives.

Limite de bande passante du bucket

Cela empêche un trafic excessif vers un seul bucket d'impacter les performances des autres buckets.

Console

Sur la page Resource Pool QoS, cliquez sur le nom du pool de ressources cible. Ensuite, à droite du bucket cible, cliquez sur Modify Throttling Configurations et définissez la bande passante du bucket selon vos besoins.

ossutil

Avant de commencer, Installez ossutil.

  1. Configurez la limite de bande passante pour le bucket avec un fichier XML local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Appliquez la configuration de bande passante à un bucket spécifique. La commande suivante applique la configuration à un bucket nommé examplebucket.

    ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml
  3. Consultez la configuration de bande passante du bucket.

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

SDK

Vous pouvez définir la limite de bande passante pour un bucket uniquement à l'aide du SDK Python V2 et du SDK Go V2.

  1. Configurez la limite de bande passante pour le bucket avec un fichier local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Appliquez la configuration de bande passante à un bucket spécifique.

    import alibabacloud_oss_v2 as oss
    
    def PutBucketQoSInfo():
       # Obtain access credentials from environment variables for authentication
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open the file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutBucketQoSInfo operation to specify the QoS rules for the bucket.
        req = oss.OperationInput(
            op_name = 'PutBucketQoSInfo',  # Operation name, specifying the operation to set bucket QoS information
            method = 'PUT',  # The type of the HTTP method. In this example, PUT is used to update resources.
            parameters = {
                'qosInfo': '',  # The QoS-related parameters.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to run the request and obtain the response or error message.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
    if __name__ == "__main__":
        PutBucketQoSInfo()

API

Appelez l'opération PutBucketQoSInfo avec le corps de requête suivant pour limiter la bande passante d'un bucket.

<QoSConfiguration>
  <TotalUploadBandwidth>100</TotalUploadBandwidth>
  <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
  <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
  <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
  <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
  <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>

Limite de bande passante du demandeur pour un bucket

Utilisateur RAM

Si plusieurs services partagent un même bucket, vous pouvez limiter la bande passante d'un utilisateur RAM spécifique afin d'éviter qu'il ne consomme des ressources excessives.

Console

  1. Récupérez l'ID de l'utilisateur RAM.

  2. Sur la page Resource Pool QoS, cliquez sur le nom du pool de ressources cible. Ensuite, à droite du bucket cible, cliquez sur Configure Bandwidth Throttling Rules et définissez la bande passante requise pour que l'utilisateur RAM accède au bucket.

ossutil

Avant de commencer, Installez ossutil.

L'exemple suivant montre comment limiter la bande passante d'un utilisateur RAM accédant à un bucket dans un pool de ressources.

  1. Configurez la limite de bande passante pour un utilisateur RAM accédant à un bucket dans le pool de ressources à l'aide d'un fichier XML local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Récupérez l'ID de l'utilisateur RAM.

  3. Appliquez la configuration de bande passante à un utilisateur RAM. La commande suivante applique la configuration à l'utilisateur RAM dont l'UID est 266xxxx et qui accède au bucket examplebucket.

    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. (Facultatif) Consultez la configuration de bande passante de l'utilisateur RAM.

    ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx

SDK

Vous pouvez limiter la bande passante d'un utilisateur RAM accédant à un bucket uniquement avec les SDK Python V2 et Go V2.

  1. Configurez la limite de bande passante pour un utilisateur RAM accédant à un bucket dans le pool de ressources à l'aide d'un fichier local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Récupérez l'ID de l'utilisateur RAM.

  3. Appliquez la configuration de bande passante à l'utilisateur RAM accédant au bucket.

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open a file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutBucketRequesterQoSInfo operation to configure throttling rules for a requester accessing a bucket.
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method. In this example, PUT is used.
            parameters = {
                'requesterQosInfo': '',  # The QoS-related parameters.
                'qosRequester': '2598732222222xxxx',  # The unique identifier for the requester, which is used to distinguish different requesters.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketRequesterQoSInfo()

API

  1. Récupérez l'ID de l'utilisateur RAM.

  2. Appelez l'opération PutBucketRequesterQoSInfo avec le corps de requête suivant pour limiter la bande passante d'un utilisateur RAM accédant à un bucket.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>

Rôle RAM

Vous pouvez utiliser un bucket avec Content Delivery Network (CDN) pour stocker des actifs statiques et accélérer la diffusion du contenu. Pour permettre au CDN de récupérer des fichiers depuis un bucket privé, vous devez activer la récupération à la source (origin fetch). Le CDN endosse le rôle RAM AliyunCDNAccessingPrivateOSSRole. Dans ce scénario, vous pouvez limiter la bande passante de récupération à la source.

Console

  1. Récupérez l'ID du rôle RAM.

  2. Sur la page Resource Pool QoS, cliquez sur le nom du pool de ressources cible. Ensuite, à droite du bucket cible, cliquez sur Configure Bandwidth Throttling Rules et définissez la bande passante requise pour le demandeur.

ossutil

Avant de commencer, Installez ossutil.

  1. Configurez la limite de bande passante pour le rôle RAM accédant à un bucket spécifique à l'aide d'un fichier XML local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Récupérez l'ID du rôle RAM.

  3. Appliquez la configuration de bande passante à un rôle RAM. La commande suivante applique la configuration au rôle RAM dont l'ID est 362xxxx et qui accède au 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. (Facultatif) Répertoriez les configurations de bande passante pour tous les rôles RAM dans le pool de ressources.

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

SDK

Vous pouvez limiter la bande passante d'un rôle RAM accédant à un bucket uniquement avec les SDK Python V2 et Go V2.

  1. Configurez la limite de bande passante pour le rôle RAM accédant à un bucket dans le pool de ressources à l'aide d'un fichier local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Récupérez l'ID du rôle RAM.

  3. Appliquez la configuration de bande passante au rôle RAM.

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open a file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutBucketRequesterQoSInfo operation to configure throttling rules for a requester accessing a bucket.
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method. In this example, PUT is used.
            parameters = {
                'requesterQosInfo': '',  # The QoS-related parameters.
                'qosRequester': '2598732222222xxxx',  # The unique identifier for the requester, which is used to distinguish different requesters.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketRequesterQoSInfo()

API

  1. Récupérez l'ID du rôle RAM.

  2. Appelez l'opération PutBucketRequesterQoSInfo avec le corps de requête suivant pour limiter la bande passante d'un rôle RAM accédant à un bucket.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>

Limite de bande passante BucketGroup

Vous pouvez regrouper des buckets à faible priorité dans un BucketGroup afin de gérer et de limiter leur bande passante totale.

Console

  1. Sur la page Resource Pool QoS, cliquez sur le nom du pool de ressources cible. Ensuite, cliquez sur Create A Bucket Group, définissez un nom pour le BucketGroup et spécifiez la bande passante requise.

  2. Sur la page du pool de ressources cible, cliquez sur Create Bucket Group à droite d'un bucket cible pour ajouter le bucket à faible priorité au BucketGroup.

ossutil

Avant de commencer, Installez ossutil.

  1. Les commandes suivantes ajoutent les buckets scheduled-posts et archived-comments à un BucketGroup.

    1. Ajoutez le bucket scheduled-posts au 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. Ajoutez le bucket archived-comments au 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. (Facultatif) Obtenez la liste des buckets dans le BucketGroup.

      ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
  2. Configurez la limite de bande passante pour un BucketGroup spécifique dans le pool de ressources à l'aide d'un fichier XML local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. Appliquez la configuration de bande passante au 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. (Facultatif) Obtenez la configuration de bande passante du 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

Vous pouvez limiter la bande passante d'un BucketGroup uniquement avec les SDK Python V2 et Go V2.

  1. Ajoutez des buckets d'un pool de ressources à un BucketGroup.

    import alibabacloud_oss_v2 as oss
    
    def PutBucketResourcePoolBucketGroup():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Specify input parameters for the PutBucketResourcePoolBucketGroup operation.
        req = oss.OperationInput(
            op_name = 'PutBucketResourcePoolBucketGroup',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method type. In this example, PUT is used.
            parameters = {
                'resourcePoolBucketGroup': 'example-group',  # The name of the bucket group in the resource pool.
                'resourcePool': 'example-resource-pool',               # The name of the resource pool.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = None,  # The request body, which is typically not required for PUT requests.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketResourcePoolBucketGroup()
  2. Configurez la limite de bande passante pour un BucketGroup spécifique dans le pool de ressources à l'aide d'un fichier XML local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. Appliquez la configuration de bande passante au BucketGroup.

    import alibabacloud_oss_v2 as oss
    
    def PutResourcePoolBucketGroupQoSInfo():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open and read the qos.xml file and write its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutResourcePoolBucketGroupQoSInfo operation.
        req = oss.OperationInput(
            op_name = 'PutResourcePoolBucketGroupQoSInfo',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method type. In this example, PUT is used.
            parameters = {
                'resourcePoolBucketGroupQosInfo': '',  # The QoS-related parameters.
                'resourcePool': 'example-resource-pool',           #  The name of the resource pool
                'resourcePoolBucketGroup': 'example-group',  # The name of the bucket group.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = None,  # The name of the bucket, which is not required for PUT requests. This operation is not performed on a specific bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutResourcePoolBucketGroupQoSInfo()

API

Appelez l'opération PutResourcePoolBucketGroupQoSInfo avec le corps de requête suivant pour limiter la bande passante d'un BucketGroup.

<QoSConfiguration>
  <TotalUploadBandwidth>20</TotalUploadBandwidth>
  <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
  <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
  <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
  <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
  <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>

Limite de bande passante par demandeur du pool de ressources

Lorsque plusieurs utilisateurs RAM accèdent à différents buckets au sein d'un même pool de ressources, vous pouvez définir des limites de bande passante individuelles pour éviter qu'un seul utilisateur ne monopolise la bande passante du pool.

Console

  1. Récupérez l'ID d'utilisateur RAM ou l'ID de rôle RAM.

  2. Sur la page Resource Pool QoS, cliquez sur le nom du pool de ressources cible. Dans l'onglet Requesters, cliquez sur Modify Throttling Configurations à droite de l'utilisateur RAM ou du rôle RAM cible, puis définissez la bande passante requise pour le demandeur.

ossutil

Avant de commencer, installez ossutil.

  1. Configurez la limite de bande passante pour un utilisateur RAM ou un rôle RAM accédant au pool de ressources à l'aide d'un fichier XML local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Récupérez l'ID d'utilisateur RAM ou l'ID de rôle RAM.

  3. Appliquez la configuration de bande passante à un utilisateur RAM. La commande suivante applique la configuration à l'utilisateur RAM dont l'UID est 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
  4. (Facultatif) Répertoriez les configurations de bande passante pour tous les utilisateurs RAM du pool de ressources.

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

SDK

Vous pouvez limiter la bande passante d'un utilisateur RAM ou d'un rôle RAM accédant à un pool de ressources uniquement avec le SDK Python V2 et le SDK Go V2.

  1. Configurez la limite de bande passante pour un utilisateur RAM ou un rôle RAM spécifique accédant au pool de ressources à l'aide d'un fichier local nommé qos.xml.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. Récupérez l'ID d'utilisateur RAM ou l'ID de rôle RAM.

  3. Appliquez la configuration de bande passante à l'utilisateur RAM ou au rôle RAM.

    import alibabacloud_oss_v2 as oss
    
    def PutResourcePoolRequesterQoSInfo():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Initialize qos_xml_body as an empty string
        qos_xml_body = ""
    
        # Open a file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutResourcePoolRequesterQoSInfo operation.
        req = oss.OperationInput(
            op_name = 'PutResourcePoolRequesterQoSInfo',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method type. In this example, PUT is used.
            parameters = {
                'requesterQosInfo': '',  # The QoS-related parameters.
                'resourcePool': 'example-resource-pool',  # The name of the resource pool.
                'qosRequester': '2598732222222xxxx',  # The ID of the requester.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = None,  # The name of the bucket, which is not required for PUT requests. The operation is not performed on a specific bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutResourcePoolRequesterQoSInfo()

API

  1. Récupérez l'ID d'utilisateur RAM ou l'ID de rôle RAM.

  2. Appelez l'opération PutResourcePoolRequesterQoSInfo avec le corps de requête suivant pour limiter la bande passante d'un utilisateur RAM ou d'un rôle RAM accédant à un pool de ressources.

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>

Configurer la limitation basée sur les priorités

Utilisez cette méthode pour garantir une bande passante minimale aux services essentiels et donner la priorité aux objets à haute priorité en cas de contention des ressources.

Configurer les priorités du pool de ressources

Si un pool de ressources contient plusieurs buckets, vous pouvez configurer des priorités afin de garantir que les buckets dédiés aux services essentiels disposent d'une bande passante suffisante, notamment en cas de contention des ressources.

ossutil

  1. Créez un fichier de configuration QoS de priorité nommé priority-qos.xml.

    <PriorityQosConfiguration>
      <PriorityCount>3</PriorityCount>
      <DefaultPriorityLevel>1</DefaultPriorityLevel>
      
      <DefaultGuaranteedQosConfiguration>
        <TotalUploadBandwidth>10</TotalUploadBandwidth>
        <IntranetUploadBandwidth>5</IntranetUploadBandwidth>
        <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth>
        <TotalDownloadBandwidth>20</TotalDownloadBandwidth>
        <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth>
        <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth>
      </DefaultGuaranteedQosConfiguration>
      
      <QosPriorityLevelConfiguration>
        <PriorityLevel>3</PriorityLevel>
        <GuaranteedQosConfiguration>
          <TotalUploadBandwidth>50</TotalUploadBandwidth>
          <TotalDownloadBandwidth>80</TotalDownloadBandwidth>
          <ExtranetUploadBandwidth>30</ExtranetUploadBandwidth>
          <IntranetUploadBandwidth>20</IntranetUploadBandwidth>
          <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
          <IntranetDownloadBandwidth>30</IntranetDownloadBandwidth>
        </GuaranteedQosConfiguration>
        <Subjects>
          <Bucket>critical-bucket</Bucket>
          <BucketGroup>core-group</BucketGroup>
        </Subjects>
      </QosPriorityLevelConfiguration>
      
      <QosPriorityLevelConfiguration>
        <PriorityLevel>2</PriorityLevel>
        <GuaranteedQosConfiguration>
          <TotalUploadBandwidth>30</TotalUploadBandwidth>
          <TotalDownloadBandwidth>50</TotalDownloadBandwidth>
          <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
          <IntranetUploadBandwidth>10</IntranetUploadBandwidth>
          <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth>
          <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth>
        </GuaranteedQosConfiguration>
        <Subjects>
          <Bucket>important-bucket</Bucket>
        </Subjects>
      </QosPriorityLevelConfiguration>
    </PriorityQosConfiguration>
  2. Appliquez la configuration.

    ossutil api invoke-operation --op-name put-resource-pool-priority-qos-configuration --method PUT --parameters resourcePool=hz-rp-03 --parameters priorityQos --body=file://priority-qos.xml
  3. Récupérez et vérifiez la configuration.

    ossutil api invoke-operation --op-name get-resource-pool-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters priorityQos

SDK

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 main() {
	// Specify the region where the bucket is located. For example, set the region to cn-hangzhou for China (Hangzhou).
	var region = "cn-hangzhou"

	// Load the default configurations and set the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Define the resource pool name.
	resourcePool := "hz-rp-01"

	// Read the content of the priority QoS configuration file.
	qosConf, err := os.ReadFile("priority-qos.xml")
	if err != nil {
		// If an error occurs while reading the QoS configuration file, print the error message and exit the program.
		fmt.Printf("failed to read qos.xml: %v\n", err)
		os.Exit(1)
	}

	// Calculate the MD5 hash of the input data and convert it to a Base64-encoded string.
	calcMd5 := func(input []byte) string {
		if len(input) == 0 {
			return "1B2M2Y8AsgTpgAmY7PhCfg=="
		}
		h := md5.New()
		h.Write(input)
		return base64.StdEncoding.EncodeToString(h.Sum(nil))
	}

	// Create the input parameters for the operation, including the action, method type, and other parameters.
	input := &oss.OperationInput{
		OpName: "PutResourcePoolPriorityQoSConfiguration", // The action.
		Method: "PUT",                                     // The HTTP method.
		Parameters: map[string]string{
			"priorityQos":  "",           // Priority QoS-related parameters.
			"resourcePool": resourcePool, // The resource pool name.
		},
		Headers: map[string]string{
			"Content-MD5": calcMd5(qosConf), // Set the MD5 hash of the request body for data integrity validation.
		},
		Body:   bytes.NewReader(qosConf), // The request body, which contains the QoS configuration content.
		Bucket: nil,                      // This operation does not apply to a specific bucket.
	}

	// Execute the operation and receive the response or an error.
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// If an error occurs, print the error message and exit the program.
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// Print the operation result.
	fmt.Println("The result of PutResourcePoolPriorityQoSConfiguration:", res.Status)
}

API

PutResourcePoolPriorityQosConfiguration

Configurer les priorités des demandeurs du pool de ressources

Dans une plateforme SaaS multi-locataires, vous pouvez attribuer des priorités aux demandeurs de différents niveaux qui accèdent au même pool de ressources. Cela garantit la bande passante aux clients VIP, tandis que les autres clients partagent les ressources restantes.

ossutil

  1. Créez un fichier de configuration QoS de priorité des demandeurs nommé requester-priority-qos.xml.

    <PriorityQosConfiguration>
      <PriorityCount>3</PriorityCount>
      <DefaultPriorityLevel>1</DefaultPriorityLevel>
      
      <DefaultGuaranteedQosConfiguration>
        <TotalUploadBandwidth>10</TotalUploadBandwidth>
        <IntranetUploadBandwidth>5</IntranetUploadBandwidth>
        <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth>
        <TotalDownloadBandwidth>20</TotalDownloadBandwidth>
        <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth>
        <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth>
      </DefaultGuaranteedQosConfiguration>
      
      <QosPriorityLevelConfiguration>
        <PriorityLevel>3</PriorityLevel>
        <GuaranteedQosConfiguration>
          <TotalUploadBandwidth>60</TotalUploadBandwidth>
          <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
          <ExtranetUploadBandwidth>40</ExtranetUploadBandwidth>
          <IntranetUploadBandwidth>20</IntranetUploadBandwidth>
          <ExtranetDownloadBandwidth>60</ExtranetDownloadBandwidth>
          <IntranetDownloadBandwidth>40</IntranetDownloadBandwidth>
        </GuaranteedQosConfiguration>
        <Subjects>
          <Requester>123456789012****</Requester>
          <Requester>234567890123****</Requester>
        </Subjects>
      </QosPriorityLevelConfiguration>
      
      <QosPriorityLevelConfiguration>
        <PriorityLevel>2</PriorityLevel>
        <GuaranteedQosConfiguration>
          <TotalUploadBandwidth>30</TotalUploadBandwidth>
          <TotalDownloadBandwidth>50</TotalDownloadBandwidth>
          <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
          <IntranetUploadBandwidth>10</IntranetUploadBandwidth>
          <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth>
          <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth>
        </GuaranteedQosConfiguration>
        <Subjects>
          <Requester>345678901234****</Requester>
        </Subjects>
      </QosPriorityLevelConfiguration>
    </PriorityQosConfiguration>
  2. Appliquez la configuration.

    ossutil api invoke-operation --op-name put-resource-pool-requester-priority-qos-configuration --method PUT --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos --body=file://requester-priority-qos.xml
  3. (Facultatif) Récupérez et vérifiez la configuration.

    ossutil api invoke-operation --op-name get-resource-pool-requester-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos

SDK

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 main() {
	// Specify the region where the bucket is located. For example, set the region to cn-hangzhou for China (Hangzhou).
	var region = "cn-hangzhou"

	// Load the default configurations and set the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Define the resource pool name.
	resourcePool := "hz-rp-01"

	// Read the content of the requester priority QoS configuration file.
	qosConf, err := os.ReadFile("requester-priority-qos.xml")
	if err != nil {
		// If an error occurs while reading the QoS configuration file, print the error message and exit the program.
		fmt.Printf("failed to read qos.xml: %v\n", err)
		os.Exit(1)
	}

	// Calculate the MD5 hash of the input data and convert it to a Base64-encoded string.
	calcMd5 := func(input []byte) string {
		if len(input) == 0 {
			return "1B2M2Y8AsgTpgAmY7PhCfg=="
		}
		h := md5.New()
		h.Write(input)
		return base64.StdEncoding.EncodeToString(h.Sum(nil))
	}

	// Create the input parameters for the operation, including the action, method type, and other parameters.
	input := &oss.OperationInput{
		OpName: "PutResourcePoolRequesterPriorityQoSConfiguration", // The action.
		Method: "PUT",                                              // The HTTP method.
		Parameters: map[string]string{
			"requesterPriorityQos": "", // Requester priority QoS-related parameters.
			"resourcePool":         resourcePool, // The resource pool name.
		},
		Headers: map[string]string{
			"Content-MD5": calcMd5(qosConf), // Set the MD5 hash of the request body for data integrity validation.
		},
		Body:   bytes.NewReader(qosConf), // The request body, which contains the QoS configuration content.
		Bucket: nil,                      // This operation does not apply to a specific bucket.
	}

	// Execute the operation and receive the response or an error.
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// If an error occurs, print the error message and exit the program.
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// Print the operation result.
	fmt.Println("The result of PutResourcePoolRequesterPriorityQoSConfiguration:", res.Status)
}

API

PutResourcePoolRequesterPriorityQosConfiguration

Surveillance et alertes

Surveiller l'utilisation de la bande passante

Accédez à la page Cloud Monitor-Object Storage Service (OSS) Resource Pool pour surveiller l'utilisation en temps réel de la bande passante des services critiques de votre pool de ressources. Cela garantit une allocation efficace des ressources et la stabilité des services.

Définir des alertes de bande passante

Pour maintenir la stabilité des services critiques, vous pouvez créer des règles d'alerte dans le service Cloud Monitor. Cloud Monitor déclenche automatiquement une alerte lorsque l'utilisation de la bande passante dépasse 80 %, ce qui vous permet d'ajuster rapidement votre configuration de bande passante lors des pics de trafic.

Déploiement en production

Planification de la capacité

1. Maintenez la somme des engagements minimaux de bande passante inférieure à 50 % de la bande passante totale du pool de ressources.

Le fait de laisser au moins 50 % de votre bande passante comme espace flexible pour la planification dynamique améliore l'utilisation globale du pool de ressources.

Recommended configuration:
Total resource pool bandwidth: 100 Gbps
Priority 3 minimum bandwidth commitment: 20 Gbps
Priority 2 minimum bandwidth commitment: 20 Gbps
Priority 1 minimum bandwidth commitment: 10 Gbps
Total: 50 Gbps (50 Gbps reserved as flexible space)

2. Utilisez 3 à 5 niveaux de priorité.

Un nombre trop élevé de niveaux de priorité augmente la complexité de gestion. Nous recommandons de classer les services en 3 à 5 niveaux selon leur criticité métier :

  • Services essentiels (priorité 4–5)

  • Services importants (priorité 3)

  • Services standard (priorité 1–2)

3. Définissez la limite de limitation basée sur le seuil à une valeur supérieure à l'engagement minimal de bande passante.

Cela permet aux objets prioritaires d'utiliser davantage de bande passante lorsque la capacité est disponible :

Recommended configuration:
Minimum bandwidth commitment: 50 Gbps for Bucket A
Threshold-based throttling limit: 80 Gbps for Bucket A
Effective bandwidth: 50–80 Gbps (guaranteed 50 Gbps, capped at 80 Gbps)

Bonnes pratiques

Cas d'utilisation 1 : Plateforme de vidéo à la demande

  • Flux en direct : Attribuez la priorité 3 avec un engagement minimal de bande passante de 50 Gbit/s.

  • Contenu à la demande : Attribuez la priorité 1 avec un engagement minimal de bande passante de 20 Gbit/s.

  • Récupération d'origine CDN : Appliquez une limite de limitation basée sur le seuil de 100 Gbit/s.

Cas d'utilisation 2 : Plateforme SaaS multi-locataires

  • Clients entreprise : Attribuez la priorité 3 avec un engagement minimal de bande passante dédié.

  • Clients gratuits : Attribuez la priorité 1 pour partager les ressources restantes.

  • Plafond par locataire : Utilisez la limitation basée sur le seuil pour empêcher un seul locataire de consommer une bande passante excessive.

Cas d'utilisation 3 : Analytique de lac de données

  • Analytique en temps réel : Attribuez la priorité 2 avec un engagement minimal de bande passante de 30 Gbit/s.

  • Analytique par lots : Attribuez la priorité 1 avec un engagement minimal de bande passante de 20 Gbit/s.

  • Archivage des données : Appliquez une limite de limitation basée sur le seuil de 10 Gbit/s.

Atténuation des risques

1. Examinez régulièrement l'utilisation des quotas

Utilisez Cloud Monitor pour suivre les tendances d'utilisation de la bande passante pour tous les objets et ajustez les quotas si nécessaire :

  • Si les objets à haute priorité ne reçoivent pas systématiquement leur engagement minimal de bande passante (par exemple, si le taux de respect est inférieur à 95 %), envisagez d'augmenter leur engagement ou de réduire l'engagement pour les objets à priorité inférieure.

  • Si les objets à faible priorité sont fréquemment privés de bande passante, envisagez de réduire l'engagement minimal de bande passante pour les objets à haute priorité ou d'étendre le pool de ressources.

2. Définissez des alertes multiniveaux

  • Niveau d'avertissement (80 %) : Utilisez ce niveau pour les avertissements précoces, afin de disposer du temps nécessaire pour préparer un plan de mise à l'échelle.

  • Niveau critique (90 %) : Utilisez ce niveau pour déclencher une action immédiate, telle que l'activation d'un plan d'urgence.

3. Évitez les conflits de configuration

  • La somme de tous les engagements minimaux de bande passante ne peut pas dépasser la bande passante totale du pool de ressources.

  • La limite de limitation basée sur le seuil pour un objet doit être supérieure à son engagement minimal de bande passante.

  • Si un bucket fait partie d'un BucketGroup, la priorité du BucketGroup prend le pas sur le paramètre de priorité individuel du bucket.

4. Gérez les modifications et les restaurations

  • Avant d'apporter des modifications importantes, validez votre configuration dans un environnement de préproduction.

  • Sauvegardez toujours votre configuration actuelle pour permettre une restauration rapide si nécessaire.

  • Planifiez toutes les modifications pendant les heures creuses afin de minimiser l'impact sur vos services.

Quotas et limites

Élément

Quota/limite

Pool de ressources

Jusqu'à 100 pools de ressources par région.

Jusqu'à 100 buckets par pool de ressources.

Jusqu'à 100 groupes de buckets par pool de ressources.

Un pool de ressources prend en charge la limitation pour jusqu'à 300 demandeurs.

Lorsque vous ajoutez des buckets à un pool de ressources dans la console, vous pouvez ajouter jusqu'à 20 buckets par lot.

Groupe de buckets

Le nom doit comporter entre 3 et 30 caractères.

Le nom ne peut contenir que des lettres minuscules, des chiffres et des traits d'union (-).

Limitation basée sur les priorités

Nombre de niveaux de priorité : 3 à 10.

Niveau de priorité : un entier compris entre 1 et le nombre total de niveaux de priorité.

La somme de tous les engagements minimaux de bande passante ne peut pas dépasser la bande passante totale du pool de ressources.

Un engagement minimal de bande passante est requis pour chaque niveau de priorité, sauf si une valeur par défaut est configurée.

La valeur minimale d'un engagement minimal de bande passante est MIN[5, (seuil de l'élément correspondant dans le pool de ressources parent) / (2 * nombre de niveaux de priorité)] Gbit/s.

Paramètre de bande passante

Entier positif : une limite spécifique en Gbit/s.

-1 : Illimité (partage la bande passante du pool de ressources).

0 : Interdit ce type de trafic (à utiliser avec prudence).

Délai de prise d'effet

Sous 5 minutes.