2017-04-03 1 views
0

Je crée une application qui appelle un service Web qui a deux instances identiques, chacune fonctionnant sur un serveur différent, avec sa propre adresse IP. L'application peut appeler n'importe quelle instance de service à tout moment, mais elle peut parfois avoir des difficultés à obtenir une réponse de l'une d'entre elles (en raison d'une panne réseau ou d'un problème avec l'instance).Traitement des échecs d'un service Web s'exécutant sur plusieurs instances

Quelle est la méthode recommandée pour que l'application cesse automatiquement d'utiliser l'instance problématique? Comment peut-il revenir à l'utilisation de l'instance quand elle est en ligne à nouveau?

Existe-t-il des bibliothèques ou des outils standard pour aider ce type de scénario?

+1

Généralement, vous auriez un serveur d'équilibrage de charge qui dirigerait la requête vers les deux instances. L'application cliente doit se connecter à l'URI de l'équilibreur de charge et ne doit pas avoir connaissance de vos deux instances. Si l'une des instances échoue, l'équilibreur de charge dirige tout le trafic vers l'instance restante jusqu'à ce que l'instance défaillante soit rétablie. – Dijkgraaf

Répondre

0

Utilisez un équilibreur de charge.

Votre application devra se connecter à la LB et non aux serveurs Web directement. Les LB conservent l'état de chaque serveur avec lequel ils sont configurés (via un délai d'expiration ou des appels d'état HTTP explicites). Ils désactivent automatiquement le trafic des serveurs déconnectés et l'activent une fois l'instance rétablie.

Plus tard, vous pouvez ajouter ou supprimer des instances en fonction de vos besoins (manuels ou automatiques) sans nécessiter de modifications dans votre application.

HAProxy et Nginx sont largement utilisés pour l'équilibrage de charge à l'échelle Internet. Les fournisseurs de cloud fournissent également ce service en tant que service, vous pouvez les utiliser si vous êtes sur le cloud (comme AWS a un équilibrage de charge élastique, Google Cloud a Load Balancing).