Bonnes pratiques pour s'abonner à un sujet Pub/Sub

Un client abonné reçoit des messages d'un sujet Pub/Sub. Voici quelques bonnes pratiques pour s'abonner à Pub/Sub.

Ce document suppose que vous connaissez déjà le processus d'abonnement à un sujet Pub/Sub et de réception de messages dans votre client abonné.

Si vous débutez avec Pub/Sub, consultez l'un des guides de démarrage rapide et découvrez comment exécuter Pub/Sub à l'aide de la console, Google Cloud CLI, ou des bibliothèques clientes.

Choisir le bon abonnement

Pub/Sub propose des abonnements standards tels que les abonnements push et pull. En plus des abonnements standards, Pub/Sub propose également des abonnements d'exportation qui vous permettent de stocker des messages directement dans une Google Cloud ressource, sans avoir besoin de Dataflow comme intermédiaire. Par exemple, les abonnements BigQuery stockent les messages dans une table BigQuery.

Les abonnements push sont recommandés dans les scénarios suivants :

  • Vous ne pouvez inclure aucun code dans votre application d'abonné qui importe la bibliothèque cliente en tant que dépendance.

  • Le client abonné ne peut effectuer aucune requête sortante.

  • Vous souhaitez utiliser la même instance pour traiter les messages de différents sujets et abonnements lorsque le client abonné ne connaît pas la liste des abonnements.

Dans les cas généraux, nous vous recommandons d'utiliser la bibliothèque cliente de haut niveau. Si vous utilisez plutôt l'extraction unaire, ne définissez pas returnImmediately sur true. Si vous le définissez sur true, les performances d'extraction seront affectées. Le champ returnImmediately est désormais obsolète.

Traiter les messages avant de les confirmer

Par défaut, Pub/Sub supprime un message d'un abonnement une fois qu'il a été confirmé. Si vous ne traitez pas un message avant d'envoyer une confirmation et que le traitement échoue, le service ne renvoie pas le message. L'exception concerne les cas où vous avez configuré la conservation des messages confirmés ou la conservation des sujets et que vous effectuez une opération de recherche.

Si vous avez des abonnés à latence élevée, vous devrez peut-être définir des valeurs personnalisées pour le contrôle de flux et la gestion des baux.

Configurer le contrôle de flux des abonnés pour les pics de trafic temporaires

Le contrôle de flux côté abonné vous permet d'éviter que les abonnés ne soient surchargés par les pics de trafic. Il peut laisser le temps aux mécanismes d'autoscaling de répondre à une charge accrue ou répartir le traitement de la charge sur une période plus longue. La première méthode permet de réduire la latence, tandis que la seconde permet de réduire les coûts.

Pour configurer le contrôle de flux, vous devez définir des valeurs appropriées pour maximum outstanding messages et total outstanding message bytes. Les valeurs par défaut de ces variables de contrôle de flux et les noms des variables peuvent varier d'une bibliothèque cliente à l'autre.

  • Maximum outstanding messages définit le nombre maximal de messages distribués au client pour lesquels Pub/Sub n'a pas reçu de confirmation ou de confirmation négative.

  • Total outstanding message bytes définit la taille totale maximale des messages distribués au client pour lesquels Pub/Sub n'a pas reçu de confirmation ou de confirmation négative.

Si la limite de l'une de ces options est dépassée, le client abonné n'extrait plus de messages. Ce comportement se poursuit jusqu'à ce que les messages déjà extraits soient confirmés ou confirmés négativement. De cette façon, vous pouvez échanger le débit avec le coût associé à l'exécution d'un plus grand nombre d'abonnés.

Gérer les diffusions en double

Par défaut, Pub/Sub distribue les messages aux abonnés au moins une fois. Cela signifie que les messages peuvent être distribués plusieurs fois, même s'ils ont été confirmés. Les sections suivantes expliquent comment résoudre les scénarios de nouvelle distribution courants.

Nouvelle distribution cohérente de nombreux messages

Si vous constatez que de nombreux messages sont toujours distribués à nouveau, cela signifie que vos abonnés sont surchargés ou qu'ils ne confirment pas les messages avant l'expiration du délai.

Si vous utilisez un abonnement pull, vous devrez peut-être définir des valeurs personnalisées pour les valeurs de contrôle de flux ou augmenter les périodes d'extension de bail à l'aide de la gestion des baux.

Si vous utilisez des abonnements push, vous devrez peut-être augmenter le paramètre de délai de confirmation. Vous pouvez également suivre les bonnes pratiques concernant la gestion d'un abonnement sain.

