1 min

Pourquoi la mise à l’échelle horizontale est plus difficile que la verticale

La montée en charge verticale revient souvent à ajouter CPU/RAM. L’horizontale exige coordination, partitionnement, cohérence et plus de travail opérationnel — voici pourquoi c’est plus difficile.

Pourquoi la mise à l’échelle horizontale est plus difficile que la verticale

Mise à l’échelle en langage clair

Mise à l’échelle signifie « traiter plus sans s’effondrer ». Ce « plus » peut être :

  • Plus d’utilisateurs utilisant le produit en même temps
  • Plus de requêtes API par seconde
  • Plus de données stockées et interrogées
  • Plus de tâches en arrière-plan (emails, traitement vidéo, rapports)

Quand on parle de mise à l’échelle, on cherche généralement à améliorer un ou plusieurs de ces points :

  • Capacité : combien de trafic ou de données le système peut gérer.
  • Vitesse : la rapidité de réponse sous charge.
  • Fiabilité : la capacité à rester opérationnel quand quelque chose casse.

Tout cela revient à un thème central : monter en puissance (scale up) préserve la sensation d’un “système unique”, tandis que la mise à l’échelle horizontale transforme votre système en un groupe coordonné de machines indépendantes — et c’est la coordination qui fait exploser la difficulté.

Vertical vs. Horizontal (définitions rapides)

Mise à l’échelle verticale (scale up)

La mise à l’échelle verticale consiste à rendre une machine plus puissante. Vous conservez la même architecture de base, mais vous mettez à niveau le serveur (ou la VM) : plus de cœurs CPU, plus de RAM, des disques plus rapides, un débit réseau supérieur.

Pensez-y comme acheter un plus gros camion : un seul conducteur et un seul véhicule, mais qui transporte plus.

Mise à l’échelle horizontale (scale out)

La mise à l’échelle horizontale consiste à ajouter plus de machines ou d’instances et à répartir le travail entre elles — souvent derrière un équilibreur de charge. Au lieu d’un seul serveur plus puissant, vous exécutez plusieurs serveurs qui coopèrent.

C’est comme utiliser plusieurs camions : vous pouvez déplacer plus de marchandise, mais vous devez gérer la planification, l’acheminement et la coordination.

Qu’est-ce qui déclenche généralement la question ?

Déclencheurs courants :

  • Pics de trafic (campagnes marketing, saisonnalité, croissance virale)
  • Croissance soutenue du produit sur plusieurs mois ou années
  • Jeux de données plus volumineux (plus de clients, plus d’événements, plus d’historique à stocker)

Une nuance importante : la plupart des systèmes réels utilisent les deux

Les équipes montent souvent en puissance d’abord parce que c’est rapide (upgrader la machine), puis passent à l’horizontal quand une seule machine atteint ses limites ou qu’elles ont besoin d’une disponibilité plus élevée. Les architectures matures combinent généralement les deux : des nœuds plus gros et plus nombreux, selon le goulot.

FAQ

Quelle est la différence entre mise à l’échelle verticale et mise à l’échelle horizontale ?

La mise à l’échelle verticale signifie rendre une seule machine plus puissante (plus de CPU/RAM/disque plus rapide). La mise à l’échelle horizontale signifie ajouter davantage de machines et répartir le travail entre elles.

La verticale paraît souvent plus simple parce que votre application se comporte toujours comme « un seul système », tandis que l’horizontale vous oblige à faire coopérer plusieurs systèmes et à maintenir leur cohérence.

Pourquoi la mise à l’échelle horizontale introduit-elle plus de complexité que la verticale ?

Parce qu’à partir du moment où vous avez plusieurs nœuds, il faut une coordination explicite :

  • décider qui gère quel travail
  • éviter le double traitement
  • gérer les délais réseau et les pannes partielles

Une seule machine évite beaucoup de ces problèmes distribués par défaut.

