Der Cassandra Go-Client für Spanner verbindet Anwendungen, die für die Apache Cassandra-Datenbank geschrieben wurden, mit Spanner. Der Client funktioniert mit Spanner Omni genauso wie mit Spanner.
Da Spanner das Cassandra v4-Wire-Protokoll nativ unterstützt, können Go-Anwendungen, die den gocql-Treiber verwenden, oder Nicht-Go-Anwendungen und ‑Tools wie cqlsh eine Verbindung zu einer Spanner-Datenbank herstellen.
Dieser Client fungiert als lokaler TCP-Proxy. Er fängt die Rohbytes des Cassandra-Protokolls ab, die ein Treiber oder Clienttool sendet. Anschließend verpackt er diese Bytes und die erforderlichen Metadaten in gRPC-Nachrichten, um mit Spanner Omni zu kommunizieren. Der Client übersetzt Antworten von Spanner Omni zurück in das Cassandra-Wire-Format und sendet sie an den ursprünglichen Treiber oder das ursprüngliche Tool zurück.
In diesem Dokument wird beschrieben, wie Sie den Client mit einer der folgenden Methoden in Spanner Omni einbinden:
In-Process-Abhängigkeit: Verwenden Sie diese Methode für Go Anwendungen, die bereits den Treiber verwenden.
gocqlBei diesem Ansatz wird der Client in Ihren Anwendungsprozess eingebettet, sodass nur minimale Codeänderungen erforderlich sind.Sidecar-Proxy: Verwenden Sie diese Methode für Nicht-Go Anwendungen oder wenn Sie externe Cassandra-Tools wie
cqlshverwenden. Bei diesem Ansatz wird der Client als eigenständiger Prozess ausgeführt.
Weitere Informationen zur Verwendung von Apache Cassandra mit Spanner finden Sie unter Cassandra-Schnittstelle.
Wann sollte der Spanner Cassandra Go-Client verwendet werden?
Dieser Client ist in den folgenden Szenarien nützlich:
Spanner mit minimalem Refactoring verwenden. Sie möchten Spanner als Backend für Ihre Go-Anwendung verwenden, aber weiterhin die vertraute
gocql-API für den Datenzugriff nutzen.Cassandra-Tools verwenden, die nicht in Go geschrieben sind. Sie möchten eine Verbindung zu Spanner mit Standard-Cassandra-Tools wie
cqlshoder Anwendungen herstellen, die in anderen Sprachen geschrieben wurden und Cassandra-Treiber verwenden.
Client als In-Process-Abhängigkeit verwenden
Go-Anwendungen stellen eine Verbindung zu Spanner Omni her, indem sie den Spanner Cassandra Go-Client als In-Process-Abhängigkeit einbinden. Bei diesem Ansatz wird die Proxy-Logik direkt in Ihre Anwendung eingebettet, was die Bereitstellungsarchitektur vereinfacht, da kein separater Prozess erforderlich ist. Diese Konfiguration bietet auch eine optimale Leistung, da ein zusätzlicher Netzwerkhop und eine zusätzliche Serialisierung und Deserialisierung der Daten vermieden werden.
So verwenden Sie den Client als In-Process-Abhängigkeit:
Importieren Sie das Spanner-Paket in Ihre Go-Anwendung:
import spanner "github.com/googleapis/go-spanner-cassandra/cassandra/gocql"Ändern Sie den Code zur Clustererstellung. Verwenden Sie anstelle von
gocql.NewClusterdie Funktionspanner.NewClusterund geben Sie die folgenden spezifischen Optionen für Spanner Omni an:Kommunikation im Klartext
Das folgende Beispiel zeigt, wie Sie eine Klartextverbindung zu Spanner Omni herstellen:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.UsePlainText = true cluster := spanner.NewCluster(opts) // ... }TLS-Verbindung
Das folgende Beispiel zeigt, wie Sie eine TLS-Verbindung zu Spanner Omni herstellen:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.CaCertificate = "PATH_TO_CA_CRT" cluster := spanner.NewCluster(opts) // ... }mTLS-Verbindung
Das folgende Beispiel zeigt, wie Sie eine mTLS-Verbindung zu Spanner Omni herstellen:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.CaCertificate = "PATH_TO_CA_CRT" opts.ClientCertificate = "PATH_TO_CLIENT_CERT" opts.ClientKey = "PATH_TO_CLIENT_KEY" cluster := spanner.NewCluster(opts) // ... }
Client als Sidecar-Proxy bereitstellen
Die Bereitstellung des Spanner Cassandra Go-Clients als Sidecar-Proxy ist eine effektive Option für Nicht-Go-Anwendungen und ‑Tools wie cqlsh, um mit Standard-Cassandra-Treibern eine Verbindung zu Spanner Omni herzustellen. Bei dieser Methode wird der Client als eigenständiger TCP-Proxy ausgeführt, der den Traffic des Cassandra-Wire-Protokolls abfängt und ihn für die Kommunikation mit Spanner Omni in gRPC übersetzt.
Diese Konfiguration ist nützlich, wenn Sie externe Cassandra-Tools verwenden oder direkte Änderungen am Code Ihrer Anwendung vermeiden möchten.
Sie können den Sidecar-Proxy auf folgende Arten ausführen:
Lokal mit dem Go-Befehl run ausführen
Die Ausführung des Sidecar-Proxys als lokaler Prozess aus dem Quellcode ist nützlich für Entwicklungs- und Testumgebungen, in denen Sie schnell Iterationen an Ihrer Anwendung und Proxy-Konfiguration vornehmen möchten.
Klonen Sie das Repository:
git clone https://github.com/googleapis/go-spanner-cassandra.gitWechseln Sie in das Repository-Verzeichnis:
cd go-spanner-cassandraFühren Sie
cassandra_launcher.gomit dem erforderlichen Flag-dbund den folgenden spezifischen Flags für Spanner Omni aus. Ersetzen Sie den Wert von-dbdurch den Namen Ihrer Spanner Omni-Datenbank:
- Führen Sie für die Kommunikation im Klartext Folgendes aus:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainText
- Führen Sie für eine TLS-Verbindung Folgendes aus:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT
- Führen Sie für eine mTLS-Verbindung Folgendes aus:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY
Mit einem vordefinierten Docker-Image ausführen
Wir empfehlen, den Sidecar-Proxy als containerisierte Anwendung mit einem vordefinierten Docker-Image für Produktionsumgebungen auszuführen, da dies eine konsistente und isolierte Laufzeitumgebung bietet.
Rufen Sie das Image aus dem offiziellen Registry-Repository ab:
docker pull gcr.io/cloud-spanner-adapter/cassandra-adapterFühren Sie das Image mit den erforderlichen Flags aus:
Kommunikation im Klartext
Führen Sie für die Kommunikation im Klartext den folgenden Befehl aus:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainTextTLS-Verbindung
Führen Sie für eine TLS-Verbindung den folgenden Befehl aus:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRTmTLS-Verbindung
Führen Sie für eine mTLS-Verbindung den folgenden Befehl aus:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY