Aller au contenu principal

Partitionnement et routage

Progression

#Partitionnement et routage

Distribuer les données sur plusieurs fragments permet de faire évoluer la capacité horizontalement. Le partitionnement garde chaque shard dans sa propre enveloppe de cohérence et évite qu’une requête ne bloque le cluster entier. Reste à choisir un découpage qui respecte le modèle d’accès, limite les jointures inter-shards et simplifie les opérations (ajout/retrait de nœuds, migrations de données, restauration).

#Motiver le partitionnement

  • Scalabilité : un nœud unique plafonne ; en répartissant les clés on augmente linéairement la capacité CPU/disk/IO.
  • Isolement des incidents : un shard en difficulté ne doit pas perturber les autres. On peut le redémarrer, limiter son trafic ou le déplacer sans toucher au reste.
  • Localité : placer les données au plus près des utilisateurs (clusters multi-région) ou de la logique métier (équipes autonomes par domaine).
  • Économie : dimensionner chaque shard selon son profil (stockage chaud vs froid) et réduire les surprovisions globales.

#Déterminer les clés de partition

Identifier un identifiant naturellement distribué (UUID, hash d’e-mail). Les clés séquentielles provoquent des hotspots : on peut les saler (userId#suffix) ou les regrouper par plage.

Étape 1 / 4

#Hachage cohérent — visualisation

n3n1n2n4clé → user:42
Destination actuelle: n3

Un anneau de hachage projette les clés sur un cercle logique [0, 2^m), où chaque nœud possède un segment. Ajouter ou retirer un nœud ne déplace qu’une fraction des clés (celles situées entre l’ancien et le nouveau successeur), ce qui limite les migrations massives. Les nœuds virtuels (plusieurs positions par serveur) lissent la distribution.

#Animation : rebalancement contrôlé

Nœud A — eu-west-1a

Stable

58%
user:0user:1cart:beorder:0

Charge équilibrée, latence stable.

Nœud B — eu-west-1b

Hotspot

88%
user:2cart:frorder:1promo

Hotspot identifié via métriques de p99 et file d’attente saturée.

Nœud C — eu-west-1c

Stable

52%
user:3cart:esorder:2order:3

Peut absorber davantage de clés.

Avant l’ajout de capacité

Trois nœuds portent chacun quatre shards. Un trafic viral sur les clés “cart:fr” sature le nœud B (> 85 % CPU).

Charge saineSurveillanceHotspotNouvelle capacité

Cette animation montre comment un cluster applique un rehash partiel lors d’un pic, puis draine un nœud pour maintenance. Clés à retenir : ajouter la capacité avant la saturation, monitorer la chauffe des caches froids et planifier la sortie d’un nœud à faible charge résiduelle.

#Chemins de lecture et d’écriture

Client → Routeur
La requête contient la clé logique
Résolution
Hash ou lookup métadonnées → shard
Opération
Le shard traite lecture/écriture
Observabilité
Logs + métriques par shard
Client
Routeur
Nœud A
Nœud B
1. GET cart:fr
2. h = Hash(cart:fr)
5. Réponse

#Patterns de routage

  • Client-side : le client calcule la destination (ex. Cassandra) — éviter les clients obsolètes via discovery dynamique.
  • Smart proxy : un routeur proche des clients tient la table des shards (ex. Vitess). On centralise la logique mais on ajoute un saut réseau.
  • Service directory : un service (etcd/Zookeeper/Consul) publie la topologie et les routeurs la mettent en cache.
Skew et hotspots

Surveiller la distribution requests/sec par shard. Un déséquilibre récurrent justifie soit des nœuds virtuels supplémentaires, soit un découpage biaisé par la clé (salage, hash secondaire). Anticiper les “superkeys” (comptes VIP) avec des partitions dédiées.

#Multi-région et acheminement des requêtes

  • Écriture locale + réplication asynchrone : idéal pour lecture rapide, mais attention à la cohérence éventuelle (utiliser vecteurs, versionnage).
  • Élection régionale : chaque région possède un leader local ; un méta-consensus arbitre les conflits entre régions (Spanner, Yugabyte).
  • Anycast / GeoDNS : router le trafic vers la région la plus proche ; prévoir un fallback en cas d’indisponibilité (failover piloté par la santé des shards).
  • Partitionnement fonctionnel : découper par domaines métier (billing, analytics) plutôt que par zone géographique quand la cohérence locale prime.

#Opérations et observabilité

  • Automatiser les migrations (jobs idempotents, throttling, pré-vérifications d’intégrité).
  • Mesurer le temps de réchauffement des caches après déplacement de shards.
  • Tracer les split/merge pour auditer qui a initié un changement de topologie.
  • Tester les scénarios de « double écriture » pendant les migrations (write mirror + compare).

#Quiz

Avec un anneau de hachage cohérent, que se passe‑t‑il lorsqu’on ajoute un nœud avec de nombreux nœuds virtuels ?
Avec un anneau de hachage cohérent, que se passe‑t‑il lorsqu’on ajoute un nœud avec de nombreux nœuds virtuels ?