Auf dieser Seite wird der Cassandra-Adapter beschrieben und erklärt, wie Sie Spanner damit verwenden und eine Verbindung zu Spanner herstellen.
Der Cassandra-Adapter ist so konzipiert, dass er auf demselben Computer wie Ihre Anwendung ausgeführt wird. Der Adapter stellt einen Endpunkt auf „localhost“ bereit, der das CQL-Wire Protocol (Cassandra Query Language) unterstützt. Er übersetzt das CQL-Wire Protocol in gRPC, das Spanner-Wire Protocol. Wenn dieser Proxy lokal ausgeführt wird, kann ein Cassandra-Client eine Verbindung zu einer Spanner-Datenbank herstellen.
Sie können den Cassandra-Adapter auf folgende Arten starten:
- In-process mit Ihrer Go-Anwendung
- In-process mit Ihrer Java-Anwendung
- Als eigenständiger Prozess
- In einem Docker-Container
Hinweis
Bevor Sie den Cassandra-Adapter starten, müssen Sie sich auf dem Computer, auf dem der Cassandra-Adapter ausgeführt wird, mit einem Nutzerkonto oder Dienstkonto authentifiziert haben. Wenn Sie ein Dienstkonto verwenden, müssen Sie den Speicherort der JSON-Schlüsseldatei (der Datei mit den Anmeldedaten) kennen.
Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS fest, um den Pfad zu den Anmeldedaten anzugeben.
Bevor Sie den Cassandra-Adapter starten, müssen Sie sich auf dem Computer, auf dem der Cassandra-Adapter ausgeführt wird, mit einem Nutzerkonto oder Dienstkonto authentifiziert haben. Wenn Sie ein Dienstkonto verwenden, müssen Sie den Speicherort der JSON-Schlüsseldatei (der Datei mit den Anmeldedaten) kennen.
Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS fest, um den Pfad zu den Anmeldedaten anzugeben.
Weitere Informationen finden Sie unter:
Cassandra-Adapter mit Ihrer Anwendung verbinden
Für den Cassandra-Adapter sind folgende Informationen erforderlich:
- Projektname
- Name der Spanner-Instanz
- Datenbank, zu der eine Verbindung hergestellt werden soll
Wenn Sie Docker verwenden, benötigen Sie den Pfad für eine JSON-formatierte Datei mit Anmeldedaten (Schlüsseldatei).
Java in-process
Wenn Sie ein Dienstkonto für die Authentifizierung verwenden, muss die Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALSauf den Pfad der Datei mit den Anmeldedaten festgelegt sein.Bei Java-Anwendungen können Sie den Cassandra-Adapter direkt mit der Anwendung verknüpfen, indem Sie
google-cloud-spanner-cassandraals Abhängigkeit zu Ihrem Projekt hinzufügen.
Fügen Sie für Maven die folgende neue Abhängigkeit im <dependencies>
Abschnitt hinzu:
Fügen Sie für Gradle Folgendes hinzu:
- Ändern Sie den Code zum Erstellen von
CqlSession. Verwenden Sie anstelle vonCqlSessionBuilder, verwenden SieSpannerCqlSessionBuilderund geben Sie den Spanner-Datenbank-URI an:
Go in-process
Bei Go-Anwendungen müssen Sie eine einzeilige Änderung an der Clusterinitialisierungsdatei vornehmen, um den Spanner Cassandra Go-Client zu integrieren. Anschließend können Sie den Cassandra-Adapter direkt mit der Anwendung verknüpfen.
- Importieren Sie das
spanner-Paket des Adapters aus dem Spanner Cassandra Go-Client in Ihre Go-Anwendung.
import spanner "github.com/googleapis/go-spanner-cassandra/cassandra/gocql"
- Ändern Sie den Code zum Erstellen des Clusters, um
spanner.NewClusteranstelle vongocql.NewClusterzu verwenden, und geben Sie den Spanner-Datenbank-URI an:
Sie können Ihren Cluster wie gewohnt konfigurieren, nachdem Sie eine Verbindung zu Ihrer Spanner-Datenbank hergestellt haben.
Eigenständig
- Klonen Sie das Repository:
git clone https://github.com/googleapis/go-spanner-cassandra.git
cd go-spanner-cassandra
- Führen Sie
cassandra_launcher.gomit dem erforderlichen Flag-dbaus:
go run cassandra_launcher.go \
-db "projects/my_project/instances/my_instance/databases/my_database"
- Ersetzen Sie
-dbdurch den URI Ihrer Spanner-Datenbank.
Docker
Starten Sie den Cassandra-Adapter mit dem folgenden Befehl.
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
docker run -d -p 9042:9042 \
-e GOOGLE_APPLICATION_CREDENTIALS \
-v ${GOOGLE_APPLICATION_CREDENTIALS}:${GOOGLE_APPLICATION_CREDENTIALS}:ro \
gcr.io/cloud-spanner-adapter/cassandra-adapter \
-db DATABASE_URI
Die folgende Liste enthält die am häufigsten verwendeten Startoptionen für den Spanner Cassandra-Adapter:
-db <DatabaseUri>
Der Spanner-Datenbank-URI (erforderlich). Hiermit wird die Spanner-Datenbank angegeben, mit der sich der Client verbindet. Beispiel: projects/YOUR_PROJECT/instances/YOUR_INSTANCE/databases/YOUR_DATABASE.
-tcp <TCPEndpoint>
Die Adresse des Client-Proxy-Listeners. Hiermit wird der TCP-Endpunkt definiert, an dem der Client auf eingehende Cassandra-Clientverbindungen wartet.
Standard:localhost:9042
-grpc-channels <NumGrpcChannels>
Die Anzahl der gRPC-Kanäle, die beim Herstellen einer Verbindung zu Spanner verwendet werden sollen. Standard: 4
Mit dem folgenden Befehl wird beispielsweise der Cassandra-Adapter auf Port 9042 mit den Anmeldedaten der Anwendung gestartet und mit der Datenbank projects/my_project/instances/my_instance/databases/my_database verbunden:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
docker run -d -p 9042:9042 \
-e GOOGLE_APPLICATION_CREDENTIALS \
-v ${GOOGLE_APPLICATION_CREDENTIALS}:${GOOGLE_APPLICATION_CREDENTIALS}:ro \
gcr.io/cloud-spanner-adapter/cassandra-adapter \
-db projects/my_project/instances/my_instance/databases/my_database
Empfehlungen
Die folgenden Empfehlungen helfen Ihnen, die Nutzung des Cassandra-Adapters zu verbessern. Diese Empfehlungen beziehen sich auf Java, insbesondere auf den Cassandra-Clienttreiber für Java Version 4.
Timeout für Anfragen erhöhen
Ein Timeout für Anfragen von mindestens fünf Sekunden bietet eine bessere Erfahrung mit dem Cassandra-Adapter als der Standardwert von zwei Sekunden.
# Sample application.conf: increases request timeout to five seconds
datastax-java-driver {
basic {
request {
timeout = 5 seconds
}
}
}
Verbindungs-Pooling optimieren
Die Standardkonfigurationen für die maximale Anzahl von Verbindungen und die maximale Anzahl gleichzeitiger Anfragen pro Verbindung oder Host eignen sich für Entwicklungs-, Test- und Produktions- oder Staging-Umgebungen mit geringem Volumen. Wir empfehlen jedoch, diese Werte zu erhöhen, da der Cassandra-Adapter im Gegensatz zu einem Pool von Knoten in einem Cassandra-Cluster als einzelner Knoten auftritt.
Wenn Sie diese Werte erhöhen, sind mehr gleichzeitige Verbindungen zwischen dem Client und der Cassandra-Schnittstelle möglich. So kann eine Erschöpfung des Verbindungspools bei hoher Last verhindert werden.
# Sample application.conf: increases maximum number of requests that can be
# executed concurrently on a connection
advanced.connection {
max-requests-per-connection = 32000
pool {
local.size = 10
}
}
gRPC-Kanäle optimieren
gRPC-Kanäle werden vom Spanner-Client für die Kommunikation verwendet. Ein gRPC-Kanal entspricht in etwa einer TCP-Verbindung. Ein gRPC-Kanal kann bis zu 100 gleichzeitige Anfragen verarbeiten. Das bedeutet, dass eine Anwendung mindestens so viele gRPC-Kanäle benötigt wie die Anzahl der gleichzeitigen Anfragen, die die Anwendung ausführt, geteilt durch 100.
Token-basierte Weiterleitung deaktivieren
Bei Treibern, die einen Token-basierten Lastenausgleich verwenden, wird möglicherweise eine Warnung ausgegeben oder sie funktionieren nicht, wenn der Cassandra-Adapter verwendet wird. Da der Cassandra-Adapter als einzelner Knoten auftritt, funktioniert er nicht immer gut mit Token-basierten Treibern, die mindestens eine Anzahl von Knoten im Cluster erwarten, die dem Replikationsfaktor entspricht. Einige Treiber geben möglicherweise eine Warnung aus (die ignoriert werden kann) und greifen auf eine Round-Robin-Lastenausgleichsrichtlinie zurück, während andere Treiber mit einem Fehler fehlschlagen. Bei den Treibern, die mit einem Fehler fehlschlagen, müssen Sie die Token-basierte Weiterleitung deaktivieren oder die Round-Robin-Lastenausgleichsrichtlinie konfigurieren.
# Sample application.conf: disables token-aware routing
metadata {
token-map {
enabled = false
}
}
Protokollversion auf V4 festlegen
Der Cassandra-Adapter ist mit jedem CQL Binary v4 wire
protocol
kompatiblen Open-Source-Apache Cassandra-Clienttreiber kompatibel. Legen Sie PROTOCOL_VERSION auf V4 fest, da sonst möglicherweise Verbindungsfehler auftreten.
# Sample application.conf: overrides protocol version to V4
datastax-java-driver {
advanced.protocol.version = V4
}
Nächste Schritte
- Weitere Informationen zum Spanner Cassandra-Adapter für Java finden Sie im GitHub-Repository java-spanner-cassandra.
- Weitere Informationen zum Spanner Cassandra-Adapter für Go finden Sie im GitHub-Repository go-spanner-cassandra.
- Vergleich zwischen Cassandra- und Spanner-Konzepten und -Architektur.
- Informationen zur Migration von Cassandra zu Spanner.