Tous les produits
Search
Centre de documentation

Object Storage Service:OSS performance best practices

Dernière mise à jour :Sep 24, 2026

Améliorez la vitesse de traitement des données OSS, réduisez la latence et accélérez les réponses de vos applications en tirant parti de l'architecture distribuée d'Alibaba Cloud OSS.

Remplacez les préfixes séquentiels par des préfixes aléatoires

OSS partitionne les données selon l'ordre UTF-8 des clés d'objet afin de prendre en charge les requêtes à forte concurrence. Les préfixes séquentiels (horodatages ou chaînes triées par ordre lexicographique) concentrent les fichiers dans un petit nombre de partitions, ce qui les surcharge. Utilisez plutôt des préfixes aléatoires pour répartir la charge uniformément.

Lorsque votre taux de requêtes dépasse 2 000 requêtes par seconde, les problèmes suivants peuvent survenir. Chaque téléchargement, téléversement, suppression, copie ou récupération de métadonnées compte comme une opération. Une suppression par lot ou une liste de N fichiers compte comme N opérations.

  • Formation de partitions critiques : les requêtes fréquentes se concentrent sur des partitions spécifiques, épuisant leur capacité d'E/S ou déclenchant une limitation automatique du débit.

  • Limitation du taux de requêtes : les partitions critiques déclenchent un rééquilibrage continu des données, ce qui augmente le temps de traitement des requêtes.

    Remarque

    Le rééquilibrage repose sur l'analyse de l'état du système en temps réel et de la capacité de traitement, et non sur des règles de fragmentation fixes. Les fichiers dotés de préfixes séquentiels peuvent rester dans une partition critique après le rééquilibrage.

Pour résoudre ces problèmes, remplacez le préfixe séquentiel par un préfixe aléatoire. Cela permet de répartir uniformément l'index des objets et la charge d'E/S entre les partitions.

  • Ajoutez un préfixe de hachage hexadécimal à la clé d'objet

    Si vous utilisez des dates et des ID client pour générer des clés d'objet, celles-ci contiennent un préfixe d'horodatage séquentiel :

    sample-bucket-01/2024-07-19/customer-1/file1
    sample-bucket-01/2024-07-19/customer-2/file2
    sample-bucket-01/2024-07-19/customer-3/file3
    ...
    sample-bucket-01/2024-07-20/customer-2/file4
    sample-bucket-01/2024-07-20/customer-5/file5
    sample-bucket-01/2024-07-20/customer-7/file6
    ...

    Calculez un hachage (tel que MD5) de l'ID client et utilisez quelques caractères comme préfixe de la clé d'objet. Avec un préfixe de hachage de 4 caractères, les clés se présentent comme suit :

    sample-bucket-01/9b11/2024-07-19/customer-1/file1
    sample-bucket-01/9fc2/2024-07-19/customer-2/file2
    sample-bucket-01/d1b3/2024-07-19/customer-3/file3
    ...
    sample-bucket-01/9fc2/2024-07-20/customer-2/file4
    sample-bucket-01/f1ed/2024-07-20/customer-5/file5
    sample-bucket-01/0ddc/2024-07-20/customer-7/file6
    ...

    Un hachage hexadécimal de 4 caractères offre 164 (65 536) combinaisons possibles, permettant jusqu'à 65 536 partitions. Déterminez si cela est suffisant en fonction de votre taux de requêtes et de la limite de 2 000 opérations par seconde par partition.

    Pour lister les objets par date (par exemple, tous les objets du 2024-07-19 dans sample-bucket-01), listez tous les objets du bucket par lots en appelant l'API ListObject, puis fusionnez les résultats correspondant à la date souhaitée.

  • Inversez la clé d'objet

    Un horodatage UNIX avec une précision à la milliseconde utilisé comme clé d'objet constitue également un préfixe séquentiel :

    sample-bucket-02/1513160001245.log
    sample-bucket-02/1513160001722.log
    sample-bucket-02/1513160001836.log
    sample-bucket-02/1513160001956.log
    ...
    sample-bucket-02/1513160002153.log
    sample-bucket-02/1513160002556.log
    sample-bucket-02/1513160002859.log
    ...

    Inversez l'horodatage pour éviter l'ordre séquentiel. Le résultat inversé :

    sample-bucket-02/5421000613151.log
    sample-bucket-02/2271000613151.log
    sample-bucket-02/6381000613151.log
    sample-bucket-02/6591000613151.log
    ...
    sample-bucket-02/3512000613151.log
    sample-bucket-02/6552000613151.log
    sample-bucket-02/9582000613151.log
    ...

    Les trois premiers chiffres représentent les millisecondes (1 000 valeurs possibles), le quatrième change chaque seconde et le cinquième toutes les 10 secondes. L'inversion augmente considérablement le caractère aléatoire du préfixe, répartissant ainsi la charge uniformément et évitant les goulots d'étranglement.

