Tous les produits
Search
Centre de documentation

Function Compute:Asynchronous invocation

Dernière mise à jour :Sep 18, 2026

Pour les fonctions dont la logique est longue à exécuter, gourmande en ressources ou sujette aux erreurs, utilisez l'appel asynchrone afin d'améliorer la réactivité de votre application et de gérer efficacement les pics de trafic. Lorsque vous appelez une fonction de manière asynchrone, il n'est pas nécessaire d'attendre une réponse. Function Compute conserve la requête dans une file d'attente interne pour un traitement fiable. Cette rubrique décrit les cas d'utilisation et les fonctionnalités courantes de l'appel asynchrone.

Cas d'utilisation

Voici quelques exemples de cas d'utilisation de l'appel asynchrone :

  • Traitement audio et vidéo

    Lorsque vous utilisez Function Compute pour des charges de travail audio et vidéo, vous exécutez souvent des tâches chronophages telles que l'encodage, le décodage et le transcodage. En invoquant ces tâches de manière asynchrone, elles s'exécutent en arrière-plan sans bloquer l'interface utilisateur, ce qui améliore l'expérience utilisateur. Si un projet est volumineux, vous pouvez également le diviser en plusieurs tâches pour un traitement parallèle, ou convertir une vidéo en plusieurs formats en appelant plusieurs fonctions de manière asynchrone. Cela réduit le temps de traitement global.

  • Traitement ETL des données

    Dans un pipeline ETL (Extract, Transform, Load), le processus d'extraction des données depuis une source, leur transformation et leur chargement dans un système de destination peut impliquer plusieurs opérations indépendantes, telles que des requêtes de base de données, des entrées/sorties de fichiers ou le nettoyage des données. L'appel asynchrone permet à ces opérations de s'exécuter en parallèle, ce qui réduit le temps de traitement et améliore les performances du système. Pour les tâches de longue durée, comme le traitement de grands ensembles de données ou des transformations de données complexes, l'appel asynchrone permet à ces tâches de s'exécuter en arrière-plan, améliorant ainsi l'expérience utilisateur en ne bloquant pas l'interface frontale.

  • Développement d'applications web

    Vous pouvez utiliser Function Compute avec d'autres services cloud pour créer rapidement des applications web. Lorsque les utilisateurs soumettent des formulaires, exécutent des requêtes de recherche ou chargent des pages riches en contenu, l'appel asynchrone peut empêcher le gel de la page dû à de longues attentes de réponses backend. Les utilisateurs peuvent continuer à interagir avec d'autres parties de la page sans subir de latence notable. Dans les scénarios à forte concurrence, par exemple lorsqu'un grand nombre d'utilisateurs accèdent simultanément à l'application, l'appel asynchrone permet de répartir la charge des requêtes et d'éviter la surcharge du service.

Appel différé

Vous pouvez configurer Function Compute pour déclencher un appel asynchrone après un délai spécifié.

Ajoutez l'en-tête de requête HTTP x-fc-async-delay à votre code. La valeur doit être exprimée en secondes et se situer dans la plage (0, 3600). Function Compute démarre un minuteur lorsque l'exécution est déclenchée et appelle la fonction après le délai spécifié par x-fc-async-delay.

Politique de nouvelle tentative

Le mécanisme d'appel asynchrone intègre la gestion des erreurs et les nouvelles tentatives. Si une étape échoue, le système peut replanifier la tâche sans affecter le flux de travail global. Lorsqu'un appel de fonction asynchrone échoue, Function Compute retente automatiquement l'appel.

Mécanisme de nouvelle tentative

Le tableau suivant décrit la politique de nouvelle tentative par défaut pour les erreurs courantes.

Type d'erreur Comportement de nouvelle tentative Facturé Résolution
HandledInvocationError et UnhandledInvocationError Nouvelles tentatives jusqu'à 3 fois par défaut. Ajustez le nombre de tentatives en fonction de vos besoins métier. Oui — facturé par appel. Consultez la Présentation de la facturation. Corrigez l'erreur dans le code de votre fonction.
Limite de concurrence dépassée Nouvelles tentatives pendant jusqu'à 5 heures avec un backoff exponentiel. La première nouvelle tentative commence 0,5 seconde après l'échec ; les intervalles suivants doublent (1 s, 2 s, 4 s, 8 s, …). Non Augmentez votre quota de concurrence dans le Quota Center. Par défaut, chaque compte Alibaba Cloud peut exécuter jusqu'à 100 instances par région.
Erreur interne Aucune nouvelle tentative Non Contactez le support technique via DingTalk (ID de groupe : 64970014484).
Ressources Function Compute insuffisantes Aucune nouvelle tentative Non —