Qu’est-ce que le « coût de coordination » dans un système distribué ?

C’est le temps et la logique nécessaires pour faire en sorte que plusieurs machines se comportent comme une seule :

  • élection de leader et règles de basculement
  • verrous/leases et problèmes de dérive d’horloge
  • éviter les situations de split-brain

Même si chaque nœud est simple, le comportement du système devient difficile à raisonner sous charge et en cas de défaillance.

Pourquoi le sharding et le partitionnement des données sont-ils si difficiles à bien faire ?

Le sharding (partitionnement) répartit les données sur plusieurs nœuds pour qu’aucune machine n’ait à tout stocker/servir. C’est difficile car il faut :

  • router chaque lecture/écriture vers le bon shard
  • rééquilibrer les données quand on ajoute/retire des nœuds
  • gérer les partitions « hot » quand un shard devient le goulot d’étranglement

Cela augmente aussi le travail opérationnel (migrations, backfills, cartographie des shards).

Que signifie « état » et pourquoi est-ce important pour la montée en charge horizontale ?

L’état est tout ce que votre application « se souvient » entre deux requêtes ou pendant un traitement (sessions, caches en mémoire, fichiers temporaires, progression d’un job).

Avec la mise à l’échelle horizontale, les requêtes peuvent arriver sur différents serveurs, donc il faut typiquement un stockage d’état partagé (Redis/bdd) ou accepter des compromis comme les sessions sticky.

Comment éviter que les jobs d’arrière-plan ne s’exécutent deux fois lors d’une montée en charge horizontale ?

Si plusieurs workers peuvent prendre le même job (ou qu’un job est réessayé), vous risquez d’appliquer deux fois la même action (facturation, envoi d’email).

Mitigations courantes :

  • handlers idempotents pour les jobs
  • verrous/leases lors de la prise en charge d’un job
  • déduplication via des IDs uniques de job
  • politiques de retry prudentes avec backoff
Quelle est la différence pratique entre cohérence forte et cohérence éventuelle ?

La cohérence forte signifie que, quand une écriture est confirmée, tous les lecteurs voient immédiatement la nouvelle valeur. La cohérence éventuelle signifie que les mises à jour se propagent avec un délai : certains lecteurs peuvent voir une ancienne valeur pendant un court instant.

Utilisez la cohérence forte pour les données critiques (paiements, soldes, inventaires). La cohérence éventuelle est souvent acceptable pour les données moins sensibles (analytics, recommandations).

Pourquoi les timeouts et les retries deviennent-ils plus problématiques avec la mise à l’échelle horizontale ?

Dans un système distribué, les appels deviennent des appels réseau, ce qui ajoute latence, jitter et nouvelles causes de défaillance.

Principes usuels :

  • définir des timeouts pour éviter les threads bloqués
  • limiter les retries et utiliser backoff exponentiel + jitter
  • ne réessayer que les opérations sûres (idempotentes) pour éviter les effets en double
Qu’est-ce que la « panne partielle » et pourquoi est-ce normal à l’échelle ?

La panne partielle signifie que certains composants sont lents ou cassés tandis que d’autres fonctionnent. Le système peut être « up » mais produire des erreurs, des timeouts ou un comportement incohérent.

On conçoit des réponses comme la réplication, les quorums, les déploiements multi-zone, les disjoncteurs (circuit breakers) et la dégradation gracieuse pour éviter que les pannes ne se propagent.

Comment diagnostiquer les problèmes quand l’application tourne sur de nombreux serveurs ?

Sur plusieurs machines, les preuves sont fragmentées : logs, métriques et traces sont répartis.

Bonnes pratiques :

  • utiliser des IDs de corrélation de bout en bout
  • adopter le traçage distribué pour suivre le parcours d’une requête
  • alerter sur les signaux de saturation (CPU, profondeur des queues, pools de connexions), pas seulement sur les taux d’erreur

Related posts