2017-07-15 2 views
0

J'ai une seule application, maintenue sur deux noeuds différents sur le cloud. J'ai un planificateur dans l'application qui se déclenche toutes les 5 minutes, qui effectuent une opération de mise à jour dans la base de données. Comment puis-je éviter les deux opérations de provoquer une anomalie dans la base de données. Y a-t-il une façon qu'une application peut savoir, qu'une autre instance est déjà déclenchée ou n'importe quelle sorte de communication inter-nœuds qui peut se produire dans une fonderie de nuages.Mise à jour de la simultanéité des opérations sur plusieurs noeuds

Merci beaucoup

+0

Je voudrais regarder dans une architecture qui utilise une solution orientée message. À mon humble avis, vous avez choisi une architecture/mise en œuvre qui est sujette à des difficultés. –

+0

Ou s'appuyer sur les données de la base de données: transaction (et niveau d'isolement) pour éviter les mises à jour simultanées, éventuellement une colonne supplémentaire stockant un horodatage dernière mise à jour, vous pouvez vérifier avant de faire une mise à jour? – dkoper

+0

L'application est hébergée sur le cloud sur plusieurs nœuds et est appelée en tant que services de repos. SO seul un des nœuds répondra à l'appel de repos externe. Le seul défi est le mécanisme de planification qui est exécuté dans l'application. Existe-t-il un moyen que deux applications pourraient savoir, l'un a commencé le processus de planification, et d'autres ne devraient pas faire cela .. En d'autres termes, l'intercommunication entre les mêmes applications hébergées sur deux nœuds différents. – IMahajan

Répondre

0

Un choix deux viennent à l'esprit pour Cloud Foundry:

  1. Créez un distribué "verrouiller" avec votre base de données. Cela peut être aussi simple qu'une table ou un enregistrement dans la base de données que le planificateur vérifie avant de faire quoi que ce soit d'autre. Une fois qu'il a le verrou, le planificateur peut fonctionner. S'il ne parvient pas à obtenir le verrou, il se rendort. Puis quand c'est fait, il retourne le verrou.

    Si vous avez beaucoup de travail à faire, vous pouvez le diviser en sections et avoir des verrous pour chaque section, de sorte que vous puissiez répartir le travail entre vos différentes instances. Ceci devient plus compliqué cependant, donc vous devriez peser les avantages contre la complication supplémentaire pour voir si cela en vaut la peine pour votre cas d'utilisation. Exécutez uniquement le planificateur sur le premier nœud. Vous pouvez déterminer le premier noeud en consultant votre numéro d'instance d'application. Soit la variable d'environnement CF_INSTANCE_INDEX ou VCAP_APPLICATION, qui contient JSON et possède une propriété instance_index. Pour chaque option, la valeur sera 0 pour la première instance. Si c'est 0, le planificateur s'exécute. S'il est supérieur à zéro, le planificateur ne s'exécute pas.

Hope that helps!