2009-11-13 13 views
1

J'ai le travail de mettre en œuvre un système distribué de nœuds (comme les nœuds p2p) chacun de ces nœuds (disons A, B, C et D) remplissent certaines fonctions et doivent interagir entre eux pour diverses opérations telles que synchroniser les opérations et d'autres choses comme 15 nœuds A interagissent avec un groupe de 5 nœuds B pour entrer dans la file d'attente du nœud le moins chargé et obtenir un numéro de jeton et attendre ensuite que C les redirige vers un nœud D libre. sur.Conception de systèmes distribués utilisant uniquement C

Je suis un peu perdu à comment dois-je aller sur la conception:

  1. Le protocole que j'ai pensé est d'encapsuler une struct du type d'opération et d'autres choses à envoyer. En outre, cela est fait en utilisant un système de reconnaissance afin que je puisse être sûr que l'autre côté a reçu le message.

  2. Comment aborder l'aspect de l'exclusion mutuelle distribuée car je n'ai pas de serveur central. Je suppose que chaque nœud réplique les données, mais cela semble un peu trop cher (pour ne pas dire stupide). Quelle est la méthodologie de conception de base suivie lors de la mise en œuvre des systèmes P2P, à savoir comment j'implémente le programme de telle sorte qu'il est bloqué sur une réception, mais peut également envoyer d'autres mises à jour et obtenir des informations sur "l'état" de l'ensemble du système.

  3. Comment puis-je m'assurer du classement complet des demandes?

En outre, quels sont les autres problèmes que je peux avoir besoin de regarder/face. J'apprécierais également si vous pourriez me diriger vers de bonnes ressources en ligne sur la mise en œuvre des systèmes p2p et distribués.

Merci!

+0

vous vous inscrivez pour beaucoup de douleur: pourquoi ne pas envisager Erlang par exemple? Cela vous aidera à résoudre de nombreux problèmes, par ex. mise en réseau, distribué, sérialisation, marshaling, etc – jldupont

+2

Vous dites "en utilisant seulement C" mais marquer la question à la fois "c" et "C++". Laquelle est-ce? –

+0

et pourquoi ce wiki communautaire? Sachez que cela diminue vos chances d'obtenir des réponses décentes ... –

Répondre

1

Je ne vais pas essayer de donner un « tout » réponse (parce que la question est trop grande vague & de toute façon), mais je pourrais vous orienter vers une pièce intéressante du puzzle:

  1. Vous pourriez utilisez un système Message Queuing (par exemple, AMQP RabbitMQ: une liaison C expérimentale est disponible) pour implémenter une distribution de messages fiable entre vos nœuds.

  2. Exclusion mutuelle: vous pouvez utiliser un protocole tel que Paxos

+0

Je vais regarder les paxos. L'exigence est simplement de construire un système distribué de nœuds sans serveur qui doivent collaborer pour traiter un travail dans une séquence. –

+0

+1 pour le passage de message – paxos1977

1

Le secret pour empêcher le blocage est vos points finaux doivent tous être écrits comme des serveurs avec des fils pour le traitement « protocole » qui sont séparés des threads de traitement des données. En ce qui concerne le protocole de ligne, je suis devenu amoureux de JSON pour le protocole de ligne. C'est lisible par l'homme. Il est streamable sans besoin de longueur octets! Il est facilement extensible et surtout immunisé contre le changement de version du protocole.

+0

Pouvez-vous élaborer ou donner des références à la ** Le secret pour empêcher le blocage est que vos points d'extrémité doivent tous être écrits comme des serveurs avec des threads pour "protocole" ** partie de la réponse. Ce serait d'une grande aide. Comment puis-je assurer la commande totale des événements? –

+0

Regardez dans la conception de FTP. Il y a un port de protocole où le client parle au serveur. Seules les données de protocole sont envoyées via cette connexion. Le transfert de données s'effectue via une connexion distincte. Cela permet au serveur et au client de réagir plus rapidement aux conditions changeantes. Comme pour la commande totale d'événements qui est impossible dans une conception de p2p. Il est également dénué de sens dans un protocole p2p. Si a envoie à b et c envoie à d, est-ce important de savoir ce qui arrive en premier? – jmucchiello