Aller au contenu principal

Architecture Lakebase

info

Bêta

Depuis le 15 juin, Lakebase est disponible en version bêta sur GCP. Voir Region availability pour les régions prises en charge.

Lakebase sépare le stockage du compute. Le moteur Postgres qui exécute vos query est sans état, et vos données résident dans une couche de stockage durable qui persiste indépendamment. Cette séparation est ce qui rend possibles la mise à l'échelle automatique, la mise à l'échelle jusqu'à zéro, les Branch instantanées, les réplicas de lecture et le basculement rapide.

Pour montrer ce que Lakebase change, cette page commence par présenter la conception traditionnelle de base de données sur machine unique à des fins de comparaison, puis explique comment Lakebase sépare cette même conception en couches indépendantes et le rôle de chaque élément.

Comment une base de données traditionnelle est construite

Avant de regarder Lakebase, considérez le modèle qu’il remplace. Une base de données Postgres conventionnelle est un monolithe. Une seule machine exécute le moteur de requête et écrit à la fois le journal d’écriture anticipée (WAL) et les fichiers de données sur un disque connecté à un point de montage local. Traditionnellement, ces disques étaient véritablement locaux, faisant partie d’une même machine, mais à mesure que l’infrastructure a évolué, ils sont souvent devenus des dispositifs de stockage connectés en réseau.

Le WAL et les fichiers de données jouent deux rôles complémentaires :

  • Le WAL accélère les écritures. Postgres ajoute chaque modification au log de manière séquentielle avant d'accuser réception d'un commit, ce qui est rapide et durable sur un disque unique.
  • Les fichiers de données accélèrent les lectures. Postgres matérialise la version actuelle de chaque page dans des fichiers de données, de sorte qu’une query peut lire une ligne sans rejouer le log.

Un monolithe de base de données traditionnel sur une seule machine, où le moteur de query écrit dans un journal de pré-écriture (write-ahead log) et lit à partir de fichiers de données sur le disque local.

L'accès à l'ensemble de vos données via une seule machine présente des inconvénients :

  • La durabilité est directement liée à l'infrastructure physique de cette machine. Vous devez également pré-provisionnement le stockage et prédire la croissance de votre charge de travail, ce qui complique à la fois la gestion des coûts et la planification de la résilience.
  • La haute disponibilité et de nombreux types de mise à l'échelle horizontale nécessitent des clones physiques de l'intégralité de la base de données.
  • En cas de défaillance de cette machine, vous risquez de perdre des données. Des techniques comme le stockage RAID réduisent ce risque, mais la redondance ajoutée peut augmenter considérablement le coût d'exploitation du système.

L’architecture Lakebase

Lakebase conserve les mêmes responsabilités mais les sépare en deux couches indépendantes :

  • Une couche de compute qui exécute Postgres standard et sans état.
  • Une couche de stockage composée de safekeepers, de pageservers et de stockage d'objets cloud.

Les deux rôles du monolithe correspondent directement aux nouveaux composants. Le WAL, qui accélérait les écritures, devient les safekeepers , qui permettent de monter en charge les écritures. Les fichiers de données, qui accéléraient les lectures, deviennent les pageservers , qui permettent de monter en charge les lectures.

L'architecture Lakebase avec une couche de compute Postgres sans état au-dessus d'une couche de stockage composée de safekeepers, de pageservers et de stockage d'objets.

Comme les données résident dans un stockage d’objets cloud plutôt que sur une seule machine, Lakebase fournit un compute élastique et évolutif ainsi que des écritures durables répliquées entre les zones de disponibilité. Il n’y a aucun stockage à provisionner : vous ne payez que pour le stockage que vous consommez, et vous n’avez pas à prévoir de modes de défaillance tels que le manque d’espace disque.

Ce modèle améliore également les performances. Lakebase écrit chaque modification directement vers plusieurs emplacements, évitant ainsi la surcharge liée à la protection traditionnelle contre les écritures fragmentées (torn-write) et à l'alignement des blocs. Comme chaque écriture est déjà effectuée vers plusieurs emplacements, les performances restent constantes, que la haute disponibilité soit activée ou non.

Le tableau suivant fait correspondre chaque partie du monolithe à son équivalent Lakebase.

Monolithe traditionnel

Lakebase

Rôle

Machine unique

Compute sans état

Exécute le moteur de query Postgres

Disque WAL local

Safekeepers

