Klien Java Cassandra untuk Spanner menghubungkan aplikasi yang ditulis untuk database Apache Cassandra dengan Spanner. Klien bekerja dengan Spanner Omni dengan cara yang sama seperti saat bekerja dengan Spanner.
Karena Spanner secara native mendukung protokol komunikasi Cassandra v4, klien Java Cassandra Spanner menerjemahkan protokol komunikasi Cassandra ke Spanner gRPC API. Hal ini memungkinkan Anda memigrasikan aplikasi Cassandra ke Spanner dengan perubahan kode minimal.
Dokumen ini menunjukkan cara mengintegrasikan klien dengan Spanner Omni menggunakan salah satu metode berikut:
Dependensi dalam proses: Gunakan metode ini untuk aplikasi Java yang sudah menggunakan
cassandra-java-driver. Pendekatan ini menyematkan klien dalam proses aplikasi Anda dengan modifikasi kode minimal.Proxy sidecar: Gunakan metode ini untuk aplikasi non-Java atau saat menggunakan alat Cassandra eksternal, seperti
cqlsh. Pendekatan ini menjalankan klien sebagai proses mandiri.
Untuk mengetahui informasi selengkapnya, lihat Antarmuka Cassandra di dokumentasi Spanner.
Kapan harus menggunakan klien Java Cassandra Spanner
Klien ini berguna dalam skenario berikut:
Gunakan Spanner dengan refaktorisasi minimal. Anda ingin menggunakan Spanner sebagai backend untuk aplikasi Java, tetapi lebih memilih untuk terus menggunakan
cassandra-java-driverAPI yang sudah dikenal untuk akses data.Gunakan alat Cassandra non-Java. Anda ingin terhubung ke Spanner menggunakan alat Cassandra standar seperti
cqlshatau aplikasi yang ditulis dalam bahasa lain yang menggunakan driver Cassandra.
Menggunakan klien sebagai dependensi dalam proses
Mengintegrasikan klien Java Cassandra Spanner sebagai dependensi dalam proses adalah metode yang direkomendasikan bagi aplikasi Java untuk terhubung ke Spanner Omni. Dibandingkan dengan metode proxy sidecar, konfigurasi dalam proses memberikan performa yang lebih baik dengan menghindari hop jaringan tambahan serta serialisasi dan deserialisasi data terkait. Selain itu, arsitektur deployment Anda juga disederhanakan karena Anda tidak perlu mengelola proses mandiri yang terpisah.
Untuk menggunakan klien sebagai dependensi dalam proses, lakukan hal berikut:
Tambahkan klien Java Spanner Cassandra sebagai dependensi ke project Anda:
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-spanner-cassandra</artifactId> <version>1.2.0</version> </dependency>Ubah kode pembuatan
CqlSessiondan tambahkan opsi khusus komunikasi Spanner Omni:Teks biasa
Contoh berikut menunjukkan cara membuat koneksi teks biasa ke Spanner Omni:
CqlSession session = SpannerCqlSession.builder() // `SpannerCqlSession` instead of `CqlSession` .setDatabaseUri("DATABASE_ID") // Required: Specify the Spanner database name .withConfigLoader( DriverConfigLoader.programmaticBuilder() .withString(DefaultDriverOption.PROTOCOL_VERSION, "V4") .withDuration( DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(5)) .build()) .setHost("ENDPOINT") .setInstanceType(SpannerCqlSessionBuilder.InstanceType.OMNI) .setUsePlainText(true) .build(); // Rest of your business logic such as session.Query(SELECT * FROM ...) session.close();TLS
Untuk menggunakan koneksi TLS, pastikan sertifikat CA ditambahkan ke truststore yang digunakan oleh aplikasi, seperti yang dijelaskan dalam Mengonfigurasi truststore Java:
CqlSession session = SpannerCqlSession.builder() // `SpannerCqlSession` instead of `CqlSession` .setDatabaseUri("DATABASE_ID") // Required: Specify the Spanner database name .withConfigLoader( DriverConfigLoader.programmaticBuilder() .withString(DefaultDriverOption.PROTOCOL_VERSION, "V4") .withDuration( DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(5)) .build()) .setHost("ENDPOINT") .setInstanceType(SpannerCqlSessionBuilder.InstanceType.OMNI) .setUsePlainText(false) .build(); // Rest of your business logic such as session.Query(SELECT * FROM ...) session.close();mTLS
Untuk menggunakan koneksi mTLS, pastikan sertifikat CA ditambahkan ke truststore yang digunakan oleh aplikasi dan kunci klien dalam format PKCS#8. Untuk mengetahui informasi selengkapnya, lihat petunjuk mTLS Java SDK.
CqlSession session = SpannerCqlSession.builder() // `SpannerCqlSession` instead of `CqlSession` .setDatabaseUri("DATABASE_ID") // Required: Specify the Spanner database name .withConfigLoader( DriverConfigLoader.programmaticBuilder() .withString(DefaultDriverOption.PROTOCOL_VERSION, "V4") .withDuration( DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(5)) .build()) .setHost("ENDPOINT") .setInstanceType(SpannerCqlSessionBuilder.InstanceType.OMNI) .setUsePlainText(false) .setClientCertPathAndKey( "PATH_TO_CLIENT_CERT", "PATH_TO_CLIENT_KEY_PKCS8") .build(); // Rest of your business logic such as session.Query(SELECT * FROM ...) session.close();Ganti kode berikut:
DATABASE_ID: ID database Spanner Omni Anda, misalnya,test-db.ENDPOINT: endpoint instance Spanner Omni Anda, misalnya,localhost:15000.PATH_TO_CLIENT_CERT: jalur ke file sertifikat klien Anda.PATH_TO_CLIENT_KEY_PKCS8: jalur ke file kunci pribadi klien Anda dalam format PKCS#8.
Proxy sidecar atau proses mandiri
Men-deploy klien Java Cassandra Spanner sebagai proxy sidecar adalah opsi yang efektif untuk aplikasi dan alat non-Java, seperti cqlsh, untuk terhubung ke Spanner Omni menggunakan driver Cassandra standar. Metode
ini menjalankan klien sebagai proxy TCP mandiri yang mencegat traffic protokol
kabel Cassandra dan menerjemahkannya ke gRPC untuk komunikasi dengan
Spanner Omni.
Anda dapat menjalankan proxy sidecar menggunakan file konfigurasi YAML atau dengan menentukan properti sistem.
Menggunakan file konfigurasi YAML
Untuk penyiapan produksi, sebaiknya gunakan file YAML untuk mengonfigurasi adaptor. Metode ini mendukung beberapa pemroses dan setelan global:
java -DconfigFilePath=PATH_TO_CONFIG_YAML -jar PATH_TO_ADAPTER_JAR
Contoh config.yaml:
globalClientConfigs:
enableBuiltInMetrics: false
healthCheckEndpoint: "127.0.0.1:8080"
spannerEndpoint: "ENDPOINT"
instanceType: "omni"
clientCertPath: "PATH_TO_CLIENT_CERT"
clientKeyPath: "PATH_TO_CLIENT_KEY_PKCS8"
usePlainText: "false"
listeners:
- name: "listener_1"
host: "127.0.0.1"
port: 9042
spanner:
databaseUri: "DATABASE_ID"
numGrpcChannels: 4
maxCommitDelayMillis: 5
- name: "listener_2"
host: "127.0.0.2"
port: 9043
spanner:
databaseUri: "DATABASE_ID_2"
numGrpcChannels: 8
Menggunakan properti sistem
Untuk satu pemroses atau deployment yang lebih sederhana, Anda dapat menjalankan proxy sidecar sebagai proses mandiri dan mengonfigurasi setelannya menggunakan properti sistem Java.
Contoh berikut menunjukkan cara menjalankan proxy sidecar sebagai proses mandiri untuk setiap konfigurasi keamanan yang didukung:
Teks biasa
Untuk menjalankan dengan komunikasi teks biasa, jalankan perintah berikut:
java -DdatabaseUri=DATABASE_ID \
-Dhost=127.0.0.1 \
-Dport=9042 \
-DnumGrpcChannels=4 \
-DhealthCheckPort=8080 \
-DspannerEndpoint=ENDPOINT \
-DinstanceType=omni \
-DusePlainText=true \
-jar PATH_TO_ADAPTER_JAR
TLS
Untuk menjalankan dengan koneksi TLS, jalankan perintah berikut:
java -DdatabaseUri=DATABASE_ID \
-Dhost=127.0.0.1 \
-Dport=9042 \
-DnumGrpcChannels=4 \
-DhealthCheckPort=8080 \
-DspannerEndpoint=ENDPOINT \
-DinstanceType=omni \
-jar PATH_TO_ADAPTER_JAR
mTLS
Untuk menjalankan dengan koneksi mTLS, jalankan perintah berikut:
java -DdatabaseUri=DATABASE_ID \
-Dhost=127.0.0.1 \
-Dport=9042 \
-DnumGrpcChannels=4 \
-DhealthCheckPort=8080 \
-DspannerEndpoint=ENDPOINT \
-DinstanceType=omni \
-DclientCertPath=PATH_TO_CLIENT_CERT \
-DclientKeyPath=PATH_TO_CLIENT_KEY_PKCS8 \
-jar PATH_TO_ADAPTER_JAR
Ganti kode berikut:
DATABASE_ID: ID database Spanner Omni Anda, misalnya,test-db.ENDPOINT: endpoint instance Spanner Omni Anda, misalnya,localhost:15000.PATH_TO_ADAPTER_JAR: jalur ke file JAR adaptor Cassandra Anda.PATH_TO_CLIENT_CERT: jalur ke file sertifikat klien Anda.PATH_TO_CLIENT_KEY_PKCS8: jalur ke file kunci pribadi klien Anda dalam format PKCS#8.