2009-06-04 9 views
1

Nous avons deux contrôleurs industriels qui sont utilisés pour contrôler les systèmes critiques. L'idée est qu'en cas de défaillance d'un contrôleur, l'autre contrôleur prendra automatiquement le relais. Pour garantir que l'échange est transparent, chaque contrôleur de secours doit refléter l'état du contrôleur en ligne à tout moment.Maintien de l'état entre deux machines

Nous avons une solution, qui est mal codée et documentée. La question est, existe-t-il un modèle de conception commun qui implémente un tel système ou logiciel open source qui réalise une chose similaire qui pourrait être utilisée pour créer une solution générique qui pourrait être utilisée pour les contrôleurs ou PC et peut être étendue pour permettre contrôleurs pour agir en tant que routines de veille.

Répondre

-1

Peut-être une base de données SQLite partagée ou quelque chose de similaire?

1

L'approche est la "cohérence de la mémoire cache". Produits commerciaux - Tangosol, par exemple - faites ceci.

Une autre approche est une version légère d'un ESB (Enterprise Service Bus) ou SOA (Service Oriented Architecture). Presque tous les fournisseurs SOA ont des produits pour cela. Je commencerais par Tibco, qui a un jeu de composants léger que vous pouvez utiliser pour cela. Dur, vous pouvez rouler le vôtre en utilisant le protocole HTTP afin qu'un contrôleur puisse POST l'état de ses contrôleurs d'ombre.

0

Il y a le modèle maître-esclave standard utilisé dans presque tous les SGBD qui prennent en charge le clustering, les architectures distribuées et la réplication (http://en.wikipedia.org/wiki/Database_replication). Donc, très fondamentalement dans votre situation, vous pourriez avoir l'état de maintenance de la machine maître, et l'esclave assis là ne faisant rien, sauf mettre à jour son propre état de celui du maître. Si le maître tombe en panne, l'esclave voit que le maître n'est plus là, et peut prendre le contrôle de l'état, le maître n'étant utilisé que lorsqu'il a mis à jour son propre état de celui de l'esclave (qui a maintenu l'état pendant le maître n'a pas été actif).

1

Il existe une différence entre le basculement et le basculement transparent. Avez-vous vraiment besoin d'un basculement transparent? Si c'est le cas, vous finirez par payer (à la fois en termes de coût et de complexité). Ceci étant dit, jetez un oeil à ce poste sur Buddy Replication pour une solution élégante au problème.

0

L'approche traditionnelle utilisée pour contrôler les systèmes critiques en temps réel consiste à exécuter les deux unités au lockstep. Tandem a construit des machines tolérantes aux fautes très impressionnantes en utilisant cette technique depuis des années.

Cependant, lockstep est vraiment une solution de niveau matériel; Je ne pense pas que vous pourriez implémenter le lockstep classique purement au niveau du logiciel. Ou au moins, pas directement. Peut-être utiliser des machines d'état synchronisées par échange d'horloges vectorielles ou quelque chose de tout à fait à l'hélice?

0

Il existe une situation analogue avec les ordinateurs de la navette spatiale. Dans cette situation, ils utilisaient 5 ordinateurs et si une machine était en retard ou différente des autres, elle était (en substance) votée hors de l'île.

Dans votre situation, comment déterminez-vous quel contrôleur est défectueux? La machine déterminante est-elle également prise en compte pour une défaillance monopoint?

Quel niveau de communication est disponible entre les deux contrôleurs?Mémoire partagée, Ethernet, ou quelque chose encore plus lent?

À quelle vitesse les informations d'état changent-elles entre les deux?

Est-il possible d'envoyer des informations identiques aux deux contrôleurs et les deux contrôleurs calculeraient-ils les mêmes transitions d'état?

Questions connexes