BlueStore

BlueStore est l'implémentation de stockage de nouvelle génération pour Ceph. Etant donné que le marché des unités de stockage inclut désormais des unités SSD ou des unités SSD et de la mémoire rémanente via PCI Express ou NVMe, leur utilisation dans Ceph révèle certaines des limitations de l'implémentation du stockage FileStore . Bien que FileStore comporte de nombreuses améliorations pour faciliter le stockage SSD et NVMe, d'autres limitations subsistent. Parmi eux, l'augmentation des groupes de placement reste coûteuse en calcul, et la pénalité d'écriture double reste. Alors que FileStore interagit avec un système de fichiers sur une unité par blocs, BlueStore élimine cette couche d'adressage indirect et consomme directement une unité par blocs brute pour le stockage d'objets. BlueStore utilise le système de fichiers BlueFS très léger sur une petite partition pour ses bases de données k / v. BlueStore élimine le paradigme d'un répertoire représentant un groupe de placement, d'un fichier représentant un objet et de fichiers XATTRs représentant des métadonnées. BlueStore élimine également la double pénalité d'écriture de FileStore, de sorte que les opérations d'écriture sont presque deux fois plus rapides avec BlueStore sous la plupart des charges de travail.

BlueStore stocke les données en tant que:

Données d'objet

Dans BlueStore, Ceph stocke les objets en tant que blocs directement sur une unité par bloc brute. La partie de l'unité par bloc brute qui stocke les données d'objet ne contient PAS de système de fichiers. L'omission du système de fichiers élimine une couche d'indirection et améliore ainsi les performances. Toutefois, une grande partie de l'amélioration des performances de BlueStore provient de la base de données de blocs et du journal d'écriture anticipée.

Bloquer la base de données

Dans BlueStore, la base de données de blocs gère la sémantique d'objet pour garantir la cohérence. L'identificateur unique d'un objet est une clé dans la base de données de blocs. Les valeurs de la base de données de blocs sont constituées d'une série d'adresses de blocs qui font référence aux données d'objet stockées, au groupe de placement de l'objet et aux métadonnées de l'objet. La base de données par blocs peut résider sur une partition BlueFS sur la même unité par bloc brute qui stocke les données d'objet, ou sur une unité par bloc distincte, généralement lorsque l'unité par bloc principale est une unité de disque dur et qu'une unité SSD ou NVMe améliore les performances. La base de données par blocs fournit un certain nombre d'améliorations par rapport à FileStore, à savoir que la sémantique de clé / valeur de BlueStore ne souffre pas des limitations des XATTRs du système de fichiers. BlueStore peut affecter rapidement des objets à d'autres groupes de placement dans la base de données de blocs sans avoir à déplacer des fichiers d'un répertoire à un autre, comme c'est le cas dans FileStore. BlueStore introduit également de nouvelles fonctions. La base de données par blocs peut stocker la somme de contrôle des données d'objet stockées et ses métadonnées, ce qui permet des opérations de total de contrôle de données complètes pour chaque lecture, ce qui est plus efficace que l'épuration périodique pour détecter la pourriture des bits. BlueStore peut compresser un objet et la base de données de blocs peut stocker l'algorithme utilisé pour compresser un objet-en veillant à ce que les opérations de lecture sélectionnent l'algorithme approprié pour la décompression.

Journal d'écriture anticipée

Dans BlueStore, le journal d'écriture anticipée garantit l' atomicité, similaire à la fonctionnalité de journalisation de FileStore. Comme FileStore, BlueStore consigne tous les aspects de chaque transaction. Cependant, le journal d'écriture anticipée BlueStore ou WAL peut exécuter cette fonction simultanément, ce qui élimine la pénalité d'écriture double de FileStore. Par conséquent, BlueStore est presque deux fois plus rapide que FileStore sur les opérations d'écriture pour la plupart des charges de travail. BlueStore peut déployer le WAL sur le même périphérique pour stocker des données d'objet, ou il peut déployer le WAL sur un autre périphérique, généralement lorsque le périphérique de bloc principal est une unité de disque dur et qu'une unité SSD ou NVMe améliore les performances.

Remarque: Il n'est utile de stocker une base de données de blocs ou un journal d'écriture anticipée sur une unité de bloc distincte que si cette dernière est plus rapide que l'unité de stockage principale. Par exemple, les unités SSD et NVMe sont généralement plus rapides que les unités HDD. Le fait de placer la base de données de blocs et le WAL sur des unités distinctes peut également avoir des avantages en termes de performances en raison de différences dans leurs charges de travail.