Réduisez le nombre de requêtes pour les nombreux petits fichiers

Lorsque vous téléversez un grand nombre de petits fichiers, regroupez-les dans un fichier ZIP, TAR ou Parquet pour fusionner plusieurs requêtes en une seule. Par exemple, le regroupement de 100 fichiers de 1 Ko chacun dans un seul fichier ZIP réduit 100 requêtes PUT à 1.

Pour lister un grand nombre d'objets, utilisez Bucket Inventory au lieu de **ListObjects** afin de générer une liste d'objets au format CSV ou Parquet. Pour plus d'informations, consultez Inventaire de bucket.

Utilisez la récupération par plage d'octets

Lors du téléchargement de fichiers volumineux (plus de 100 Mo) depuis OSS, un réseau instable peut interrompre le transfert. Utilisez une requête HTTP Range pour récupérer des portions spécifiques d'un fichier :

Get /ObjectName HTTP/1.1
Host:examplebucket.oss-cn-hangzhou.aliyuncs.com
Date:Fri, 19 Jul 2024 17:27:45 GMT
Authorization:SignatureValue
Range:bytes=[$ByteRange]

L'en-tête Range spécifie une plage d'octets comprise entre 0 et content-length - 1. Comment obtenir des ressources OSS par segments à l'aide de requêtes HTTP Range.

Utilisez l'accélération de transfert OSS

L'accélération de transfert accélère les transferts de données sur de longues distances pour les fichiers de l'ordre du gigaoctet ou du téraoctet, ainsi que les requêtes interrégionales entre la Chine continentale et d'autres régions. Elle achemine les requêtes vers le point d'accès le plus proche grâce à un routage intelligent, offrant une accélération de bout en bout. Accéder à OSS via l'accélération de transfert.

Mettez en cache le contenu fréquemment consulté

Alibaba Cloud CDN met en cache le contenu statique sur des points de présence (POP) dans le monde entier. Les utilisateurs récupèrent le contenu depuis le POP le plus proche, ce qui améliore la vitesse d'accès et réduit la charge sur l'origine.

Lorsqu'un fichier demandé est absent ou expiré sur un POP, le CDN le récupère depuis le bucket OSS d'origine et le met en cache. Lorsque le contenu d'origine change, le CDN met automatiquement à jour les caches des POP.

Cette approche est particulièrement utile pour les entreprises disposant d'une base d'utilisateurs mondiale. Accélérer l'accès à OSS à l'aide de CDN.

Utilisez la dernière version du SDK OSS

La dernière version du SDK Alibaba Cloud OSS intègre des optimisations de performance natives :

  • Nouvelles fonctionnalités : inclut les dernières API, des algorithmes optimisés et des codecs plus efficaces.

  • Gestion des erreurs et nouvelles tentatives : gère automatiquement les erreurs courantes (telles que HTTP 503) pour réduire les échecs et augmenter les taux de réussite.

  • Gestion des transferts : ajuste automatiquement les connexions et utilise des requêtes par plage pour atteindre un débit élevé.

  • Prise en charge multithread : traite plusieurs requêtes en parallèle pour augmenter la vitesse de traitement des données.

  • Gestion optimisée de la mémoire : réduit la surcharge mémoire inutile et améliore l'efficacité d'utilisation.

  • Compatibilité améliorée : corrige les problèmes hérités et améliore la compatibilité avec les bibliothèques tierces et les systèmes d'exploitation.

Téléchargez le dernier SDK depuis Présentation du SDK.

Utilisez OSS et ECS dans la même région

Déployez les instances ECS et les buckets OSS dans la même région pour réduire la latence de transfert de données et améliorer les vitesses de lecture. La communication au sein d'une même région utilise des endpoints internes et n'engendre aucun frais de trafic, permettant des transferts de données à grande échelle sans coûts de bande passante. Accéder aux ressources OSS depuis une instance ECS via un réseau interne.

Implémentez des nouvelles tentatives avec délai d'expiration pour les applications sensibles à la latence

OSS limite les QPS pour les API de gestion (GetService, PutBucket, GetBucketLifecycle, etc.). Des taux de requêtes élevés peuvent déclencher des réponses de ralentissement HTTP 503. Si cela se produit, attendez quelques secondes et réessayez.

Le total des QPS pour un seul compte Alibaba Cloud est de 10 000. Pour demander une limite supérieure, contactez le Support technique. Même en dessous de ce seuil, le serveur peut limiter le débit et renvoyer des erreurs 503 si les requêtes sont concentrées sur une seule partition et dépassent sa capacité. Si vous randomisez les préfixes de vos requêtes (voir Meilleures pratiques de performance et d'extensibilité pour OSS), OSS met automatiquement à l'échelle les partitions pour prendre en charge des QPS plus élevés. Il vous suffit d'attendre et de réessayer.

Pour les requêtes volumineuses (plus de 128 Mo), mesurez le débit et réessayez les 5 % les plus lents. Pour les petites requêtes (moins de 512 Ko) dont la latence typique est de l'ordre de quelques dizaines de millisecondes, réessayez les opérations GET ou PUT après 2 secondes. Utilisez un backoff exponentiel pour les nouvelles tentatives suivantes (par exemple, 2 secondes, puis 4 secondes).

Pour les requêtes de taille fixe avec des temps de réponse cohérents, identifiez et réessayez le 1 % le plus lent. Une seule nouvelle tentative réduit souvent efficacement la latence.

Atteignez un débit élevé grâce à la mise à l'échelle horizontale et aux requêtes parallèles

OSS est un système distribué à grande échelle. Mettez à l'échelle horizontalement les requêtes parallèles pour répartir la charge sur plusieurs chemins réseau.

Téléversez et téléchargez les données en parallèle sur plusieurs threads ou instances. La stratégie de mise à l'échelle optimale dépend de votre application et de la structure de vos objets.

Commencez par une seule requête pour mesurer la bande passante et l'utilisation des ressources, puis déterminez le nombre maximal de requêtes simultanées. Par exemple, si une requête utilise 10 % du CPU, vous pouvez prendre en charge jusqu'à 10 requêtes simultanées.

Mettez à l'échelle horizontalement les connexions de stockage

Traitez OSS comme un système distribué, et non comme un seul endpoint. Envoyez plusieurs requêtes simultanées via différentes connexions pour maximiser la bande passante disponible. OSS ne limite pas le nombre de connexions à un bucket.

Pour téléverser de grands lots de petits fichiers, utilisez ossutil avec le paramètre de concurrence -j 100~500, combiné à la stratégie de nouvelle tentative avec backoff exponentiel du SDK OSS pour gérer la limitation du débit.

Augmentez le nombre de nouvelles tentatives

Si une requête est lente, envoyez une nouvelle tentative. Configurez les valeurs de délai d'expiration et de nouvelle tentative dans le SDK OSS en fonction des exigences de tolérance aux pannes de votre application.