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 di rete 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 un account 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.
Prima di avviare Cassandra Adapter, assicurati di aver eseguito l'autenticazione con un account utente o un account 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 saperne di più, 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 chiave) in formato JSON.
Java in-process
Se utilizzi un account di servizio per l'autenticazione, assicurati che la variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALSsia impostata sul percorso del file delle credenziali.Per le applicazioni Java, puoi collegare l'adattatore Cassandra all'applicazione direttamente aggiungendo
google-cloud-spanner-cassandracome dipendenza al tuo progetto.
Per Maven, aggiungi la nuova dipendenza riportata di seguito nella sezione <dependencies>:
Per Gradle, aggiungi quanto segue:
- Modifica il codice di creazione di
CqlSession. Anziché utilizzareCqlSessionBuilder, utilizzaSpannerCqlSessionBuildere 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
spannerdell'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.NewClusteranzichégocql.NewClustere fornisci l'URI del database Spanner:
Puoi configurare il cluster come di consueto dopo averlo connesso al database Spanner.
Autonoma
- Clona il repository:
git clone https://github.com/googleapis/go-spanner-cassandra.git
cd go-spanner-cassandra
- Esegui il comando
cassandra_launcher.gocon il flag-dbobbligatorio:
go run cassandra_launcher.go \
-db "projects/my_project/instances/my_instance/databases/my_database"
- Sostituisci
-dbcon 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
ascolta le connessioni client Cassandra in entrata.
Valore predefinito:localhost:9042
-grpc-channels <NumGrpcChannels>
Il numero di canali gRPC da utilizzare per la connessione a Spanner. Valore predefinito: 4
Ad esempio, il seguente comando avvia
l'adattatore Cassandra 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 staging 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 un maggior numero di 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 si utilizza l'adattatore Cassandra. Poiché Cassandra Adapter si maschera da singolo nodo, non sempre funziona bene con i driver token-aware che prevedono che nel cluster sia presente almeno un numero di nodi pari al fattore di replica. Alcuni driver potrebbero stampare un avviso (che può essere ignorato) e tornare a un criterio di bilanciamento round robin, mentre altri driver potrebbero non riuscire a eseguire l'operazione e generare un errore. Per i driver che non funzionano con un errore, devi disattivare la funzionalità token-aware o configurare la policy di bilanciamento del carico round robin.
# Sample application.conf: disables token-aware routing
metadata {
token-map {
enabled = false
}
}
Bloccare la versione del protocollo su 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.