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 der Client eine Verbindung herstellt. 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 der Adapter 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 Nutzung des Cassandra-Adapters 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 sind für Entwicklungs-, Test- und Produktions- oder Staging-Umgebungen mit geringem Volumen geeignet. 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 Überlastung 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 so viele Knoten im Cluster erwarten, wie der Replikationsfaktor angibt. 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
- Von Cassandra zu Spanner migrieren