Auf dieser Seite wird der Cassandra-Adapter beschrieben und es wird erläutert, wie Sie Spanner darüber verwenden und verbinden.
Der Cassandra-Adapter ist für die Ausführung auf demselben Computer wie Ihre Anwendung konzipiert. Der Adapter macht einen Endpunkt auf localhost verfügbar, der das CQL-Wire-Protokoll (Cassandra Query Language) unterstützt. Es übersetzt das CQL-Wire-Protokoll in gRPC, das Spanner-Wire-Protokoll. 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 Weise starten:
- In-Process mit Ihrer Go-Anwendung
- In-Process mit Ihrer Java-Anwendung
- Als eigenständiger Prozess
- In einem Docker-Container
Hinweise
Bevor Sie den Cassandra-Adapter starten, müssen Sie sich auf dem Computer, auf dem der Cassandra-Adapter ausgeführt wird, entweder mit einem Nutzerkonto oder einem Dienstkonto authentifizieren. Wenn Sie ein Dienstkonto verwenden, müssen Sie den Speicherort der JSON-Schlüsseldatei (der Anmeldedatendatei) kennen.
Sie legen die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
fest, um den Anmeldedatenpfad anzugeben.
Weitere Informationen finden Sie unter:
Cassandra-Adapter mit Ihrer Anwendung verbinden
Für den Cassandra-Adapter sind die folgenden Informationen erforderlich:
- Projektname
- Name der Cloud 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, achten Sie darauf, dass die Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALS
auf den Pfad der Datei mit den Anmeldedaten festgelegt ist.Bei Java-Anwendungen können Sie den Cassandra-Adapter direkt mit der Anwendung verknüpfen, indem Sie
google-cloud-spanner-cassandra
als Abhängigkeit zu Ihrem Projekt hinzufügen.
Fügen Sie für Maven die folgende neue Abhängigkeit unter dem Abschnitt <dependencies>
hinzu:
Fügen Sie für Gradle Folgendes hinzu:
- Ändern Sie den Erstellungscode für
CqlSession
. Verwenden Sie anstelle vonCqlSessionBuilder
die OptionSpannerCqlSessionBuilder
und geben Sie den Spanner-Datenbank-URI an:
In-Process-Modus
Für Go-Anwendungen müssen Sie eine einzeilige Änderung an der Clusterinitialisierungsdatei vornehmen, um den Spanner-Cassandra-Go-Client einzubinden. 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 so, dass
spanner.NewCluster
anstelle vongocql.NewCluster
verwendet wird, und geben Sie den Spanner-Datenbank-URI an:
Nachdem Sie eine Verbindung zu Ihrer Spanner-Datenbank hergestellt haben, können Sie Ihren Cluster wie gewohnt konfigurieren.
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.go
mit dem erforderlichen Flag-db
aus:
go run cassandra_launcher.go \
-db "projects/my_project/instances/my_instance/databases/my_database"
- Ersetzen Sie
-db
durch Ihren Spanner-Datenbank-URI.
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 URI der Spanner-Datenbank (erforderlich). Damit wird die Spanner-Datenbank angegeben, zu der der Client eine Verbindung herstellt. Beispiel: projects/YOUR_PROJECT/instances/YOUR_INSTANCE/databases/YOUR_DATABASE
-tcp <TCPEndpoint>
Die Listener-Adresse des Clientproxys. Dies definiert den TCP-Endpunkt, an dem der Client auf eingehende Cassandra-Clientverbindungen wartet.
Standard:localhost:9042
-grpc-channels <NumGrpcChannels>
Die Anzahl der gRPC-Channels, die für die Verbindung mit 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 optimieren. Diese Empfehlungen beziehen sich auf Java, insbesondere auf den Cassandra-Clienttreiber für Java-Version 4.
Zeitlimit für Anfragen erhöhen
Ein Anfrage-Timeout 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 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 sich als einzelner Knoten ausgibt, im Gegensatz zu einem Pool von Knoten in einem Cassandra-Cluster.
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-Channels optimieren
gRPC-Channels 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.
Tokenbasiertes Routing deaktivieren
Bei Treibern, die 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 fungiert, funktioniert er nicht immer gut mit tokenbewussten 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 Ausgleichsrichtlinie wie „Round-Robin“ zurück. Andere Treiber schlagen möglicherweise mit einem Fehler fehl. Bei den Treibern, bei denen ein Fehler auftritt, müssen Sie die tokenbasierte Funktion deaktivieren oder die Round-Robin-Load-Balancing-Richtlinie konfigurieren.
# Sample application.conf: disables token-aware routing
metadata {
token-map {
enabled = false
}
}
Protokollversion an V4 anpinnen
Der Cassandra-Adapter ist mit jedem Open-Source-Apache Cassandra-Clienttreiber kompatibel, der dem CQL Binary v4-Wire-Protokoll entspricht. PROTOCOL_VERSION
muss an V4
angepinnt sein, 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
- Weitere Informationen zum Spanner Cassandra-Adapter für Go finden Sie im GitHub-Repository go-spanner-cassandra.
- Vergleich von Cassandra- und Spanner-Konzepten und -Architektur
- Von Cassandra zu Spanner migrieren