Nouvelle distribution occasionnelle de messages

Lorsque vous voyez des messages distribués à nouveau avant l'expiration du délai de confirmation ou après que les messages ont été confirmés en quelques secondes, Pub/Sub se comporte comme prévu. Vous ne devriez pas voir ces pics de nouvelle livraison fréquemment, mais lorsqu'ils se produisent, ils concernent probablement plusieurs messages simultanément. Votre système doit être conçu pour tolérer ces doublons occasionnels.

Nouvelle distribution répétée de quelques messages

Lorsque vous voyez un petit nombre de messages distribués plusieurs fois, vérifiez d'abord que vous les confirmez. Si ce n'est pas le cas, déterminez pourquoi votre abonné ne gère pas correctement les messages. Vous pouvez configurer un sujet de lettres mortes pour éviter toute nouvelle distribution. Si vous confirmez le message, Pub/Sub peut toujours fonctionner comme prévu. Bien que très rare, il est toujours possible qu'un petit nombre de messages soient distribués plusieurs fois en cas de perturbations internes du réseau ou du matériel. Dans ce cas, le service tente de s'autoréparer, mais l'activation des correctifs peut prendre plusieurs minutes.

Votre système doit tolérer les nouvelles distributions. Vous pouvez réduire leur probabilité en vous assurant de traiter et de confirmer les messages le plus rapidement possible.

Si votre application ne peut tolérer aucun doublon, vous pouvez activer la distribution de type "exactement une fois". N'oubliez pas que cette fonctionnalité n'est disponible que pour les abonnements pull et qu'elle entraîne également une latence de publication à l'abonnement plus élevée. Avant d'activer cette fonctionnalité, évaluez si le compromis d'une latence plus élevée est acceptable pour votre cas d'utilisation.

Bonnes pratiques pour la messagerie ordonnée dans l'abonnement

Si vous utilisez le tri des messages, assurez-vous des points suivants :

  • Choisissez des abonnements StreamingPull ou Pull. Pour un abonnement push, Pub/Sub n'accepte qu'un seul message en attente pour chaque clé de tri à la fois. L'envoi de requêtes push parallèles dans un tel scénario reviendrait à envoyer simultanément plusieurs lots de messages pour la même clé de tri aux abonnés pull. Par conséquent, les abonnements push ne sont pas recommandés pour les sujets dans lesquels plusieurs messages sont fréquemment publiés avec la même clé de tri ou lorsque la latence est extrêmement importante.

  • Activez le tri des messages dans l'abonnement. Côté éditeur, si vous envoyez des messages avec une clé de tri et dans la même région, vous pouvez configurer les abonnés pour qu'ils reçoivent ces messages dans l'ordre. Côté abonné, n'activez la propriété de tri des messages que pour les abonnements pour lesquels vous souhaitez recevoir des messages triés. En fonction de l'état de la propriété, chaque abonnement associé au sujet peut déterminer s'il a besoin d'une distribution ordonnée sans s'affecter mutuellement.

  • Confirmez les messages dans l'ordre. Lorsque vous utilisez la distribution ordonnée, les confirmations des messages ultérieurs ne sont traitées que lorsque les confirmations des messages précédents sont traitées par clé de tri. Par exemple, si vous avez les messages 1, 2 et 3 avec la même clé de tri, que vous les recevez tous et que vous ne confirmez que le message 3, le service ne considère pas le message 3 comme confirmé tant que les messages 1 et 2 ne sont pas également confirmés. Si les confirmations des messages 1 et 2 ne sont jamais reçues, les messages 1, 2 et 3 sont tous distribués à nouveau.

Récapitulatif des bonnes pratiques

Le tableau suivant récapitule les bonnes pratiques recommandées dans ce document :

Sujet Tâche
Choisir un type d'abonnement Choisissez le type d'abonnement adapté aux besoins de votre entreprise. Si votre abonnement le permet, utilisez également la bibliothèque cliente de haut niveau.
Relire un message confirmé Traitez un message avant de le confirmer. Vous pouvez également configurer une opération de recherche pour ne pas perdre les messages confirmés.
Contrôle de flux Configurez le contrôle de flux dans les paramètres de votre abonné pour vous assurer que les abonnés ne sont pas surchargés tant que l'autoscaling n'est pas activé ou que le temps ne s'est pas écoulé.
Trier des messages Lorsque vous utilisez la messagerie ordonnée, choisissez StreamingPull ou Pull, activez le tri des messages dans l'abonnement et confirmez les messages dans l'ordre.

Étape suivante