Si vous avez déjà plongé dans de la documentation de base de données (que ce soit du relationnel ou non-relationnel), vous avez sûrement déjà aperçu ces deux termes : "réplication" et "sharding"

En français on traduirait "sharding" par "fragmentation", mais qu'est-ce que cela signifie réellement ?

À quoi ça sert ?

La principale raison pour choisir ces stratégies de sauvegarde des données est de mettre en place un "scaling horizontal" ou "passage à l'échelle horizontal".

Pour la plupart des systèmes informatiques, il sera moins cher d'investir dans deux petites machines de performance P1 que dans une grosse machine deux fois plus puissante P2.

C'est le même problème pour les bases de données : lorsque votre application grossie à tel point que le système commence à ralentir, il est temps d'arrêter de faire grossir la machine (scaling vertical) et de commencer à diviser la charge dans de multiple machines (scaling horizontal).

Méthode n°1 : La réplication

Cette stratégie consiste simplement à faire coopérer un certain nombre de machines (disons 3 pour l'exemple), d'en promouvoir une au rang de primaire et les autres au rang de secondaires.

À noter qu'il peut encore être courant de tomber sur les termes "master" et "slaves" pour désigner les deux rôles de ces machines.

Lorsqu'une nouvelle donnée sera sauvegardée sur le serveur primaire, ce dernier propagera cette nouvelle information aux autres machines pour qu'elles "répliquent" le nouveau schéma des données.

La réplication est donc simplement une copie intelligente des données.

L'avantage est d'avoir plusieurs machines différentes (mais synchronisées) sur lesquelles votre application pourra aller lire de la donnée, ce qui permet de supporter plus de charge en lecture.

Néanmoins, l'inconvénient est de devoir passer par le serveur primaire pour écrire ou modifier une donnée, le processus d'écriture, lui, ne gagne pas en efficacité, mais en général la charge sur votre système vient principalement du nombre de lectures concurrentes.

De plus, si le serveur principal tombe, il faudra attendre que les secondaires élisent un nouveau primaire avant de pouvoir écrire à nouveau, ce qui peut prendre du temps.

Méthode n°2 : La fragmentation

Ici il n'y a pas de relation hiérarchique entre les machines, elles sont toutes sur un pied d'égalité et possèdent chacune une partie des données.

Prenons un répertoire par exemple : la machine 1 contiendrait les noms de A à I, la machine 2 de J à R et la machine 3 de S à Z.

Ici on améliore la performance en lecture ET en écriture car chaque machine est responsable de ses propres données. Attention néanmoins, il faut que la fragmentation soit bien pensée car si toutes les données les plus populaires sont sur la même machine, cette dernière risque de subir plus de charge que les autres.

Mais le vrai point faible de cette approche est que si l'une des machines tombe, c'est toute une partie des données qui est inaccessible, même en lecture !

Méthode 3 : Hybride

La troisième méthode, la plus coûteuse mais aussi la plus robuste consiste à d'abord fragmenter ses données, pour ensuite répliquer chacun des fragment.

Potentiellement, cela veut aussi dire avoir 9 machines au total (dans notre exemple), ce qui en fait une architecture beaucoup plus complexe !

Conclusion

Pour choisir la meilleure solution pour votre projet, il faut savoir ce qui est le plus critique pour vous : la disponibilité, la consistence ou le partitionnement, sachant que vous ne pouvez choisir que deux des options.

Ce principe des bases de données distribuées s'appelle le théorème CAP, que je vous laisserai découvrir si le sujet vous intéresse !

J'espère que cet article vous aura été utile, et à bientôt sur le blog !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Jaron Mobley sur Unsplash