Untersuchen der von Citus bereitgestellten verteilten Funktionen

Abgeschlossen

Um eine Datenbankplattform bereitzustellen, die die Anforderungen der Woodgrove Bank erfüllt, hat Ihr Team beschlossen, den lokalen PostgreSQL-Server mithilfe von Azure Cosmos DB for PostgreSQL zu einer verteilten Datenbank mit mehreren Knoten zu migrieren. Azure Cosmos DB for PostgreSQL, das vom Citus Data-Team erstellt wurde, kombiniert die Vorteile von PostgreSQL, der Citus-Erweiterung auf PostgreSQL und einer vollständig verwalteten Database-as-a-Service-Struktur in Azure.

Um die zusätzlichen Funktionen zu aktivieren, die von Woodgrove Bank angefordert werden, planen Sie, mehrere der von Azure Cosmos DB for PostgreSQL unterstützten PostgreSQL-Erweiterungen zu verwenden.

Was sind PostgreSQL-Erweiterungen?

In PostgreSQL ist eine Erweiterung ein Paket, das mehrere verwandte SQL-Objekte bündelt. Die Erweiterung bietet neue Datentypen, bessere Überwachung, Wrapper für Fremddaten, erweiterte Sicherheitsfunktionen und sogar neue Sprachen zum Schreiben gespeicherter Prozeduren. Das Packen verwandter Objekte auf diese Weise kann die Datenbankverwaltung erheblich vereinfachen.

Der Hauptvorteil der Verwendung einer Erweiterung ist, dass PostgreSQL versteht, dass die Objekte, die in der Erweiterung enthalten sind, zusammengehören, anstatt nur ein SQL-Skript auszuführen, um eine Reihe von „losen“ Objekten in Ihre Datenbank zu laden. Die in dem Erweiterungspaket enthaltenen SQL-Objekte können mit einem einzigen Befehl aus Ihrer Datenbank geladen oder daraus entfernt werden. Nachdem sie in die Datenbank geladen wurden, können Erweiterungen wie eingebaute Funktionen funktionieren, so dass Sie die Möglichkeiten wie native PostgreSQL-Funktionen nutzen können.

Was ist Citus?

Citus bietet die primären Leistungs- und Skalierbarkeitsfeatures von Azure Cosmos DB for PostgreSQL. In dieser Lektion werden Sie die Erweiterung und ihre Funktionen untersuchen, um besser zu verstehen, wie sie der Woodgrove Bank helfen wird, ihre Ziele in Bezug auf Leistung und Skalierbarkeit zu erreichen.

Citus ist eine Open-Source-Erweiterung für PostgreSQL, die erstellt wurde, um die Skalierung über einen Cluster von PostgreSQL-Servern zu ermöglichen. Citus ist so konzipiert, dass weiterhin herkömmliche relationale Datenbankfunktionen wie Transaktionen, Verknüpfungen und Fremdschlüssel bereitgestellt werden. Die Citus-Erweiterung ermöglicht diese Funktionalität durch Transformieren von PostgreSQL in eine hochskalierbare verteilte Datenbank mit Features wie einer verteilten SQL-Engine, Sharding, Referenztabellen und verteilten Tabellen.

Diagram of an Azure Cosmos DB for PostgreSQL cluster, with multiple worker nodes and a single coordinator node.

Das Diagramm enthält auch Pfeile auf der rechten und linken Seite, die zeigen, wie zusätzliche Knoten hinzugefügt werden können, um die Größe zu erhöhen.

Skalieren von knotenübergreifenden Computevorgängen

Citus erweitert die Funktionalität von PostgreSQL, indem mehrere PostgreSQL-Server, die als Knoten bezeichnet werden, gruppiert werden können. Jeder Cluster besteht aus einem Koordinatorknoten und mehreren Workerknoten, wodurch Compute und Arbeitsspeicher auf zahlreichen PostgreSQL-Servern in der Cloud skaliert werden können. Zusammen können Cluster mehr Daten enthalten und mehr CPU-Kerne als einen einzelnen Server verwenden, wodurch schnellere Antworten zu großen Datasets auch regionsübergreifend bereitgestellt werden.

