Concepts de base du traitement asynchrone
Apex asynchrone
En résumé, un Apex asynchrone est utilisé pour exécuter des processus ultérieurement dans un thread séparé.
Un processus asynchrone est un processus ou une fonction qui exécute une tâche « en arrière-plan », ce qui évite à l’utilisateur d’attendre la fin de la tâche.
Prenons un exemple réel. Supposons que vous avez une liste de tâches à faire avant votre entraînement de danse hebdomadaire. Votre voiture fait un bruit inhabituel, vous avez besoin d’un gel pour cheveux d’une autre couleur et vous devez récupérer votre uniforme chez vos parents. Vous pouvez emmener votre voiture au garage et attendre qu’elle soit réparée avant d’accomplir les autres tâches de votre liste (traitement synchrone), ou laisser la voiture au garage et vous occuper des autres tâches après avoir demandé au mécanicien de vous appeler lorsque la voiture est prête (traitement asynchrone). Si vous voulez être à la maison à temps pour repasser votre justaucorps avant le cours de danse, le traitement asynchrone permet de gérer plus de tâches dans la même période sans attendre.
Généralement, vous utilisez un Apex asynchrone pour des appels à des systèmes externes, des opérations qui nécessitent des limitations supérieures, et un code qui doit être exécuté à un moment donné. Les principaux avantages du traitement asynchrone comprennent :
Efficacité de l’utilisateurSupposons qu’un processus effectue de nombreux calculs sur un objet personnalisé dès qu’une opportunité est créée. Le délai nécessaire pour exécuter ces calculs peut retarder légèrement l’utilisateur ou bloquer totalement sa productivité selon leur importance. Puisque ces calculs n’affectent pas d’autres tâches, demander à l’utilisateur d’attendre la fin d’un long processus n’est pas efficace en termes de gestion du temps. Avec le traitement asynchrone, l’utilisateur peut continuer son travail pendant que le processus est exécuté en arrière-plan, et consulter les résultats quand il le souhaite.
AdaptabilitéAutoriser l’exécution de certaines fonctionnalités de la plate-forme plus tard, lorsque les ressources sont disponibles, permet de gérer et d’ajuster rapidement les ressources. La plate-forme peut ainsi gérer davantage de tâches à l’aide d’un traitement parallèle.
Limitations supérieuresLes processus asynchrones sont démarrés dans un nouveau thread, avec des limitations du gouverneur et d’exécution supérieures. Qui ne souhaite pas augmenter les limitations du gouverneur et d’exécution ?
Il existe plusieurs types d’Apex asynchrone. Nous les présenterons en détail plus loin. En attendant, voici un résumé.
Type | Résumé | Scénarios courants |
---|---|---|
Future Methods | Exécutées dans leur propre thread et ne commencent pas tant que les ressources ne sont pas disponibles. | Appel externe de service Web. |
Apex par lot. | Exécute les tâches volumineuses qui dépasseraient les limites de traitement normales. | Nettoyage de données ou archivage d’enregistrements. |
Apex pour file d'attente | Semblable aux méthodes futures, mais offre un chaînage de tâches supplémentaire et permet d’utiliser des types de données plus complexes. | Exécution d’opérations de traitement séquentielles avec des services Web externes. |
Apex planifié | Apex dont l’exécution est planifiée à une heure spécifique. | Tâches quotidiennes ou hebdomadaires. |
Notez également que ces différents types d’opération asynchrone ne sont pas mutuellement exclusives. Par exemple, un modèle courant consiste à lancer une tâche Apex par lot à partir d’une tâche Apex planifiée.
Vidéo de démonstration Trail Together
Vous souhaitez être guidé pas à pas pendant que vous travaillez sur cette étape ? Regardez cette vidéo qui fait partie de la série Trail Together sur Trailhead Live. Vous trouverez un lien vers la session complète dans la section Ressources.
Augmentation des limitations du gouverneur et d’exécution
L’un des principaux avantages de l’exécution d’un Apex asynchrone est la possibilité d’augmenter les limitations du gouverneur et d’exécution. Par exemple, le nombre de requêtes SOQL est doublé. Il passe de 100 à 200 lors de l’utilisation d’appels asynchrones. La taille de segment totale et le temps processeur maximal sont également supérieurs pour les appels asynchrones.
Non seulement vous bénéficiez de limitations supérieures avec une exécution asynchrone, mais ces limitations du gouverneur sont indépendantes des limitations de la requête synchrone qui a initialement mis en file d’attente la requête asynchrone. Cette expression est un peu complexe. Pour résumer, vous avez deux invocations Apex séparées et plus du double en capacité de traitement, ce qui est très pratique. Par exemple, si vous souhaitez effectuer autant de traitement que possible dans une transaction, lorsque vous approchez des limitations du gouverneur, vous pouvez continuer de façon asynchrone.
Pour en savoir plus sur la taille des segments, les temps d’exécution maximum et les limitations globales, consultez la rubrique Execution Governors and Limits.
Fonctionnement du traitement asynchrone
Dans un environnement mutualisé, le traitement asynchrone présente quelques défis :
Garantir l’égalité de traitementAssurez-vous que le client reçoit une part équitable des ressources de traitement.
Garantir la tolérance aux pannesAssurez-vous qu’aucune requête asynchrone n’est perdue en raison d’échecs matériels ou logiciels.
La plate-forme utilise une infrastructure de traitement asynchrone reposant sur une file d’attente. Cette infrastructure est utilisée pour gérer les requêtes asynchrones de plusieurs organisations au sein de chaque instance. Le cycle de vie des requêtes est composé de trois parties :
La requête est placée dans la file d’attente. Elle peut correspondre à une requête Apex par lot, une requête Apex future ou à beaucoup d’autres. La plate-forme met les requêtes en file d’attente avec les données appropriées pour les traiter.
PersistanceLes requêtes en file d’attente sont persistantes. Les requêtes sont stockées dans un stockage persistant pour la reprise après sinistre et pour fournir des capacités transactionnelles.
Retrait de la file d’attenteLes requêtes sont retirées de la file d’attente et traitées. Si le traitement échoue, le contrôle de la transaction garantit que les requêtes ne sont pas perdues.
Chaque requête est traitée par un gestionnaire. Le gestionnaire est le code qui exécute des fonctions pour un type de requête spécifique. Les gestionnaires sont exécutés par un nombre limité de threads de travail sur chacun des serveurs d’applications qui constituent une instance. Les threads demandent le travail à l’infrastructure de mise en file d’attente. Lorsqu’ils le reçoivent, ils démarrent un gestionnaire spécifique pour exécuter le travail.
Conservation des ressources
La priorité du traitement asynchrone est inférieure à une interaction en temps réel via le navigateur et l’API. Pour s’assurer que les ressources sont suffisantes pour gérer une augmentation des ressources de calcul, l’infrastructure de mise en file d’attente surveille les ressources du système, notamment la mémoire du serveur et l’utilisation du processeur, et réduit le traitement asynchrone lorsque les seuils maximum sont atteints. En d’autres termes, le système mutualisé se protège lui-même. Si une organisation tente de mobiliser davantage que sa part de ressources, le traitement asynchrone est suspendu jusqu’à ce qu’un niveau normal soit restauré. Pour résumer, le temps de traitement n’est pas garanti, mais il est correctement géré.