In diesem Artikel wird ein Beispiel für eine Streaminglösung vorgestellt, die vollständig verwaltete Azure-Datendienste verwendet.
Architektur
Laden Sie eine [Visio-Datei][Visio-Version des Architekturdiagramms] dieser Architektur herunter.
Workflow
Die Event Hubs für Apache Kafka-Feature streamen Ereignisse von Kafka-Produzenten.
Apache Spark nutzt Ereignisse. Azure Kubernetes Service (AKS) stellt eine verwaltete Umgebung für die Apache Spark-Aufträge bereit.
Eine Anwendung, die Azure Cosmos DB for Apache Cassandra verwendet, schreibt Ereignisse in Cassandra. Diese Datenbank dient als Speicherplattform für Ereignisse. AKS hostet die Microservices, die in Cassandra schreiben.
Das Feature „Änderungsfeed“ von Azure Cosmos DB verarbeitet Ereignisse in Echtzeit.
Geplante Anwendungen führen eine batchorientierte Verarbeitung von Ereignissen aus, die in Cassandra gespeichert sind.
Speicher mit Verweisdaten reichern die Ereignisinformationen an. Batchorientierte Anwendungen schreiben die angereicherten Ereignisinformationen in PostgreSQL. Typische Verweisdatenspeicher sind:
- [Azure Data Lake Storage][Einführung in Azure Data Lake Storage Gen2], die Daten in offenen Formaten wie [Parkett][Parkett] speichern können.
- Relationale Open-Source-Datenspeicher wie [PostgreSQL][Was ist Azure-Datenbank für PostgreSQL?] und [MySQL][Was ist Azure-Datenbank für MySQL?].
Eine batchorientierte Anwendung verarbeitet Cassandra-Daten. Diese Anwendung speichert die verarbeiteten Daten in Azure Database for PostgreSQL. Dieser relationale Datenspeicher stellt Daten für Downstreamanwendungen bereit, die angereicherte Informationen erfordern.
Berichterstellungsanwendungen und -tools analysieren die PostgreSQL-Datenbankdaten. [Power BI][Was ist Power BI?] stellt mithilfe des Azure Database for PostgreSQL-Connectors eine Verbindung mit der Datenbank bereit. Dieser Berichterstellungsdienst zeigt dann umfangreiche Visualisierungen der Daten an.
Azure Cache for Redis stellt einen In-Memory-Cache bereit. In dieser Lösung enthält der Cache Daten zu kritischen Ereignissen. Eine Anwendung speichert Daten im Cache und ruft Daten aus dem Cache ab.
Websites und andere Anwendungen verwenden die zwischengespeicherten Daten, um die Antwortzeiten zu verbessern. Manchmal sind keine Daten im Cache verfügbar. In diesen Fällen verwenden diese Anwendungen das [Cache-Aside-Muster][Cache-Aside-Muster] oder eine ähnliche Strategie zum Abrufen von Daten aus Cassandra in Azure Cosmos DB.
Komponenten
Event Hubs ist eine vollständig verwaltete Streamingplattform, die Millionen von Ereignissen pro Sekunde verarbeiten kann. Event Hubs bietet einen [endpunkt][Verwenden von Azure Event Hubs aus Apache Kafka-Anwendungen] für Apache Kafka, eine weit verbreitete Open-Source-Streamverarbeitungsplattform. Wenn Organisationen das Endpunktfeature verwenden, müssen sie keine Kafka-Cluster für die Streamverarbeitung erstellen und verwalten. Stattdessen können sie von der vollständig verwalteten Kafka-Implementierung profitieren, die Event Hubs bietet.
[Azure Cosmos DB][Willkommen bei Azure Cosmos DB] ist eine vollständig verwaltete NoSQL- und relationale Datenbank, die eine Multimasterreplikation bietet. Azure Cosmos DB unterstützt Open-Source-APIs für viele Datenbanken, Sprachen und Plattformen. Beispiele:
- Apache Cassandra:
- [Gremlin][Gremlin Graph Traversal Machine and Language].
- [MongoDB][MongoDB].
Über die [Azure Cosmos DB für Apache Cassandra][Einführung in Azure Cosmos DB für Apache Cassandra] können Sie mithilfe von Apache Cassandra-Tools, -Sprachen und -Treibern auf Azure Cosmos DB-Daten zugreifen. Apache Cassandra ist eine Open-Source-NoSQL-Datenbank, die sich gut für hohe, schreibintensive Workloads eignet.
Azure Kubernetes Service (AKS) ist ein hoch verfügbarer, sicherer und vollständig verwalteter Kubernetes-Service. [Kubernetes][Kubernetes] ist eine sich schnell entwickelnde Open-Source-Plattform zum Verwalten von containerisierten Workloads. AKS hostet Open-Source-Engines für die Big Data-Verarbeitung wie Apache Spark. Mit AKS können Sie umfangreiche Streamverarbeitungsaufträge in einer verwalteten Umgebung ausführen.
Azure Database for PostgreSQL ist ein vollständig verwalteter relationaler Datenbankdienst. Sie bietet [Hohe Verfügbarkeit, flexible Skalierung, Patching und andere Verwaltungsfunktionen][Was ist Azure-Datenbank für PostgreSQL?] für PostgreSQL. [PostgreSQL][PostgreSQL] ist ein weit verbreitetes open-source relationales Datenbankmanagementsystem.
Azure Cache for Redis bietet einen auf der Redis-Software basierenden In-Memory-Datenspeicher. [Redis][Redis] ist ein beliebter Open-Source-Speicher im Arbeitsspeicher. Sitzungsspeicher, Inhaltscaches und andere Speicherkomponenten verwenden Redis zur Verbesserung der Leistung und Skalierbarkeit. Azure Cache for Redis bietet Open-Source-Funktionen von Redis als vollständig verwaltetes Angebot.
Alternativen
Sie können die Open Source-kompatiblen Produkte und Dienste in dieser Lösung durch andere ersetzen. Ausführliche Informationen zu open-source-Diensten, die in Azure verfügbar sind, finden Sie unter [Open Source on Azure][Open Source on Azure].
Szenariodetails
Diese Streaminglösung besteht aus vollständig verwalteten Azure-Datendiensten, die Open-Source-Engines ausführen:
- Azure Event Hubs bietet eine Kafka-Implementierung für die Streamerfassung.
- Azure Cosmos DB unterstützt die Ereignisspeicherung in Cassandra.
- AKS hosts [Kubernetes][Kubernetes] microservices for stream processing.
- Die Azure-Datenbank für PostgreSQL verwaltet die relationale Datenspeicherung in [PostgreSQL][PostgreSQL].
- Der Azure-Cache für Redis verwaltet [Redis][Redis] speicherinterne Datenspeicher.
Open-Source-Technologien bieten viele Vorteile. Organisationen können z. B. für Folgendes Open-Source-Technologien verwenden:
- Migrieren vorhandener Workloads.
- Nutzen der umfassenden Open-Source-Community.
- Begrenzen der Abhängigkeit von Anbietern.
Indem Open-Source-Technologien zugänglich gemacht werden, helfen Azure-Tools und -Dienste Organisationen dabei, diese Vorteile zu nutzen und die Lösungen ihrer Wahl zu entwickeln.
Diese Lösung verwendet vollständig verwaltete [Platform as a Service (PaaS)][Was ist PaaS?] Finanzdienstleistungen. Daher übernimmt Microsoft die Verarbeitung von Patches, Wartungen im Rahmen der Vereinbarung zum Servicelevel (SLA, Service Level Agreement) und andere Verwaltungsaufgaben. Ein weiterer Vorteil ist die native Integration in die Azure-Sicherheitsinfrastruktur.
Mögliche Anwendungsfälle
Diese Lösung gilt für verschiedene Szenarien:
- Verwenden von Azure PaaS-Diensten zum Erstellen moderner Streaminglösungen, die Open-Source-Technologien verwenden
- Migrieren von Open-Source-Lösungen für die Datenstromverarbeitung zu Azure
Überlegungen
Diese Überlegungen beruhen auf den Säulen des Azure Well-Architected Frameworks, d. h. einer Reihe von Grundsätzen, mit denen die Qualität von Workloads verbessert werden kann. Weitere Informationen finden Sie unter Microsoft Azure Well-Architected Framework.
Entwerfen und implementieren Sie jeden Dienst unter Berücksichtigung bewährter Methoden. Richtlinien für jeden Dienst finden Sie auf der Microsoft-Dokumentationswebsite. Überprüfen Sie auch die Informationen in den folgenden Abschnitten:
Leistung
Implementieren Sie [Verbindungspooling für Azure-Datenbank für PostgreSQL][Bewährte Methoden für die Verwendung von Azure Database for PostgreSQL – Connection Pooling]. Sie können eine Verbindungspoolingbibliothek innerhalb der Anwendung verwenden. Sie können auch einen Verbindungspooler wie [PgBouncer][PgBouncer] oder [Pgpool][Pgpool Wiki] verwenden. Das Herstellen einer Verbindung mit PostgreSQL ist ein aufwendiger Vorgang. Mit dem Verbindungspooling können Sie eine Verschlechterung der Anwendungsleistung vermeiden. PgBouncer ist [integriert][PgBouncer in Azure Database for PostgreSQL Flexible Server] in Azure Database for PostgreSQL Flexible Server.
Konfigurieren Sie Azure Cosmos DB für Apache Cassandra für eine optimale Leistung, indem Sie eine geeignete [Partitionierungsstrategie][Partitionierung in Azure Cosmos DB für Apache Cassandra] verwenden. Entscheiden Sie, ob beim Partitionieren von Tabellen ein Primärschlüssel für ein einzelnes Feld, ein zusammengesetzter Primärschlüssel oder ein zusammengesetzter Partitionsschlüssel verwendet werden soll.
Skalierbarkeit
Berücksichtigen Sie Ihre Streaminganforderungen bei der Auswahl einer [Event Hubs-Stufe][Event Hubs-Preise]:
- Berücksichtigen Sie für mittlere Durchsatzanforderungen von weniger als 120 MBps die [Premium-Stufe][Übersicht über Event Hubs Premium (Vorschau)]. Dieser Tarif wird elastisch skaliert, um die Streaminganforderungen zu erfüllen.
- Berücksichtigen Sie für High-End-Streaming-Workloads mit einem Ingress von Gigabyte an Daten die [Dedizierte Ebene][Übersicht über Event Hubs Dedicated]. Dieser Tarif ist ein Angebot für einzelne Mandanten mit einer garantierten Kapazität. Sie können dedizierte Cluster hoch- und herunterskalieren.
Erwägen Sie [automatisch bereitgestellter Durchsatz][Erstellen von Azure Cosmos-Containern und -Datenbanken mit Autoskalendurchsatz] für Azure Cosmos DB, wenn Ihre Workloads unvorhersehbar und spiky sind. Sie können Azure Cosmos DB für die Verwendung von manuell bereitgestelltem Durchsatz oder mit Autoskalierung bereitgestelltem Durchsatz konfigurieren. Bei der Autoskalierung skaliert Azure die Anforderungseinheiten pro Sekunde automatisch und sofort gemäß Ihrer Nutzung.
Sicherheit
Sicherheit bietet Schutz vor vorsätzlichen Angriffen und dem Missbrauch Ihrer wertvollen Daten und Systeme. Weitere Informationen finden Sie unter Übersicht über die Säule „Sicherheit“.
Verwenden Sie [Azure Private Link][Was ist azure Private Link?] um Azure-Dienste teil Ihres virtuellen Netzwerks zu machen. Wenn Sie Private Link verwenden, fließt der Datenverkehr zwischen den Diensten und Ihrem Netzwerk über den Azure-Backbone, ohne das öffentliche Internet zu durchlaufen. Die Azure-Dienste in dieser Lösung unterstützen Private Link für ausgewählte SKUs.
Überprüfen Sie die Sicherheitsrichtlinien Ihrer Organisation. Mit Azure Cosmos DB for Apache Cassandra ermöglichen Schlüssel den Zugriff auf Ressourcen wie Schlüsselräume und Tabellen. Diese Schlüssel werden in der Azure Cosmos DB-Instanz gespeichert. Ihre Sicherheitsrichtlinien erfordern möglicherweise, dass Sie [diese Schlüssel an einen Schlüsselverwaltungsdienst weitergeben][Sichere Azure Cosmos-Schlüssel mit Azure Key Vault] wie Azure Key Vault. Stellen Sie außerdem sicher, dass [Schlüsseldrehung und Regeneration][Schlüsseldrehung und Regeneration] gemäß den Richtlinien Ihrer Organisation erfüllt sind.
Resilienz
Erwägen Sie die Verwendung von Verfügbarkeitszonen, um unternehmenskritische Anwendungen vor Rechenzentrumsausfällen zu schützen. Die Dienste dieser Lösung unterstützen Verfügbarkeitszonen für ausgewählte SKUs in aktivierten Regionen der Verfügbarkeitszone. Aktuelle Informationen hierzu finden Sie in der Liste der Dienste, die Verfügbarkeitszonen unterstützen.
Kostenoptimierung
Bei der Kostenoptimierung geht es um die Suche nach Möglichkeiten, unnötige Ausgaben zu reduzieren und die Betriebseffizienz zu verbessern. Weitere Informationen finden Sie unter Übersicht über die Säule „Kostenoptimierung“.
Verwenden Sie den Azure-Preisrechner, um die Kosten für diese Lösung abzuschätzen. Beachten Sie außerdem Folgendes:
[Event Hubs][Event Hubs-Preise] sind in den Stufen "Basic", "Standard", "Premium" und "Dedicated" verfügbar. Der „Premium“- oder „Dedicated“-Tarif eignet sich am besten für umfangreiche Streamingworkloads. Sie können den Durchsatz skalieren. Erwägen Sie daher, klein zu beginnen und dann bei steigendem Bedarf hochzuskalieren.
Azure Cosmos DB bietet zwei Modelle:
- Ein bereitgestelltes Durchsatzmodell, das sich ideal für anspruchsvolle Workloads eignet. Dieses Modell ist in zwei Kapazitätsverwaltungsoptionen verfügbar: „Standard“ und „Autoskalierung“.
- Ein serverloses Modell, das sich gut für die Ausführung kleiner Workloads mit Lastspitzen eignet.
Ein AKS-Cluster besteht aus einer Gruppe von Knoten oder virtuellen Computern (VMs), die in Azure ausgeführt werden. Die Kosten der Compute-, Speicher- und Netzwerkkomponenten machen die Hauptkosten eines Clusters aus.
Azure Database for PostgreSQL ist in den Dienstebenen „Einzelserver“ und „Flexibler Server“ verfügbar. Verschiedene Dienstebenen sind für unterschiedliche Szenarien geeignet, z. B. vorhersagbare und burstfähige Workloads sowie Hochleistungsworkloads. Die Kosten hängen hauptsächlich von der Auswahl der Computeknoten und der Speicherkapazität ab. Für neue Workloads sollten Sie die Flexible Server-Ebene auswählen, da sie über eine breitere Palette von [unterstützten Funktionen][Vergleich zwischen Einzelserver und flexiblem Server] auf der Ebene "Einzelserver" verfügt. Beachten Sie auch, dass Single Server auf dem Weg zur Ausmusterung ist.
Azure Cache for Redis ist in mehreren Tarifen verfügbar. Diese Tarife bieten Caches zwischen 250 MB und mehreren TB. Neben der Größe wirken sich auch noch andere Anforderungen auf die Auswahl des Tarifs aus:
- Clustering
- Persistenz
- Aktive Georeplikation
Bereitstellen dieses Szenarios
Beachten Sie folgende Punkte, wenn Sie diese Lösung bereitstellen:
Wenn Sie Event Hubs für Kafka bereitstellen, lesen Sie [Schnellstart: Datenstreaming mit Event Hubs mithilfe des Kafka-Protokolls][Schnellstart: Datenstreaming mit Event Hubs mithilfe des Kafka-Protokolls]. Dieser Artikel bietet die folgenden Informationen:
- Senden und Empfangen von Nachrichten mit Kafka in Event Hubs
- Beispielcode für eine Veröffentlichungsanwendung
- Umstellen vorhandener Kafka-Anwendungen auf Event Hubs für Kafka durch Vornahme von Konfigurationsänderungen
Hinsichtlich Apache Spark:
- Informationen zum Erstellen einer einfachen Spark-Anwendung finden Sie unter [Verbinden Ihrer Apache Spark-Anwendung mit Azure Event Hubs][Verbinden Ihrer Apache Spark-Anwendung mit Azure Event Hubs].
- Informationen zum Hosten der Spark-Anwendung auf AKS finden Sie unter [Ausführen von Apache Spark-Aufträgen auf AKS][Ausführen von Apache Spark-Aufträgen auf AKS].
Erwägen Sie die Verwendung einer Java-Anwendung, um Ereignisse in Cassandra zu schreiben. Weitere Informationen finden Sie unter [Schnellstart: Erstellen einer Java-App zum Verwalten von Azure Cosmos DB für Apache Cassandra-Daten (v4 Driver)][Schnellstart: Erstellen einer Java-App zum Verwalten von Azure Cosmos DB für Apache Cassandra-Daten (v4 Driver)].
Wenn Sie den [Azure Cosmos DB-Änderungsfeed][Änderungsfeed in Azure Cosmos DB] verwenden, lesen Sie [Änderungsfeed in Azure Cosmos DB für Apache Cassandra][Änderungsfeed in Azure Cosmos DB für Apache Cassandra] für diese Informationen:
- Verwenden von Abfrage-Prädikaten in [Cassandra Query Language (CQL)][Cassandra Query Language] zum Abfragen der Änderungsfeed-API
- Beispielcode für eine Java-Anwendung
Informationen zur Verarbeitung der Ereignisse, die Sie in Cassandra gespeichert haben, finden Sie unter [Lernprogramm: Abfragen von Daten aus Azure Cosmos DB für Apache Cassandra][Lernprogramm: Abfragedaten aus Azure Cosmos DB für Apache Cassandra]. Dieser Artikel enthält auch Java-Beispielcode für die Verwendung von CQL-Befehlen zum Abrufen von Daten aus Tabellen.
Informationen zum Schreiben von Daten in Azure Database for PostgreSQL mit einer batchorientierten Anwendung finden Sie unter [Schnellstart: Verwenden von Java und ODBC mit Azure Database for PostgreSQL][Schnellstart: Verwenden von Java und DATABASE mit Azure Database for PostgreSQL]. Dieser Artikel enthält auch Java-Beispielcode zum Speichern von Daten.
Informationen zum Speichern und Abrufen von Daten mit Azure Cache für Redis finden Sie unter [Schnellstart: Verwenden von Azure Cache für Redis in Java][Schnellstart: Verwenden des Azure-Caches für Redis in Java]. Dieser Artikel enthält auch Java-Beispielcode zum Zugreifen auf einen Cache.
Beitragende
Dieser Artikel wird von Microsoft aktualisiert und gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:
Hauptautor:
- Ajit Ananthram | Cloud Solution Architect
Nächste Schritte
- Apache Kafka-Entwicklerleitfaden für Azure Event Hubs
- [Häufig gestellte Fragen zu Azure Cosmos DB für Apache Cassandra][Häufig gestellte Fragen zu Azure Cosmos DB für Apache Cassandra]
- Bewährte Methoden für die Entwicklung von Anwendungen mit Azure Database for PostgreSQL
- Häufig gestellte Fragen zu Azure Cache for Redis
Zugehörige Ressourcen
Informationen zu verwandten Lösungen finden Sie in den folgenden Informationen:
- Entwurf der Analysearchitektur
- [Auswählen eines analytischen Datenspeichers in Azure][Auswählen eines analytischen Datenspeichers in Azure]
- [Auswählen einer Datenanalysetechnologie in Azure][Auswählen einer Datenanalysetechnologie in Azure]
- Azure Kubernetes bei der Ereignisstromverarbeitung
- [Datenstreaming mit AKS][Datenstreaming mit AKS]
[Cache-Aside Muster]: .. /.. /patterns/cache-aside.yml The [Cassandra Query Language (CQL)]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Cassandra Query Language]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Change feed in Azure Cosmos DB]: /azure/cosmos-db/change-feed [Change feed in Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-change-feed?tabs=java [Choose an analytical data store in Azure]: .. /.. /data-guide/technology-choices/analytical-data-stores.md [Wählen Sie eine Datenanalysetechnologie in Azure]: .. /.. /data-guide/technology-choices/analysis-visualizations-reporting.md [Verbinden Sie Ihre Apache Spark-Anwendung mit Azure Event Hubs]: /azure/event-hubs/event-hubs-kafka-spark-tutorial [Create Azure Cosmos containers and databases with autoscale throughput]: /azure/cosmos-db/provision-throughput-autoscale [Data streaming with AKS]: .. /.. /solution-ideas/articles/data-streaming-scenario.yml [Event Hubs pricing]: https://azure.microsoft.com/pricing/details/event-hubs [Häufig gestellte Fragen zu Azure Cosmos DB für Apache Cassandra]: /azure/cosmos-db/cassandra-faq Die [Gremlin Graph Traversal Machine and Language] ]: https://tinkerpop.apache.org/gremlin.html [Gremlin Graph Traversal Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Einführung in Azure Cosmos DB für Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-introduction [Einführung in Azure Data Lake Storage Gen2]: /azure/storage/blobs/data-lake-storage-introduction [Key rotation and regeneration]: /azure/cosmos-db/secure-access-to-data?tabs=using-primary-key#key-rotation [Kubernetes]: https://kubernetes.io [MongoDB]: https://www.mongodb.com [Open source on Azure]: https://azure.microsoft.com/overview/open-source/https://www.mongodb.com [Open source on Azure]: https://kubernetes.io [Übersicht über Event Hubs Dedicated]: /azure/event-hubs/event-hubs-dedicated-overview [Overview of Event Hubs Premium (Preview)]: /azure/event-hubs/event-hubs-premium-overview [Laminat]: https://parquet.apache.org [Partitioning in Azure Cosmos DB für Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-partitioning [Performance best practices for using Azure Database for PostgreSQL – Connection Pooling]: https://azure.microsoft.com/blog/performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling [PgBouncer]: https://www.pgbouncer.org [Pgpool Wiki]: https://www.pgpool.net/mediawiki/index.php/Main_Page [PostgreSQL]: https://www.postgresql.org [Schnellstart: Erstellen einer Java-App zum Verwalten von Azure Cosmos DB für Apache Cassandra-Daten (v4 Driver)]: /azure/cosmos-db/cassandra/manage-data-java-v4-sdk [Schnellstart: Datenstreaming mit Event Hubs mit dem Kafka-Protokoll]: /azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs [Schnellstart: Verwenden des Azure-Caches für Redis in Java]: /azure/azure-cache-for-redis/cache-java-get-started [Schnellstart: Verwenden von Java und SHAPES mit Azure-Datenbank für PostgreSQL]: /azure/postgresql/flexible-server/connect-java?tabs=passwordless [Redis]: https://redis.io [Ausführen von Apache Spark-Aufträgen auf AKS]: /azure/aks/spark-job [Secure Azure Cosmos keys using Azure Key Vault]: /azure/cosmos-db/access-secrets-from-keyvault [Lernprogramm: Abfragen von Daten aus Azure Cosmos DB für Apache Cassandra]: /azure/cosmos-db/cassandra/query-data [Verwenden von Azure Event Hubs aus Apache Kafka applications]: /azure/event-hubs/event-hubs-for-kafka-ecosystem-overview [Visio-Version von Architekturdiagramm]: https://arch-center.azureedge.net/US-1874059-open-source-data-engine-stream-processing-architecture.vsdx [Willkommen bei Azure Cosmos DB]: /azure/well-architected/service-guides/cosmos-db [Was ist Azure-Datenbank für MySQL?]: /azure/mysql/overview [Was ist Azure-Datenbank für PostgreSQL?]: /azure/postgresql/overview [Was ist Azure Private Link?]: /azure/private-link/private-link-overview [Was ist PaaS?]: https://azure.microsoft.com/overview/what-is-paas/ [Was ist Power BI?]: /power-bi/fundamentals/power-bi-overview [Comparison between Single Server and Flexible Server]: /azure/postgresql/flexible-server/concepts-compare-single-server-flexible-server#comparison-table [PgBouncer in Azure Database for PostgreSQL Flexible Server]: /azure/postgresql/flexible-server/concepts-pgbouncer