2010-03-18 4 views
0

Je dois créer une application Web .net qui s'exécuterait sur plusieurs serveurs frontaux à charge équilibrée. Maintenant, je dois utiliser une API tierce qui n'est pas thread-safe donc un seul thread doit appeler l'API à la fois, donc je dois utiliser un machanisme de synchronisation comme lock ou mutex qui assure la synchronisation au sein du processus et à travers le processus. Maintenant, verrouiller ou mutex fonctionner dans un environnement multiserveur loadbalanced correctement? Si non alors y a-t-il un mécanisme permettant de synchroniser tous les threads de mon application dans toutes les machines?Comment réaliser la synchronisation dans un environnement multiserveur à charge équilibrée

Répondre

1

En quoi l'API tierce ne protège-t-elle pas les threads? Habituellement cela signifie que vous ne pouvez l'appeler qu'à partir d'un fil par processus - mais vous pouvez l'appeler à partir de plusieurs processus différents en même temps, à moins qu'ils n'accèdent tous à une seule ressource partagée.

Si vous pouviez nous en dire plus sur l'API, cela peut aider ...

EDIT: D'accord, comme il est à l'aide d'une seule ressource partagée, vous voudrez peut-être envisager la création d'un serveur que tous les autres se connectent à et quelle est la machine seule pour utiliser cette API tierce. Cela peut impliquer une file d'attente de messages pour les demandes, ou éventuellement un simple service Web. Évidemment, ce serait un point de défaillance unique et un goulot d'étranglement dans le système - si vous pouvez trouver un moyen d'éviter la ressource partagée unique, ce serait préférable.

Vous pourriez potentiellement éviter qu'il s'agisse d'un point de défaillance unique en ayant plusieurs machines «essayant» d'être ce maître, par ex. en maintenant un verrou de base de données. Bien sûr, cela revient à votre question initiale d'un verrou partagé - mais cela signifie que vous n'essayez pas d'acquérir ce verrou pour chacune des opérations d'API tierces - juste pour avoir le privilège d'être le "maître actif".

+0

Actuellement, l'API utilise une seule ressource partagée en interne, donc un seul thread doit l'appeler à la fois. – Anoop

Questions connexes