2009-02-19 7 views
1

J'ai mis en place un service wcf et maintenant, mon client veut en avoir trois copies, travaillant indépendamment sur des machines différentes. Une approche maître-esclave. J'ai besoin de trouver une solution qui permettra le comportement:Comment approcher la synchronisation des services wcf?

le premier service qui est instancié "demande" les deux autres "si elles sont en vie?" - Si non, alors il devient un maître et c'est celui qui est actif sur le net. Les deux autres, une fois instanciés, voient qu'il y a déjà un maître vivant, alors ils sont devenus esclaves et commencent à dormir. Il doit y avoir des mécanismes pour vérifier périodiquement si le maître n'est pas mort et si c'est le cas, choisit la copie suivante qui est devenue vivante pour devenir un maître (jusqu'à ce qu'il devienne respectivement mort)

Ceci devrait être une sorte d'architecture modèle, donc je serais plus qu'heureux de recevoir des conseils.

grâce

Répondre

1

Je suggérerais regardant le canal de pairs WCF (System.Net.PeerToPeer) pour faciliter chaque noeud connaître les autres noeuds. Voici un link qui offre une introduction décente. En ce qui concerne la détermination du nœud qui devrait être le maître, l'astuce sera de négocier quel nœud devrait être le maître si deux nœuds ou plus sont mis en ligne à peu près en même temps. Une fois que les nœuds se sont mis au courant, il faut un mécanisme déterministe pour établir le maître. Par exemple, vous pouvez utiliser la première heure de création, la plus petite valeur du dernier octet de l'adresse IP de chaque nœud, ou quelque chose de vraiment. Vous aurez juste besoin de définir un schéma qui permette aux nœuds de le négocier automatiquement.

Enfin, pour vérifier si le maître est encore en vie, je suggère d'utiliser le mécanisme basé sur les événements décrit here. Le maître peut envoyer des événements de santé et d'état périodiques auxquels les autres nœuds s'inscriraient. Je mettrais un bloc try/catch/finally au point d'entrée du code de sorte que si le maître devait planter, il pourrait publier un dernier événement MasterClosing pour faire savoir aux esclaves qu'il s'en allait. Cela ne tient pas compte d'un plantage du système, par exemple une panne de courant, etc. Pour gérer cela, prévoyez un délai d'attente dans les esclaves afin que, lorsque le délai expire, les esclaves puissent interroger le maître pour voir s'il existe toujours. Sinon, les esclaves peuvent négocier entre eux en utilisant votre algorithme déterministe sur qui devrait être le prochain maître.

Questions connexes