Die kontaktlose Zahlungsanwendung der Woodgrove Bank erfordert die Fähigkeit, Computeressourcen einfach hinzuzufügen, um die Anforderungen ihrer umfangreichen Workloads zur Benutzeranalyse zu erfüllen und ihre Kunden effizient zu bedienen. Azure Cosmos DB for PostgreSQL ermöglicht es der Bank, ihre Datenbank regionsübergreifend zu skalieren, um leistungsfähigere Abfragen bereitzustellen, während sie ihre Analyseworkload über mehrere Knoten verteilen und so mehr Arbeitsspeicher und CPU-Kerne nutzen können.

Datenverteilung

Mit der Citus-Erweiterung können Daten über Knoten im Cluster verteilt werden, da Sie verteilte Tabellen erstellen können. Verteilte Tabellen verbessern die Leistung durch die horizontale Partitionierung von Tabellenzeilen über Workerknoten. Jede Zeile wird einer logischen Gruppe zugewiesen, die als Shard bezeichnet wird. Jede Zeile befindet sich in genau einem Shard, und jeder Shard kann mehrere Zeilen enthalten. Durch die knotenübergreifende Verteilung von Daten können Sie mehr Speicherplatz nutzen, als auf einem einzelnen Server verfügbar wäre.

Metadatentabellen, die sich auf dem Koordinatorknoten befinden, speichern Informationen darüber, welche Shards auf welchem Knoten gespeichert werden. Die Zuordnung von Shards zu Workerknoten wird als Shardplatzierung bezeichnet. Die Shardplatzierung ermöglicht leistungsfähige Abfragevorgänge für verteilte Daten in der Datenbank. Diese Metadatentabellen verfolgen die DNS-Namen und die Integrität der Workerknoten zusätzlich zur knotenübergreifenden Datenverteilung. Während der Abfrageausführung entscheidet der Koordinator, welche Aktion ausgeführt werden soll, indem er auf diese Metadatentabellen verweist. Der Koordinatorknoten prüft die Metadaten-Tabellen, um festzustellen, ob die Daten auf einem einzelnen Knoten oder auf mehreren Knoten gespeichert sind, und leitet die Abfragen dann nach Bedarf an die Workerknoten weiter.

Die Leistungsfähigkeit der parallelisierten Abfrageausführung

Die Citus-Kombination aus Parallelität, mehr Daten im Speicher und höherer E/A-Bandbreite kann zu erheblichen Leistungsverbesserungen bei mandantenfähigen SaaS-Anwendungen, kundenorientierten Echtzeit-Analyse-Dashboards und Workloads mit Zeitreihen führen.

Durch das Erstellen verteilter Tabellen in der Woodgrove Bank-Datenbank können Sie Workloads auf mehrere Workerknoten verteilen und Citus anwenden, um mehr Rechenleistung zu nutzen. Die Datenbankentwickler*innen der Woodgrove Bank müssen keine neuen Methoden zum Abfragen von Daten lernen, da verteilte Tabellen wie normale Tabellen für SQL-Anweisungen aussehen. Verteilte Tabellen werden jedoch horizontal über Workerknoten verteilt, und durch das Speichern verschiedener Zeilen in verschiedenen Workern kann der Koordinatorknoten die Abfrageausführung parallelisieren.

Der Koordinator erstellt Abfragefragmente, die auf bestimmte Shards abzielen, und sendet diese Fragmente dann zur Ausführung an den entsprechenden Worker. Diese Abfragefragmente werden gleichzeitig auf den Workerknoten ausgeführt, sodass das System die Workload gleichmäßig zwischen vielen Servern parallelisieren kann.

Animation of the flow of a query arriving from an application.

In der Animation wird die Abfrage vom Koordinatorknoten anhand von Metadaten-Tabellen verarbeitet und die Abfrage-Fragmente werden dann zur Ausführung an die Workerknoten gesendet. Die Ergebnisse der Abfrageausführung auf den Workerknoten werden an den Koordinator zurückgegeben, aggregiert und an die Anwendung zurückgegeben.