Je dirais que c'est davantage une question économique. Cependant, c'est un jugement que les ingénieurs devraient pouvoir faire. Par conséquent, je réponds.
Je divise ma réponse en quatre parties:
- Gestion des risques
- Stratégies
- Frais
- Intuition
Gestion des risques
Ainsi, parfois, votre client ne parvient pas à obtenir une réponse du serveur. Je suppose que ce n'est pas à cause d'une erreur de programmation (sinon la solution est de le réparer, alors allez-y). Au contraire, cela doit être dû à une situation fortuite échappant à votre contrôle ...
Mais pas au-delà de vos connaissances. Tu dois savoir:
- Combien de fois cela se produit-il?
- Quel impact cela a-t-il.
Par exemple, si l'échec et la nouvelle tentative ne se produisent que dans environ 2% des cas, cela ne vaut probablement pas la peine d'y remédier. Si cela se produit environ 80% du temps, eh bien ... ça dépend ...
Combien de temps le client doit-il attendre? Et comment cela se traduit-il en coûts ... vous voyez, vous avez un petit retard dans une application régulière, ce n'est probablement pas un gros problème. S'il est important et que vous disposez d'une application en temps réel ou d'un jeu vidéo en ligne, cela détournera les utilisateurs et vous feriez probablement mieux d'investir dans des serveurs plus nombreux ou meilleurs. Sinon, vous pouvez probablement mettre un message "chargement" ou "attente de serveur". À moins que le délai ne soit vraiment important (de l'ordre de dizaines de secondes), il peut être trop important même pour l'application régulière.
Stratégies
Comme je l'ai dit plus haut, il y a plus d'une façon de résoudre ce problème. Je suppose que vous disposez déjà de l'implémentation de la boucle try-fail-retry. Voyons donc ...
- Mettez un message de chargement. C'est bon marché, aide à la rétention des utilisateurs.
- Requête en parallèle. Peut être plus rapide, peut encore échouer. Nécessite un serveur redondant (peut être coûteux), gaspillera le temps du serveur et le trafic réseau.
- Recherchez en parallèle pour établir le serveur le plus rapide et utilisez-le à partir de là. Peut être plus rapide, peut encore échouer. Nécessite un serveur redondant (peut être coûteux), ne gaspillera pas autant de temps serveur et de trafic réseau.
Maintenant, remarquez que je dis que ceux-ci peuvent toujours échouer. Si nous supposons qu'une requête à un serveur a 80% de chances d'échec, alors une requête parallèle à deux serveurs a 64% de chances d'échec. Par conséquent, vous devrez peut-être encore réessayer.
Un avantage supplémentaire de choisir le serveur le plus rapide et de continuer à l'utiliser, est que le serveur le plus rapide est également le moins susceptible d'échouer en raison de problèmes de réseau.
Ce qui me rappelle, si vous pouvez comprendre pourquoi la demande échoue, faites-le. Il peut vous aider à mieux gérer la situation, même si vous ne pouvez pas empêcher les échecs. Par exemple, avez-vous besoin de plus de vitesse de transfert côté serveur?
Un peu plus:
- Déployez plusieurs serveurs à travers le monde et choisissez un serveur par géolocalisation.
- Effectuez l'équilibrage de charge côté serveur (une machine dédiée prendra toutes les requêtes et les reliera à vos serveurs, vous pouvez y avoir votre parallélisme ou une meilleure stratégie d'équilibrage).
Et qui a dit que vous ne deviez en faire qu'une? Vous pouvez mettre un message de chargement, interroger plusieurs serveurs répartis sur le wrold pour choisir le plus rapide et l'utiliser uniquement à partir de là, en cas d'échec, réessayer sur une boucle, et faire en sorte que chacun de ces serveurs soit un cluster de machines avec équilibrage de charge . Pourquoi pas? Eh bien, les coûts ...
Frais
Il y a quatre coûts:
- Le coût du développement (généralement très bon marché)
- Le coût du déploiement (généralement élevé)
- Le temps d'exécution des coûts (dépend du type d'application et du modèle commercial)
- Le coût de l'échec (probablement faible, mais pas nécessairement)
Vous devez les équilibrer.
Par exemple, disons que vous gagnez environ un dollar par utilisateur satisfait. Que vous avez 3000 utilisateurs par jour. Que les demandes échouent environ 50% du temps. Et que 2% des utilisateurs partent sans payer lorsque la demande échoue. Cela signifie que vous perdez (3000 * 50% * 2%) 30 dollars par jour. Maintenant, disons que le développement de la nouvelle fonctionnalité vous coûtera 100 dollars et le déploiement des serveurs vous coûtera 800 dollars - et en ignorant les coûts d'exécution - cela signifie que vous auriez un retour sur investissement en ((100 + 800) / 30 ) 30 jours. Maintenant, vous pouvez vérifier votre budget et décider.
Ne considérez pas ces valeurs comme représentatives de la réalité, je les ai choisies pour des raisons mathématiques.
Addendums:
- N'oubliez pas que j'ignore également les détails. Par exemple, vous pouvez avoir peu de coûts de déploiement, mais vous payez pour le temps CPU et vous devez en tenir compte.
- Certains clients peuvent apprécier si vous ne gaspillez pas leur paquet de données dans des demandes redondantes.
- Améliorer votre produit peut aider à apporter une publicité naturelle.
- N'oubliez pas les coûts d'opportunité. Devriez-vous développer autre chose?
Le fait est que si vous considérez le problème en termes d'équilibrage des coûts, vous pouvez faire une estimation du coût des stratégies que vous envisagez et utiliser cette analyse pour décider.
Intuition
L'intuition est favorisée par l'expérience. Je ne suggère pas de faire ce genre d'analyse à chaque fois. Certaines personnes le font, et ça va. Je vous suggère d'avoir une certaine compréhension de cela et de développer une intuition pour cela.
De plus, en ingénierie, en plus des connaissances que nous obtenons de la science réelle, nous apprenons également dans la pratique et compilons des directives sur ce qui fonctionne et ce qui ne fonctionne pas. Par conséquent, il est souvent sage de voir l'état de l'art ... bien que, parfois, vous ayez besoin de voir en dehors de votre région.
Dans ce cas, je regarderais les jeux vidéo en ligne. Ils ont des écrans de chargement, ils ont plusieurs serveurs, ils choisiront un serveur en fonction de la latence, et ils peuvent même permettre à l'utilisateur de changer de serveur. Nous savons que cela fonctionne.
Je suggérerais de le faire au lieu de gaspiller le trafic réseau et le temps du serveur à chaque demande, sachez également que même avec un serveur redondant, une panne peut se produire.