0
votes

Comment optimiser le débit pour les appels d'API de repos dans un flux AKKA

J'apprends actuellement des flux d'Akka et j'essaie de mettre en œuvre un flux simple qui obtient un article d'une source et appelle une API de repos pour chaque article.

Une version simplifiée de mon code ressemble à ceci: xxx

Je me demande maintenant comment définir parallélisme Pour obtenir un débit maximal si le goulot d'étranglement est le serveur de repos.

Ma compréhension est que si nous supposons que le serveur ne peut pas gérer la demande en parallèle, je pourrais utiliser parallélisme = 1 comme premier approximation Et mon flux enverrait une demande après l'autre. Si le serveur peut gérer les demandes n en parallèle, le flux n'utiliserait pas cela et je devrais définir parallélisme = n pour obtenir un Meilleur débit.

Je pourrais maintenant jouer avec parallélisme pour optimiser le débit pour ma configuration à un moment donné à temps. Cependant, MyServer pourrait être derrière un équilibreur de charge et un écheleur automatique. Ensuite, le nombre de demandes parallèles disponibles pour le flux dépend de l'heure et peut-être que mon programme n'est peut-être pas le seul utilisateur de l'API de repos.

Ma question est maintenant, quelle serait la meilleure approche pour appeler l'API de repos lorsque je souhaite utiliser MyServer le plus bon possible mais Je ne veux pas submerger si c'est sous pression ou pas encore échoué?


0 commentaires

3 Réponses :


-3
votes

donc la méthode mapasync (parallélisme) appartient à source d'objet et que vous avez quelques fonctions imbriquées - faisons cela quelques fonctions plus simples au lieu d'un grand nombre de fonctions imbriquées et Il devrait être optimisé.


0 commentaires

0
votes

En réalité, il s'agit d'un type d'intégré pour les flux, car ils utilisent la contre-pression. Donc, dès que le serveur de repos est à ses limites, les réponses prendront plus de temps et votre flux demandera ensuite moins de demandes de la source. Vous n'avez donc pas besoin d'optimiser votre parallélisme pour un état actuel du serveur demandé, mais de l'accorder pour un bon débit. Pour tout serveur demandé, cela ne sera que aussi rapide que votre serveur demandé est capable de répondre. Avec un graphique similaire utilisé en utilisant ci-dessus, j'ai pu apporter un groupe de 2 nœuds à ses limites ainsi que de 16 nœuds avec l'échelle de mise à l'échelle intégrée dans le cluster. Le graphique fonctionnait donc proprement pour les deux états, seul le débit intégré de manière significative: ).

Vous devriez vous arrêter bien en définissant le niveau de parallélisme au nombre de noyaux que votre machine utilise.

Vous pouvez également utiliser un .throttle (...) sur votre source pour définir le nombre maximal de demandes que vous souhaitez fournir par unité de temps.

Si vous souhaitez dynamiquement réagir au nombre maximal de demandes que vous avez répondu par le service, puis indiquez que vous limitez à 80% de cela, vous devez coder une coutume pour cela, je pense. Par exemple, une étape de débit qui compte des demandes pendant un certain temps, puis des étranges en conséquence, et cela revient-il quelque temps plus tard dans le service de cas échéant et ainsi de suite. Mais enfin, la gestion des demandes par utilisateur devrait être au niveau du service demandé.


0 commentaires

0
votes

Il existe un moyen plus "optimal" de faire les demandes que démontrées dans la question.

Si vous utilisez le Niveau de connexion Side API puis ouvrir un pool de connexion au service qui vous intéresse: p> xxx pré>

Ce pool peut alors être utilisé pour traiter votre Article Code> Demandes: P>

host-connection-pool {
  max-open-requests = 8
}