Il client Go di Cassandra per Spanner connette le applicazioni scritte per il database Apache Cassandra con Spanner. Il client funziona con Spanner Omni nello stesso modo in cui funziona con Spanner.
Poiché Spanner supporta in modo nativo il protocollo di rete Cassandra v4, questo client consente alle applicazioni Go che utilizzano il driver gocql o alle applicazioni e agli strumenti non Go, come cqlsh, di connettersi a un database Spanner.
Questo client funge da proxy TCP locale. Intercetta i byte del protocollo Cassandra non elaborati inviati da un driver o da uno strumento client. Quindi, racchiude questi byte e i metadati necessari nei messaggi gRPC per comunicare con Spanner Omni. Il client traduce le risposte di Spanner Omni nel formato di rete Cassandra e le invia al driver o allo strumento di origine.
Questo documento mostra come integrare il client con Spanner Omni utilizzando uno dei seguenti metodi:
Dipendenza in-process: utilizza questo metodo per le applicazioni Go che utilizzano già il driver
gocql. Questo approccio incorpora il client nel processo dell'applicazione per modifiche minime del codice.Proxy sidecar: utilizza questo metodo per le applicazioni non Go o quando utilizzi strumenti Cassandra esterni, come .
cqlshQuesto approccio esegue il client come processo autonomo.
Per ulteriori informazioni su come Apache Cassandra funziona con Spanner, consulta Interfaccia Cassandra.
Quando utilizzare il client Go di Cassandra per Spanner
Questo client è utile nei seguenti scenari:
Utilizzare Spanner con un refactoring minimo. Vuoi utilizzare Spanner come backend per la tua applicazione Go, ma preferisci continuare a utilizzare l'API
gocqlche conosci per l'accesso ai dati.Utilizzare strumenti Cassandra non Go. Vuoi connetterti a Spanner utilizzando strumenti Cassandra standard come
cqlsho applicazioni scritte in altre lingue che utilizzano i driver Cassandra.
Utilizzare il client come dipendenza in-process
Le applicazioni Go si connettono a Spanner Omni integrando il client Go di Cassandra per Spanner come dipendenza in-process. Questo approccio incorpora la logica del proxy direttamente nell'applicazione, il che semplifica l'architettura di deployment eliminando la necessità di un processo separato. Questa configurazione offre anche prestazioni ottimali evitando un hop di rete aggiuntivo e una serializzazione e deserializzazione aggiuntive dei dati.
Per utilizzare il client come dipendenza in-process:
Importa il pacchetto Spanner nella tua applicazione Go:
import spanner "github.com/googleapis/go-spanner-cassandra/cassandra/gocql"Modifica il codice di creazione del cluster. Anziché utilizzare
gocql.NewCluster, utilizzaspanner.NewClustere fornisci le seguenti opzioni specifiche di Spanner Omni:Comunicazione in testo normale
L'esempio seguente mostra come stabilire una connessione in testo normale a Spanner Omni:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.UsePlainText = true cluster := spanner.NewCluster(opts) // ... }Connessione TLS
L'esempio seguente mostra come stabilire una connessione TLS a Spanner Omni:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.CaCertificate = "PATH_TO_CA_CRT" cluster := spanner.NewCluster(opts) // ... }Connessione mTLS
L'esempio seguente mostra come stabilire una connessione mTLS a Spanner Omni:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.CaCertificate = "PATH_TO_CA_CRT" opts.ClientCertificate = "PATH_TO_CLIENT_CERT" opts.ClientKey = "PATH_TO_CLIENT_KEY" cluster := spanner.NewCluster(opts) // ... }
Eseguire il deployment del client come proxy sidecar
Il deployment del client Go di Cassandra per Spanner come proxy sidecar è un'opzione efficace per le applicazioni e gli strumenti non Go, come cqlsh, per connettersi a Spanner Omni utilizzando i driver Cassandra standard. Questo metodo esegue il client come proxy TCP autonomo che intercetta il traffico del protocollo di rete Cassandra e lo traduce in gRPC per la comunicazione con Spanner Omni.
Questa configurazione è utile quando devi utilizzare strumenti Cassandra esterni o quando devi evitare di apportare modifiche dirette al codice dell'applicazione.
Puoi eseguire il proxy sidecar nei seguenti modi:
Eseguire localmente con il comando run di Go
L'esecuzione del proxy sidecar come processo locale dal codice sorgente è utile per gli ambienti di sviluppo e test in cui vuoi eseguire rapidamente l'iterazione della configurazione dell'applicazione e del proxy.
Clona il repository:
git clone https://github.com/googleapis/go-spanner-cassandra.gitCambia la directory del repository:
cd go-spanner-cassandraEsegui
cassandra_launcher.gocon il flag-dbobbligatorio e i seguenti flag specifici di Spanner Omni. Sostituisci il valore di-dbcon il nome del database Spanner Omni:
- Per la comunicazione in testo normale, esegui quanto segue:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainText
- Per una connessione TLS, esegui quanto segue:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT
- Per una connessione mTLS, esegui quanto segue:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY
Eseguire con un'immagine Docker precompilata
Ti consigliamo di eseguire il proxy sidecar come applicazione containerizzata utilizzando un'immagine Docker precompilata per gli ambienti di produzione, in quanto fornisce un ambiente di runtime coerente e isolato.
Esegui il pull dell'immagine dal repository del registro ufficiale:
docker pull gcr.io/cloud-spanner-adapter/cassandra-adapterEsegui l'immagine con i flag obbligatori:
Comunicazione in testo normale
Per la comunicazione in testo normale, esegui il seguente comando:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainTextConnessione TLS
Per una connessione TLS, esegui il seguente comando:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRTConnessione mTLS
Per una connessione mTLS, esegui il seguente comando:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY