Les grands systèmes de fichiers distribués avaient traditionnellement besoin de métadonnées indiquant où chaque bloc ou objet résidait. À l'échelle du pétaoctet, ces cartes d'allocation devenaient des problèmes de coordination, de récupération et de rééquilibrage.

La réponse de Ceph fut CRUSH : une fonction de placement pseudo-aléatoire. Les clients et les nœuds de stockage pouvaient calculer l'emplacement d'un objet à partir du nom de l'objet et de la carte du cluster, au lieu d'interroger une table centrale.

L'article OSDI rapportait que Ceph prenait en charge plus de 250 000 opérations de métadonnées par seconde, et la publication CRUSH présentait l'algorithme pour des dizaines ou des centaines de milliers de dispositifs de stockage tout en évitant un répertoire central.

Transformer le placement en une fonction

Une fonction de placement déterministe permet à chaque participant de trouver indépendamment le même objet.

Les pondérations et les règles de domaine de défaillance préservent les contraintes du monde réel, telles que les baies et la taille des dispositifs.

De petits changements de topologie ne déplacent que les données qui doivent l'être, rendant la croissance et les défaillances moins perturbatrices.

La suppression des listes d'allocation réduit la tâche du serveur de métadonnées à l'espace de noms, et non à l'adresse de chaque octet.

À très grande échelle, supprimer la coordination peut compter davantage que l'optimiser ; une fonction déterministe partagée peut remplacer un répertoire mutable partagé.

CRUSH est devenu l'une des idées emblématiques de Ceph et a contribué à faire du projet un système de stockage open source durable. Sa beauté est architecturale : le meilleur répertoire à l'échelle du pétaoctet était l'absence de répertoire.

VÉRIFIEZ LES SOURCES

Les sources

  1. CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data Storage Systems Research Center, UC Santa Cruz · ssrc.us
  2. Ceph: A Scalable, High-Performance Distributed File System USENIX · usenix.org ·