Configurer la politique de nouvelle tentative

Function Compute vous permet de personnaliser le nombre maximal de nouvelles tentatives et la durée de vie maximale du message.

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page des détails de la fonction, cliquez sur l'onglet Tasks, puis cliquez sur Task Mode à droite de Modify. Dans le panneau Task Mode, définissez les paramètres suivants. Une fois la configuration terminée, cliquez sur Deploy.

    Paramètre

    Description

    Task Mode

    Indique si le mode Task Mode est activé pour une tâche asynchrone. Pour plus d'informations, consultez la section Tâches asynchrones.

    Maximum Retries

    Nombre maximal de nouvelles tentatives pour un appel asynchrone. La valeur doit être un entier compris entre 0 et 8.

    Par défaut, Function Compute retente un appel asynchrone ayant échoué 3 fois. Vous pouvez ajuster le nombre de nouvelles tentatives en fonction de vos besoins métier.

    Maximum Message Lifetime

    Durée de vie maximale d'un message dans une file d'attente d'appels asynchrones. La valeur doit être un entier compris entre 1 et 604 800. La valeur par défaut est 86 400. Unité : secondes.

    Cette durée est calculée à partir du moment où l'appel asynchrone est déclenché. Si la durée de vie du message dépasse la valeur configurée, le message est supprimé. Les messages supprimés sont enregistrés par la métrique de surveillance Asynchronous Invocation Events dans CloudMonitor. Pour plus d'informations sur les métriques, consultez la section Métriques de surveillance.

Rappel de résultat

Lorsque Function Compute reçoit une requête d'appel asynchrone, il persiste la requête et renvoie immédiatement une réponse sans attendre l'exécution de la requête. Pour conserver les requêtes qui sont supprimées après l'échec de toutes les nouvelles tentatives, ou pour notifier un service aval du résultat de l'appel asynchrone, configurez la fonctionnalité de rappel de résultat. Après avoir configuré un service de destination, Function Compute rappelle automatiquement le service correspondant en fonction du résultat d'exécution lorsque l'appel asynchrone est terminé.

Fonctionnement

La figure suivante illustre le flux de travail du rappel de résultat.

image

Cas d'utilisation

  • Enregistrer les événements supprimés pour un traitement ultérieur

    Lorsqu'une requête asynchrone échoue et que toutes les nouvelles tentatives échouent selon la politique configurée, Function Compute supprime la requête. Si vous avez configuré une destination d'échec, Function Compute pousse automatiquement les informations de contexte de la requête ayant échoué vers un service de messagerie tel que ApsaraMQ for RocketMQ pour un traitement ultérieur. Vous pouvez également définir une autre fonction comme service de destination. Dans ce cas, Function Compute pousse automatiquement les informations de contexte de la requête ayant échoué vers cette fonction pour exécuter votre logique personnalisée de gestion des erreurs.

  • Notifier automatiquement les services aval des résultats d'exécution

    Après une exécution réussie, si une destination de succès est configurée, le système Function Compute pousse automatiquement le contexte de la requête vers le service de destination aval. Par exemple, si vous configurez Function Compute pour décompresser automatiquement un fichier ZIP téléchargé sur OSS et souhaitez recevoir une notification par message à la fin de l'opération, vous pouvez configurer un service de destination de rappel de résultat pour la fonction cible.

Services de destination pris en charge

Si le résultat d'un appel asynchrone répond aux conditions configurées, Function Compute pousse le contexte de la requête et les données vers le service de destination spécifié. Vous pouvez configurer différents services de destination pour différentes fonctions, alias et versions. Les services de destination suivants sont pris en charge pour l'appel asynchrone :

  • Simple Message Queue (anciennement MNS)

  • Function Compute

  • EventBridge

  • ApsaraMQ for RocketMQ

Remarque
  • Vous ne pouvez configurer que les instances de série 4,0 de ApsaraMQ for RocketMQ comme service de destination. Les instances de série 5,0 ne sont pas prises en charge.

  • Pour obtenir des informations sur les limites de charge utile pour les services de destination, consultez la section Limites des ressources d'exécution des fonctions.

La configuration des destinations d'appel asynchrone comprend les éléments suivants :

  • Contenu de l'événement pour les destinations d'appel asynchrone

    Lorsque Simple Message Queue (anciennement MNS), Function Compute ou ApsaraMQ for RocketMQ est la destination d'un appel de fonction asynchrone, le contenu de l'événement présente le format suivant.

    {
      "timestamp": 1660120276975,
      "requestContext": {
        "requestId": "xxx",
        "functionArn": "acs:fc:{regionid}:{accountid}:functions/xxxx",
           "condition": "FunctionResourceExhausted", 
            "approximateInvokeCount": 3
      },
      "requestPayload": "",
      "responseContext": {
        "statusCode": 200,
        "functionError": ""
      },
      "responsePayload": ""
    }

    Tableau 1. Description des paramètres

    Paramètre

    Description

    timestamp

    L'horodatage de l'appel.

    requestContext

    Le contexte de la requête.

    requestContext.requestId

    L'ID de requête de l'appel asynchrone.

    requestContext.functionArn

    Le nom de ressource Alibaba Cloud (ARN) de la fonction appelée de manière asynchrone.

    requestContext.condition

    Le code d'erreur de l'appel.

    requestContext.approximateInvokeCount

    Le nombre de fois où l'appel asynchrone a été exécuté. Une valeur supérieure à 1 indique que Function Compute a retenté l'appel.

    requestPayload

    La charge utile originale de la requête de fonction.

    responseContext

    Le contexte de la réponse.

    responseContext.statusCode

    Le code d'état système renvoyé par l'appel de fonction. Si le code d'état n'est pas 200, une erreur système s'est produite.

    responseContext.functionError

    Le message d'erreur de l'appel.

    responsePayload

    La charge utile originale renvoyée par l'exécution de la fonction.

    Lorsque EventBridge est utilisé comme destination pour un appel de fonction asynchrone, l'événement se présente sous le format suivant. Pour plus d'informations, consultez la section Présentation des événements.

    {
        "datacontenttype": "application/json",
        "aliyunaccountid": "143xxxx",
        "data": {
            "requestContext": {
                "condition": "",
                "approximateInvokeCount": 1,
                "requestId": "0fcb7f0c-xxxx",
                "functionArn": "acs:fc:{regionid}:{accountid}:functions/xxxx"
            },
            "requestPayload": "",
            "responsePayload": "",
            "responseContext": {
                "functionError": "",
                "statusCode": 200
            },
            "timestamp": 1660120276975
        },
        "subject": "acs:fc:{regionid}:{accountid}:functions/xxxx",
        "source": "acs:fc",
        "type": "fc:AsyncInvoke:succeeded",
        "aliyunpublishtime": "2021-01-03T09:44:31.233Asia/Shanghai",
        "specversion": "1.0",
        "aliyuneventbusname": "xxxxxxx",
        "id": "ecc4865xxxxxx",
        "time": "2021-01-03T01:44:31Z",
        "aliyunregionid": "cn-shanghai-vpc",
        "aliyunpublishaddr": "199.99.xxx.xxx"
    }
  • Limites de charge utile

    Les limites maximales de charge utile pour les services de destination pris en charge sont les suivantes :

  • Éviter les boucles d'appel

    Lors de la configuration d'une destination pour une exécution asynchrone, évitez de créer une boucle d'appel. Par exemple, vous configurez la fonction B comme destination pour les appels réussis de la fonction A, et la fonction A comme destination pour les appels réussis de la fonction B. Dans ce cas, si vous déclenchez de manière asynchrone la fonction A et qu'elle s'exécute avec succès, une boucle d'appel de A vers B puis de retour vers A peut se produire.

Configurer un service de destination

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page des détails de la fonction, cliquez sur l'onglet Tasks, puis cliquez sur Edit à droite de Modify. Dans le panneau Task destination, définissez les paramètres suivants. Une fois la configuration terminée, cliquez sur Deploy.

    • Configurer une destination de succès

      Définissez Invoke Other Services upon Success sur Enable, puis configurez le service de destination pour les exécutions réussies. Les paramètres sont décrits ci-dessous :

      Paramètre

      Description

      Destination Service

      Function Compute. Lorsque vous sélectionnez Function Compute comme service de destination, vous devez configurer les paramètres suivants :

      • Nom de la fonction : Spécifiez le nom de la fonction de destination.

      • Version ou alias : Spécifiez l'alias ou la version de la fonction.

      Simple Message Queue (anciennement MNS). Lorsque vous sélectionnez Simple Message Queue (anciennement MNS) comme service de destination, vous devez configurer les paramètres suivants :

      • Type de destination : Sélectionnez un type de destination. Valeurs valides :

        • Queue :

          Dans le modèle de file d'attente, les producteurs envoient des messages à une file d'attente et les consommateurs extraient les messages de celle-ci. Chaque message ne peut être consommé que par un seul consommateur, ce qui rend ce modèle bien adapté à la distribution des tâches et au traitement des charges de travail.

        • Topic :

          Dans le modèle de topic, un éditeur envoie un message à un topic, et SMQ pousse le message vers tous les abonnements actifs. Chaque abonnement achemine les messages vers un point de terminaison spécifié, tel qu'une file d'attente. Ce modèle un-à-plusieurs est bien adapté à la diffusion d'événements et aux modèles fan-out.

      • Queue : Sélectionnez le nom de la file d'attente Simple Message Queue (anciennement MNS). Ce paramètre est requis si vous définissez Queue sur Queue.

      • Topic : Sélectionnez le nom du topic Simple Message Queue (anciennement MNS). Ce paramètre est requis si vous définissez Topic sur Topic.

      ApsaraMQ for RocketMQ. Si vous sélectionnez ApsaraMQ for RocketMQ comme service de destination, vous devez configurer les paramètres suivants :

      • Instance : Sélectionnez l'instance de destination.

      • Topic : Sélectionnez le topic de destination.

      EventBridge. Si vous sélectionnez EventBridge comme service de destination, vous devez spécifier un Custom event bus.

    • Configurer une destination d'échec

      Définissez Invoke Other Services upon Failure sur Enable, puis configurez le service de destination pour les exécutions ayant échoué. Les paramètres sont identiques à ceux d'une destination de succès.

Échecs de rappel

Les rappels vers un service de destination peuvent échouer en raison d'autorisations insuffisantes ou d'une indisponibilité du service. Function Compute fournit des métriques et des journaux pertinents que vous pouvez utiliser pour le dépannage. Le tableau suivant décrit les erreurs courantes et les comportements système correspondants.

Code d'erreur

Cause

Comportement du système

5xx

Limitation de débit ou erreurs de contenu.

Le système Function Compute retente automatiquement avec un backoff exponentiel. L'intervalle de nouvelle tentative initial est de 500 ms et la durée maximale de nouvelle tentative est de 30 minutes.

4xx

Autorisations manquantes, paramètres de requête non valides (par exemple, la ressource de destination est supprimée) ou le corps de la requête dépasse la limite du service de destination.

Renvoie une erreur et enregistre les informations d'erreur.

Métriques de rappel de résultat

Si un rappel vers le service de destination échoue, Function Compute enregistre les métriques correspondantes dans la console. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez . Ensuite, dans la liste Function Name, cliquez sur le nom de la fonction cible pour afficher ses métriques.

Nom de la métrique

Description

Destination Invocation Errors (FunctionDestinationErrors)

Le nombre de tentatives échouées d'appel de la destination pour un appel de fonction asynchrone. La métrique est agrégée par somme par minute ou par heure.

Destination Invocation Successes (FunctionDestinationSucceed)

Le nombre de tentatives réussies d'appel de la destination pour un appel de fonction asynchrone. La métrique est agrégée par somme par minute ou par heure.

Pour plus d'informations sur les métriques de surveillance, consultez la section Métriques de surveillance.

FAQ

Comment déclencher un appel asynchrone ?

Vous pouvez utiliser l'une des méthodes suivantes pour appeler une fonction de manière asynchrone dans Function Compute :

  • Connectez-vous à la console Function Compute, trouvez la fonction cible, accédez à l'onglet Test, sélectionnez I want to make the call asynchronously., puis cliquez sur Test Function.

  • Appelez l'API InvokeFunction et définissez le paramètre x-fc-invocation-type sur Async.

  • Utilisez Serverless Devs pour configurer un appel asynchrone. Définissez le paramètre invocation-type sur Async. Pour plus d'informations, consultez la section Appeler une fonction.

  • Créez un déclencheur qui prend en charge l'appel asynchrone pour déclencher la fonction de manière asynchrone. Pour plus d'informations, consultez la section Appels pilotés par les événements.

  • Lorsque vous utilisez un déclencheur HTTP ou un domaine personnalisé pour un appel, définissez l'en-tête de requête X-Fc-Invocation-Type sur Async, comme illustré dans l'exemple suivant.

    curl -v -H "X-Fc-Invocation-Type: Async" https://example.cn-shenzhen.fcapp.run/$path
    Remarque
    • Appeler une Web Function : Par exemple, si vous utilisez Flask et souhaitez tester une fonction Python avec une route définie comme @app.route('/test'), remplacez $path par test. Lorsque vous testez une fonction Python avec une route définie comme @app.route('/'), appelez directement le point de terminaison public du déclencheur HTTP.

    • Appeler une Event Function : Appelez directement le point de terminaison public du déclencheur HTTP.

Étapes suivantes

Pour suivre l'état d'une requête asynchrone à chaque étape, activez le mode Task Mode. Pour plus d'informations, consultez la section Tâches asynchrones.