Enregistre durablement chaque modification validée

Fichiers de données locaux

Pageservers et stockage d'objets

Matérialise et stocke les versions de page

Monolithe traditionnel

Lakebase

Rôle

Machine unique

Compute sans état

Exécute le moteur de query Postgres

Disque WAL local

Safekeepers

Enregistre durablement chaque modification validée

Fichiers de données locaux

Pageservers et stockage d'objets

Matérialise et stocke les versions de page

Couche Compute

La couche de compute exécute Postgres. Il ne contient que des états transitoires : les tampons partagés Postgres en mémoire et un cache de compute local pris en charge par un disque local rapide. Il ne possède aucune donnée durable.

Parce que compute ne possède pas d’état durable :

  • Il peut être remplacé, redémarré, mis à l'échelle automatiquement ou dimensionné à zéro sans déplacer ni perdre de données.
  • Au lieu d'écrire sur un système de fichiers local, il Stream le WAL vers la couche de stockage.
  • Plusieurs instances de compute peuvent se connecter à la même couche de stockage, ce qui permet le fonctionnement des réplicas de lecture et du basculement rapide de Lakebase.

Couche de stockage

La couche de stockage est durable et fonctionne indépendamment du compute. Il comporte trois composants.

Safekeepers

Les safekeepers sont le WAL, extrait de la machine unique et rendu hautement disponible. À mesure que Postgres produit des enregistrements WAL, il les Stream vers un groupe de safekeepers qui répliquent le log au sein d'un quorum en utilisant un protocole de consensus basé sur Paxos.

Une transaction est validée lorsqu’un quorum de safekeepers accuse réception de l’enregistrement WAL, et non lorsqu’une seule machine termine un fsync commit. La durabilité provient de la réplication sur plusieurs nœuds plutôt que d’un seul disque.

Pageservers

Les pageservers sont les fichiers de données, extraits et reconstruits à partir du WAL. Un pageserver consomme le Stream WAL provenant des safekeepers et matérialise les versions de page à la demande. Lorsque le compute demande une page à un numéro de séquence de log (LSN) spécifique, le pageserver la reconstruit et la renvoie.

Les pageservers agissent comme un cache à écriture traversante au-dessus du stockage d'objets. Ils persistent de manière asynchrone les pages matérialisées vers le stockage d'objets cloud, et la reconstruction des pages ne bloque pas le commit d'une transaction.

Stockage d'objets cloud

Le stockage d'objets cloud constitue la base de durabilité de l'ensemble de la couche de stockage. Il contient les données de page que les serveurs de pages conservent.

Sur GCP, Lakebase conserve les données dans Google Cloud Storage.

Le stockage d'objets reste en dehors du chemin de query à chaud. Seuls les pageservers y lisent des données. Pour plus de détails sur le fonctionnement de la redondance du stockage et sur les raisons pour lesquelles elle est indépendante du paramètre de haute disponibilité du compute, consultez Architecture de stockage.

Fonctionnement d’une écriture

Une écriture circule du compute à travers la couche de stockage :

  1. Postgres modifie les pages concernées en mémoire et produit des enregistrements WAL.
  2. Le compute Stream les enregistrements WAL vers les safekeepers.
  3. Lorsqu'un quorum de safekeepers accuse réception des enregistrements, la transaction est validée (commit) et le client reçoit une confirmation de succès.
  4. Les Pageservers appliquent le WAL de manière asynchrone et conservent les pages mises à jour dans le stockage d'objets.

Le chemin d’écriture Lakebase, où Postgres streams WAL vers des gardiens de sécurité dont l’accusé de réception du quorum commits la transaction avant que les serveurs de pages ne l’appliquent.

Une transaction est durable dès qu'un quorum de safekeepers possède l'enregistrement WAL, car le log suffit à lui seul pour reconstruire les données. Les pageservers reconstruisent et stockent les pages de données par la suite, en dehors du chemin de commit, afin que les écritures restent rapides sans mettre en péril aucune modification validée.

Comment fonctionne une lecture

Les lectures vérifient une hiérarchie de caches, du plus rapide au plus lent, et s'arrêtent à la première couche qui contient la page :

  1. Pool de tampons (mémoire) : les tampons partagés Postgres dans la RAM du compute.
  2. Cache local de compute : un cache sur disque situé sur le nœud de calcul, dimensionné en fonction de la mémoire du compute.
  3. Pageserver : en cas d'échec du cache, le compute demande la page à un pageserver, qui la reconstruit au LSN demandé.
  4. Stockage d'objets : le pageserver lit en interne à partir du stockage d'objets lorsque cela est nécessaire. Les queries n'atteignent pas directement le stockage d'objets.

