Concepts de base du traitement asynchrone
Objectifs de formation
Une fois cette unité terminée, vous pourrez :
- Expliquer la différence entre le traitement synchrone et asynchrone
- Sélectionner le type d’Apex asynchrone à utiliser dans divers scénarios
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. Si vous déposez votre voiture chez le mécanicien et attendez qu’elle soit réparée avant de terminer le reste de votre liste, vous effectuez un traitement synchrone. Si vous déposez votre voiture chez le mécanicien et effectuez les autres tâches jusqu’à ce que le garage vous appelle, vous effectuez un traitement asynchrone. Le traitement asynchrone vous permet d’accomplir davantage de tâches dans le même laps de temps.
Un Apex asynchrone est idéal 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’utilisateur. Supposons 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 traitement s’exécute en arrière-plan. L’utilisateur peut voir les résultats à sa convenance.
- Évolutivité. Autoriser l’exécution de certaines fonctionnalités de Salesforce Platform 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érieures. Les processus asynchrones sont démarrés dans un nouveau thread, avec des limitations du gouverneur et d’exécution supérieures.
Il existe différents types d’Apex asynchrones. 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. Nous vous recommandons d’utiliser des méthodes Apex pour file d’attente plutôt que des méthodes Apex futures. Les files d’attente ont les mêmes cas d’utilisation que les méthodes futures, mais offrent des avantages supplémentaires. | Appels externes 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érations asynchrones 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 Apex asynchrone dispose de limitations supérieures, 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. 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 maximaux et les limitations globales, consultez la rubrique Compréhension des limitations et des gouverneurs d’exécution.
Fonctionnement du traitement asynchrone
Dans un environnement mutualisé, le traitement asynchrone présente quelques défis supplémentaires :
- Garantir l’égalité de traitement. Assurez-vous que chaque client reçoit une part équitable des ressources de traitement.
- Garantir la tolérance aux pannes. Assurez-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 basée 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 :
- Mise en file d’attente. La requête est placée dans la file d’attente. Elle peut correspondre à une requête Apex par lot, une requête de méthode 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.
- Persistance. Les 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’attente. Les 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 d’utiliser davantage que sa part de ressources, le traitement asynchrone de cette organisation est suspendu jusqu’à ce qu’un niveau normal soit restauré. Le temps de traitement n’est pas garanti, mais il est correctement géré.
Ressources
- Guide du développeur Apex : Execution Governors and Limits
- Guide du développeur Apex : Apex asynchrone
- Centre d’architecture : Traitement asynchrone