Les pipelines de données connaissent parfois des pics de trafic publié. Les pics de trafic peuvent submerger les abonnés, sauf si vous y êtes préparé. Pour éviter les pics de trafic, une solution simple consiste à augmenter de manière dynamique les ressources des abonnés Pub/Sub pour traiter plus de messages. Cependant, cette solution peut entraîner une augmentation des coûts ou ne pas fonctionner instantanément. Par exemple, vous pourriez avoir besoin d'un grand nombre de VM.
Le contrôle de flux côté abonné permet à l'abonné de réguler la fréquence à laquelle les messages sont ingérés. Le contrôle de flux permet ainsi de gérer les pics de trafic sans augmenter les coûts ni jusqu'à ce que le nombre d'abonnés augmente.
Le contrôle de flux est une fonctionnalité disponible dans la bibliothèque cliente de haut niveau Pub/Sub. Vous pouvez également implémenter votre propre programmation de contrôle de flux lorsque vous utilisez une bibliothèque cliente de bas niveau.
La nécessité de contrôler le flux indique que les messages sont publiés plus rapidement qu'ils ne sont consommés. S'il s'agit d'un état persistant plutôt que d'un pic temporaire de volume de messages, envisagez d'augmenter le nombre d'instances de client abonné.
Configuration du contrôle de flux
Le contrôle de flux vous permet de configurer le nombre maximal d'octets alloués aux requêtes en attente et le nombre maximal de messages en attente autorisés. Définissez ces limites en fonction de la capacité de débit de vos machines clientes.
Les valeurs par défaut des variables de contrôle de flux et les noms des variables peuvent varier d'une bibliothèque cliente à l'autre. Par exemple, dans la bibliothèque cliente Java, les variables suivantes configurent le contrôle de flux:
setMaxOutendingElementCount(). Définit le nombre maximal de messages pour lesquels Pub/Sub n'a pas reçu d'accusé de réception ni d'accusé de réception négatif.
setMaxOutendingRequestBytes(). Définit la taille maximale des messages pour lesquels Pub/Sub n'a pas reçu d'accusés de réception ni d'accusés de réception négatifs.
Si la limite définie pour setMaxOutstandingElementCount()
ou setMaxOutstandingRequestBytes()
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 de manière négative.
Nous pouvons ainsi aligner le débit sur le coût associé à l'exécution d'un plus grand nombre d'abonnés.
Exemples de code pour le contrôle de flux
Pour contrôler le débit auquel le client abonné reçoit des messages, utilisez les fonctionnalités de contrôle de flux de l'abonné. Ces fonctionnalités de contrôle de flux sont illustrées dans les exemples suivants:
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.
C#
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C# qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C#.
Go
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Go qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Python.
Ruby
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Ruby qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Ruby.
Étapes suivantes
Découvrez les autres options de distribution que vous pouvez configurer pour un abonnement:
Gérer les échecs de messages avec une stratégie de nouvelle tentative d'abonnement
Transférer les messages non distribués vers un sujet de lettres mortes
Rouvrir des messages déjà confirmés ou les supprimer définitivement
Traiter davantage de messages grâce au contrôle de simultanéité