2009-11-10 16 views
0

Je partitionne actuellement l'espace UUID en utilisant modulo, donc la recherche de données ne nécessite pas de ping sur chaque serveur. Cependant, le principal problème avec modulo est la mise à l'échelle car l'ajout de plusieurs noeuds au magasin de données nécessite probablement une migration de données. À votre avis, quelle est la meilleure approche pour ajouter plus de nœuds au système tout en gardant le service disponible?Comment rechercher efficacement des informations sur un UUID dans un environnement distribué?

Merci d'avance!

Chris

Répondre

0

Je vois deux scénarios pour l'ajout de nœuds:

  1. Votre jeu actuel de nœuds est insuffisante pour vos besoins de performance.
  2. Vous ajoutez de nouvelles données, donc au fil du temps vous devez ajouter de nouveaux nœuds

Dans le second cas, si les UUID ont une composante en fonction du temps, puis le partitionnement par âge peut être assez bon

Mais je suppose que c'est le premier cas qui est plus intéressant. Comme l'utilisation de vos données chnages, vous trouvez que le partitionnement doit changer afin de distribuer le travail suffisamment. Dans ce cas, je ne vois pas d'alternative au déplacement de certaines partitions vers de nouveaux nœuds, par définition les nœuds actuels sont surchargés. Je ne suis pas clair quant à l'ampleur du problème - est-ce la migration réelle qui est gênante? Ou est-ce que les clients doivent soudainement aller à un nouvel endroit pour leurs données? Pouvez-vous mettre en place une approche de recherche paresseuse?

Client initialises with current table of servers, 
    (hence knows the modulus to apply to uuid and can route on that basis) 

Servers decide to reorganise themselves 

Client gets a request, calclulates a now invalid modulus 

Attempts to access the data 

response says "Gone Away" **AND** gives the new server info 

Client can now recompute the location