Questa pagina descrive l'adattatore Cassandra e spiega come utilizzarlo e connettere Spanner.
L'adattatore Cassandra è progettato per essere eseguito sulla stessa macchina dell'applicazione. L'adattatore espone un endpoint su localhost che supporta il protocollo Cassandra Query Language (CQL). Traduce il protocollo di rete CQL in gRPC, il protocollo di rete Spanner. Con questo proxy in esecuzione in locale, un client Cassandra può connettersi a un database Spanner.
Puoi avviare l'adattatore Cassandra nei seguenti modi:
- In-process con la tua applicazione Go
- In-process con la tua applicazione Java
- Come processo autonomo
- In un container Docker
Prima di iniziare
Prima di avviare Cassandra Adapter, assicurati di aver eseguito
l'autenticazione con un account utente o di servizio sulla macchina in cui
verrà eseguito Cassandra Adapter. Se utilizzi un service account, devi conoscere la posizione del file della chiave JSON (il file delle credenziali).
Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS
per specificare il percorso delle credenziali.
Per ulteriori informazioni, vedi:
Connetti l'adattatore Cassandra alla tua applicazione
L'adattatore Cassandra richiede le seguenti informazioni:
- Nome progetto
- Nome dell'istanza Spanner
- Database a cui connettersi
Se utilizzi Docker, devi disporre del percorso di un file delle credenziali (file della chiave) in formato JSON.
Java in-process
Se utilizzi un account di servizio per l'autenticazione, assicurati che la variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
sia impostata sul percorso del file delle credenziali.Per le applicazioni Java, puoi collegare l'adattatore Cassandra all'applicazione direttamente aggiungendo
google-cloud-spanner-cassandra
come dipendenza al tuo progetto.
Per Maven, aggiungi la seguente nuova dipendenza nella sezione <dependencies>
:
Per Gradle, aggiungi quanto segue:
- Modifica il codice di creazione
CqlSession
. Anziché utilizzareCqlSessionBuilder
, utilizzaSpannerCqlSessionBuilder
e fornisci l'URI del database Spanner:
Vai a In corso
Per le applicazioni Go, devi apportare una modifica di una riga al file di inizializzazione del cluster per integrare il client Go di Spanner Cassandra. A questo punto, puoi collegare l'adattatore Cassandra direttamente all'applicazione.
- Importa il pacchetto
spanner
dell'adattatore dal client Go di Spanner Cassandra nella tua applicazione Go.
import spanner "github.com/googleapis/go-spanner-cassandra/cassandra/gocql"
- Modifica il codice di creazione del cluster in modo da utilizzare
spanner.NewCluster
anzichégocql.NewCluster
e fornisci l'URI del database Spanner:
Puoi configurare il cluster come di consueto dopo aver eseguito la connessione al database Spanner.
Autonoma
- Clona il repository:
git clone https://github.com/googleapis/go-spanner-cassandra.git
cd go-spanner-cassandra
- Esegui
cassandra_launcher.go
con il flag-db
obbligatorio:
go run cassandra_launcher.go \
-db "projects/my_project/instances/my_instance/databases/my_database"
- Sostituisci
-db
con l'URI del database Spanner.
Docker
Avvia l'adattatore Cassandra con il seguente comando.
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
Il seguente elenco contiene le opzioni di avvio più utilizzate per l'adattatore Spanner Cassandra:
-db <DatabaseUri>
L'URI del database Spanner (obbligatorio). Specifica il database
Spanner a cui si connette il client. Ad esempio,
projects/YOUR_PROJECT/instances/YOUR_INSTANCE/databases/YOUR_DATABASE
.
-tcp <TCPEndpoint>
L'indirizzo del listener proxy client. Definisce l'endpoint TCP in cui il
client è in ascolto delle connessioni client Cassandra in entrata.
Valore predefinito:localhost:9042
-grpc-channels <NumGrpcChannels>
Il numero di canali gRPC da utilizzare per connettersi a Spanner. Valore predefinito: 4
Ad esempio, il seguente comando avvia
Cassandra Adapter sulla porta 9042
utilizzando le credenziali
dell'applicazione e connette l'adattatore al
database projects/my_project/instances/my_instance/databases/my_database
:
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
Consigli
I seguenti consigli ti aiutano a migliorare la tua esperienza con l'adattatore Cassandra. Questi consigli si concentrano su Java, in particolare sul driver client Cassandra per Java versione 4.
Aumentare il timeout della richiesta
Un timeout della richiesta di cinque secondi o più offre un'esperienza migliore con l'adattatore Cassandra rispetto al valore predefinito di due secondi.
# Sample application.conf: increases request timeout to five seconds
datastax-java-driver {
basic {
request {
timeout = 5 seconds
}
}
}
Ottimizzare il pool di connessioni
Le configurazioni predefinite per il numero massimo di connessioni e il numero massimo di richieste simultanee per connessione o host sono appropriate per ambienti di sviluppo, test e produzione o gestione temporanea a basso volume. Tuttavia, ti consigliamo di aumentare questi valori, poiché l'adattatore Cassandra si maschera da singolo nodo, a differenza di un pool di nodi all'interno del cluster Cassandra.
L'aumento di questi valori consente più connessioni simultanee tra il client e l'interfaccia Cassandra. In questo modo è possibile evitare l'esaurimento del pool di connessioni in caso di carico elevato.
# 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
}
}
Ottimizzare i canali gRPC
I canali gRPC vengono utilizzati dal client Spanner per la comunicazione. Un canale gRPC equivale approssimativamente a una connessione TCP. Un canale gRPC può gestire fino a 100 richieste simultanee. Ciò significa che un'applicazione avrà bisogno di almeno tanti canali gRPC quanto il numero di richieste simultanee che eseguirà, diviso per 100.
Disattiva il routing basato su token
I driver che utilizzano il bilanciamento del carico basato su token potrebbero stampare un avviso o non funzionare quando utilizzano l'adattatore Cassandra. Poiché Cassandra Adapter si maschera da singolo nodo, non sempre funziona bene con i driver token-aware che prevedono la presenza di almeno un numero di nodi pari al fattore di replica nel cluster. Alcuni driver potrebbero stampare un avviso (che può essere ignorato) e tornare a un criterio di bilanciamento round robin, mentre altri driver potrebbero non funzionare e generare un errore. Per i driver che non funzionano e generano un errore, devi disattivare la funzionalità token-aware o configurare i criteri di bilanciamento del carico round robin.
# Sample application.conf: disables token-aware routing
metadata {
token-map {
enabled = false
}
}
Bloccare la versione del protocollo sulla V4
L'adattatore Cassandra è compatibile con qualsiasi driver client Apache Cassandra open source conforme al protocollo di trasferimento binario CQL v4. Assicurati di bloccare
PROTOCOL_VERSION
su V4
, altrimenti potresti visualizzare errori di connessione.
# Sample application.conf: overrides protocol version to V4
datastax-java-driver {
advanced.protocol.version = V4
}
Passaggi successivi
- Scopri di più sull'adattatore Spanner Cassandra per Java nel repository GitHub java-spanner-cassandra.
- Scopri di più sull'adattatore Spanner Cassandra per Go nel repository GitHub go-spanner-cassandra.
- Consulta un confronto tra i concetti e l'architettura di Cassandra e Spanner.
- Scopri come eseguire la migrazione da Cassandra a Spanner.