2016-12-19 3 views
0

J'ai une application Web C#. J'ai plusieurs bases de données où les données sont les mêmes, donc je peux utiliser une méthode Round Robin pour distribuer les appels de base de données.C# REST Web APP - appels Round Robin aux bases de données

Je prévois de lire dans chaque chaîne de connexion, et parcourir chaque DB et retourner les données pour le premier appel qui passe.

Je voudrais enregistrer la dernière base de données qui a été utilisé, donc je peux essayer la base de données suivante dans la liste pour le prochain appel qui vient.

Une base de données semble exagéré pour cela, donc pourrais-je utiliser un liste statique pour suivre cela et verrouiller la lecture et la mise à jour de la liste?

Répondre

0

En ce qui concerne l'approche à la ronde, vous pouvez certainement utiliser une liste avec un verrou, mais je fais ci-dessous quelques commentaires généraux qui pourraient être utiles.

Vous essayez d'implémenter un équilibreur de charge réseau ici. Vous allez faire face à quelques problèmes. IIS lancera volontiers plusieurs threads d'appels vers votre site Web s'il reçoit plusieurs demandes avant la fin du premier. Deuxièmement, si votre site Web se trouve dans un WebGarden (plusieurs instances d'IIS sur le même ordinateur) ou en tant que WebFarm (plusieurs instances du système d'exploitation) ou sur Azure ou une autre plate-forme cloud, ces mêmes appels peuvent ne pas être être sur la même machine (ou machine virtuelle), vous devez donc être clair qu'il sera presque impossible de générer une véritable série de hits de base de données round robin sur un site Web correctement évolutif. Je ne suis pas sûr que la création d'un nouveau point de synchronisation entre tous vos threads Web est une bonne idée pour l'évolutivité. Round Robin n'est pas non plus la meilleure utilisation des ressources - si vous voulez que votre site fonctionne aussi vite que possible en utilisant le moins de ressources possible (généralement pourquoi un système NLB est mis en place), puis utilisez une approche Pool pour louer une base de données ouverte connexion plutôt que d'itérer autour d'un ensemble de connexions de base de données ouvertes. Le code appelant reçoit la prochaine connexion qui n'a pas été libérée dans le pool.