Nous avons un système qui donne un lot de demandes, fait un nombre équivalent d'appels à une API tierce externe. Étant donné qu'il s'agit d'une tâche liée aux E/S, nous utilisons actuellement un pool de threads mis en cache de taille 20 pour répondre à ces demandes. Autre que ci-dessus, est une solution à:Mise à l'échelle logicielle/matérielle pour un grand nombre de demandes d'API externes?
utiliser moins de machines avec d'autres noyaux (moins contexte de commutation, capable de supporter plusieurs fils parallèles)
ou
utilisation plus machines en tirant parti du matériel bon marché/à bon marché (boîtes à pizza)
Le nombre de demandes que nous recevons par jour est de l'ordre de des millions.
Nous utilisons Java, les threads ici sont des noyaux, pas des "verts".
Autres Points/Pensées:
- Hadoop est couramment utilisé pour les problèmes de cette nature, mais cela doit être en temps réel par rapport à l'extraction de données hors ligne stéréotypée.
- Les requêtes API prennent part de 200ms à 2 secondes en moyenne
- Il n'y a pas d'état partagé entre les demandes
- La 3ème partie en question est capable de desservir plus de demandes que nous pouvons éventuellement le feu (fournisseur de paiements).
Avez-vous un état partagé, utilisé pour gérer les demandes? Si oui, à quelle fréquence change-t-il? Quelle est la taille de cet état partagé? –
Quelle est la limite de l'API tierce?Il ne sert à rien de mettre à l'échelle votre pile si l'API que vous appelez est toujours le goulot d'étranglement. Pouvez-vous mettre en cache les données que vous recevez de lui ou utiliser les données d'un appel du service/fournir plusieurs de vos clients simultanément? – Paolo
Édité mon message original pour répondre aux questions ci-dessus. Les appels sont complètement indépendants, il n'y a donc pas de données à mettre en cache. – smonky