La hiérarchie du cache de lecture Lakebase, du plus rapide au plus lent : buffer pool, cache de compute local, pageserver et stockage d'objets.

Ce que cette architecture permet

La séparation du compute sans état et du stockage durable est ce qui rend possibles plusieurs fonctionnalités de Lakebase :

Fonctionnalité

Ce que cela permet

Dimensionnement automatique

Comme le compute est sans état, Lakebase augmente ou diminue la taille du compute en réponse à la charge de travail sans déplacer les données.

Dimensionnement à zéro

Le compute peut être mis en pause complète tandis que le stockage persiste, et les données sont immédiatement disponibles lorsque le compute reprend.

Branches instantanées

Créez une copie isolée et inscriptible de votre base de données en quelques secondes. Comme le branching est une opération de métadonnées de type copy-on-write sur un stockage partagé, il ne duplique aucune donnée.

Réplicas en lecture

Plusieurs instances de compute lisent à partir de la même couche de stockage, de sorte que les réplicas n'ont pas besoin de copies de données et start en quelques secondes.

Requêtes ponctuelles (point-in-time)

Comme la couche de stockage conserve l'historique, le compute peut s'attacher à un point temporel passé et lire la base de données telle qu'elle existait à ce moment-là, sans avoir à copier les données.

Basculement rapide

Le basculement promeut une instance de compute secondaire qui se connecte au stockage existant, sans transfert de données.

RPO = 0 (aucune perte de données validées)

Lakebase enregistre durablement chaque transaction engagée avant de la reconnaître, donc vous ne perdez aucune donnée engagée lorsque le compute échoue, redémarre ou monte en charge à zéro.

Fonctionnalité

Ce que cela permet

Dimensionnement automatique

Comme le compute est sans état, Lakebase augmente ou diminue la taille du compute en réponse à la charge de travail sans déplacer les données.

Dimensionnement à zéro

Le compute peut être mis en pause complète tandis que le stockage persiste, et les données sont immédiatement disponibles lorsque le compute reprend.

Branches instantanées

Créez une copie isolée et inscriptible de votre base de données en quelques secondes. Comme le branching est une opération de métadonnées de type copy-on-write sur un stockage partagé, il ne duplique aucune donnée.

Réplicas en lecture

Plusieurs instances de compute lisent à partir de la même couche de stockage, de sorte que les réplicas n'ont pas besoin de copies de données et start en quelques secondes.

Requêtes ponctuelles (point-in-time)

Comme la couche de stockage conserve l'historique, le compute peut s'attacher à un point temporel passé et lire la base de données telle qu'elle existait à ce moment-là, sans avoir à copier les données.

Basculement rapide

Le basculement promeut une instance de compute secondaire qui se connecte au stockage existant, sans transfert de données.

RPO = 0 (aucune perte de données validées)

Lakebase enregistre durablement chaque transaction engagée avant de la reconnaître, donc vous ne perdez aucune donnée engagée lorsque le compute échoue, redémarre ou monte en charge à zéro.

Comment cette architecture prend en charge le LTAP

Comme Lakebase stocke durablement chaque modification validée dans le stockage d'objets cloud, les mêmes données peuvent servir aux workloads analytiques et aux transactions sans pipeline de réplication distinct. C'est la base du traitement transactionnel et analytique de lac (LTAP), où une copie unique de vos données prend en charge à la fois les moteurs transactionnels et analytiques. Pour savoir comment le LTAP s'appuie sur cette architecture, consultez l'architecture LTAP.

Étapes suivantes

  • Architecture de stockage : découvrez comment fonctionne la redondance du stockage et pourquoi elle est indépendante du paramètre de haute disponibilité du compute. Voir Architecture de stockage.
  • Branches de base de données : découvrez comment les branches utilisent le stockage copy-on-write pour créer des environnements isolés instantanés. See Branch.
  • Réplicas en lecture : ajoutez des instances de compute en lecture seule qui partagent la même couche de stockage. Voir Réplicas en lecture.
  • Concepts fondamentaux : passez en revue l’ensemble des concepts qui rendent Lakebase unique. Voir Concepts fondamentaux.