2017-01-27 1 views
1

J'ai un certain nombre de nœuds possédant chacun un sous-ensemble d'un grand pool de ressources physiques. Chaque nœud ne gère que ses propres ressources, mais doit le faire en fonction de l'état de toutes les ressources du pool. Un nœud ne met à jour que l'état de ses propres ressources mais écoute les changements d'état de tous les autres. Lorsqu'un nœud meurt (processus terminé, crash, perte de puissance, ...), ces ressources physiques meurent avec lui et les autres nœuds doivent les éliminer dès que possible.Cache distribué: effacement des entrées sur la perte du propriétaire (Apache Ignite)

Maintenant, je le ferais avec un cache répliqué distribué (afin que les nœuds puissent lire les répliques locales pour la performance), mais comment "effacer" décime les entrées (le nœud propriétaire ne peut pas le faire). La réponse standard semble être la politique d'expiration = l'entrée de carte obtient X secondes pour vivre sans mise à jour, puis disparu. Le problème est, si vous pensez dans la gamme 100.000 de ressources et 100 nœuds, c'est beaucoup de mises à jour à envoyer partout pour ne pas changer d'état. Sans parler du travail de mise à jour de chaque entrée avant le timeout et de rejeter ces mises à jour dans les autres nœuds.

Une meilleure façon de faire?

Répondre

1
  • Abonnez-vous à EVT_NODE_LEFT via IgniteEvents
  • Trouver les entrées liées par SqlQuery ou ScanQuery et les supprimer