Redis
 sql >> Base de données >  >> NoSQL >> Redis

Hachage cohérent comme moyen de mettre à l'échelle les écritures

Il existe deux raisons d'utiliser plusieurs nœuds dans un cluster :

  • Sharding pour limiter la quantité de données stockées sur chaque nœud
  • Duplication pour réduire la charge de lecture et permettre la suppression d'un nœud sans perte de données.

Les deux sont fondamentalement différents, mais vous pouvez implémenter les deux - utilisez un hachage cohérent pour pointer vers un ensemble de nœuds avec une configuration maître/esclave standard plutôt qu'un seul nœud.

Si le cluster est votre magasin de données principal plutôt qu'un cache, vous aurez besoin d'une stratégie de redistribution différente qui inclut la copie des données.

Mon implémentation est basée sur le fait que le client choisit l'un des compartiments 64k pour un hachage et dispose d'une table qui mappe ce compartiment sur un nœud. Initialement, tous mappent au nœud #1.

Lorsque le nœud 1 devient trop volumineux, son esclave devient le nœud maître 2 et la table est mise à jour pour mapper la moitié des clés du nœud 1 au nœud 2. À ce stade, toutes les lectures et écritures fonctionneront avec le nouveau mappage et il vous suffira de nettoyer les clés qui se trouvent maintenant sur le mauvais nœud. Selon les exigences de performance, vous pouvez vérifier toutes les clés en même temps ou vérifier une sélection aléatoire de clés comme le fait le système d'expiration.