Spanner Cassandra bağdaştırıcısı ile çalışmaya başlama

1. Giriş

Spanner, hem ilişkisel hem de ilişkisel olmayan iş yükleri için ideal olan, tümüyle yönetilen, yatay olarak ölçeklenebilir ve küresel olarak dağıtılmış bir veritabanı hizmetidir.

Spanner'ın Cassandra arayüzü, tanıdık Cassandra araçlarını ve söz dizimini kullanarak Spanner'ın tümüyle yönetilen, ölçeklenebilir ve yüksek düzeyde kullanılabilir altyapısından yararlanmanıza olanak tanır.

Neler öğreneceksiniz?

  • Spanner örneği ve veritabanı oluşturma
  • Cassandra şemanızı ve veri modelinizi dönüştürme
  • Geçmiş verilerinizi Cassandra'dan Spanner'a toplu olarak nasıl aktaracağınızı öğrenin.
  • Uygulamanızı Cassandra yerine Spanner'a yönlendirme

İhtiyacınız olanlar

  • Bir faturalandırma hesabına bağlı olan Google Cloud projesi.
  • gcloud KSA'nın yüklü ve yapılandırılmış olduğu bir makineye erişin veya Google Cloud Shell'i kullanın.
  • Chrome veya Firefox gibi bir web tarayıcısı

2. Kurulum ve şartlar

GCP projesi oluşturma

Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Henüz bir Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.

Faturalandırma kurulumu

Ardından, faturalandırmayı yönetme kullanıcı kılavuzunu uygulamanız ve Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir. Bu eğitimin ötesinde faturalandırmayla karşılaşmamak için "9. Adım: Temizleme" bölümündeki talimatları uygulayarak codelab'in sonunda Spanner örneğini kapatabilirsiniz.

Cloud Shell'i Başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

7ffe5cbb04455448.png

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.

Sıradaki

Ardından Cassandra kümesini dağıtırsınız.

3. Cassandra kümesini dağıtma (Kaynak)

Bu codelab'de Compute Engine'de tek düğümlü bir Cassandra kümesi oluşturacağız.

1. Cassandra için GCE sanal makinesi oluşturma

Örnek oluşturmak için daha önce sağlanan Cloud Shell'deki gcloud compute instances create komutunu kullanın.

gcloud compute instances create cassandra-origin \
--machine-type=e2-medium \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB \
--zone=us-central1-a

2. Cassandra'yı yükleme

Aşağıdaki talimatları uygulayarak Navigation menu sayfasından VM Instances bölümüne gidin: Sanal makine örneklerine gidin..

cassandra-origin sanal makinesini arayın ve gösterildiği gibi SSH kullanarak sanal makineye bağlanın:

sanal makine örneğine SSH ile bağlanma.

Oluşturduğunuz ve SSH uyguladığınız sanal makineye Cassandra'yı yüklemek için aşağıdaki komutları çalıştırın.

Java'yı yükleyin (Cassandra bağımlılığı)

sudo apt-get update
sudo apt-get install -y openjdk-11-jre-headless

Cassandra deposu ekleme

echo "deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

sudo curl -o /etc/apt/keyrings/apache-cassandra.asc https://downloads.apache.org/cassandra/KEYS

Cassandra'yı yükleme

sudo apt-get update
sudo apt-get install -y cassandra

Cassandra hizmeti için dinleme adresini ayarlayın.

Burada, daha fazla güvenlik için Cassandra VM'sinin dahili IP adresini kullanıyoruz.

Ana makinenizin IP adresini not edin.

Bulut kabuğunda aşağıdaki komutu kullanabilir veya bulut konsolunun VM Instances sayfasından alabilirsiniz.

gcloud compute instances describe cassandra-origin --format="get(networkInterfaces[0].networkIP)" --zone=us-central1-a

VEYA

sanal makine örneğine SSH ile bağlanma.

Yapılandırma dosyasındaki adresi güncelleme

Cassandra yapılandırma dosyasını güncellemek için istediğiniz düzenleyiciyi kullanabilirsiniz.

sudo vim /etc/cassandra/cassandra.yaml

rpc_address: değerini VM'nin IP adresiyle değiştirin, dosyayı kaydedin ve kapatın.

Sanal makinede Cassandra hizmetini etkinleştirme

sudo systemctl enable cassandra
sudo systemctl stop cassandra
sudo systemctl start cassandra
sudo systemctl status cassandra

3. Anahtar alanı ve tablo oluşturma {create-keyspace-and-table}

"Kullanıcılar" tablosu örneğini kullanıp "analiz" adlı bir anahtar alanı oluşturacağız.

export CQLSH_HOST=<IP of the VM added as rpc_address>
/usr/bin/cqlsh

cqlsh içinde:

-- Create keyspace (adjust replication for production)
CREATE KEYSPACE analytics WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};

-- Use the keyspace
USE analytics;

-- Create the users table
CREATE TABLE users (
    id  int PRIMARY KEY,
    active  boolean,
    username  text,
);

-- Insert 5 rows
INSERT INTO users (id, active, username) VALUES (1, true, 'd_knuth');
INSERT INTO users (id, active, username) VALUES (2, true, 'sanjay_ghemawat');
INSERT INTO users (id, active, username) VALUES (3, false, 'gracehopper');
INSERT INTO users (id, active, username) VALUES (4, true, 'brian_kernighan');
INSERT INTO users (id, active, username) VALUES (5, true, 'jeff_dean');
INSERT INTO users (id, active, username) VALUES (6, true, 'jaime_levy');
-- Select all users to verify the inserts.
SELECT * from users;
-- Exit cqlsh
EXIT;

SSH oturumunu açık bırakın veya bu VM'nin IP adresini (hostname -I) not edin.

Sıradaki

Ardından bir Cloud Spanner örneği ve veritabanı oluşturacaksınız.

4. Spanner örneği oluşturma (Hedef)

Spanner'da örnek, bir veya daha fazla Spanner veritabanını barındıran bilgi işlem ve depolama kaynaklarının kümesidir. Bu codelab için bir Spanner veritabanı barındırmak üzere en az 1 örneğe ihtiyacınız olacak.

gcloud SDK sürümünü kontrol etme

Örnek oluşturmadan önce Google Cloud Shell'deki gcloud SDK'nın gerekli sürüme (gcloud SDK 531.0.0'dan daha yeni herhangi bir sürüm) güncellendiğinden emin olun. Aşağıdaki komutu uygulayarak gcloud SDK sürümünüzü bulabilirsiniz.

$ gcloud version | grep Google

Örnek çıkış:

Google Cloud SDK 489.0.0

Kullandığınız sürüm, gerekli 531.0.0 sürümünden (önceki örnekteki 489.0.0) daha eskiyse aşağıdaki komutu çalıştırarak Google Cloud SDK'nızı yükseltmeniz gerekir:

sudo apt-get update \
  && sudo apt-get --only-upgrade install google-cloud-cli-anthoscli google-cloud-cli-cloud-run-proxy kubectl google-cloud-cli-skaffold google-cloud-cli-cbt google-cloud-cli-docker-credential-gcr google-cloud-cli-spanner-migration-tool google-cloud-cli-cloud-build-local google-cloud-cli-pubsub-emulator google-cloud-cli-app-engine-python google-cloud-cli-kpt google-cloud-cli-bigtable-emulator google-cloud-cli-datastore-emulator google-cloud-cli-spanner-emulator google-cloud-cli-app-engine-go google-cloud-cli-app-engine-python-extras google-cloud-cli-config-connector google-cloud-cli-package-go-module google-cloud-cli-istioctl google-cloud-cli-anthos-auth google-cloud-cli-gke-gcloud-auth-plugin google-cloud-cli-app-engine-grpc google-cloud-cli-kubectl-oidc google-cloud-cli-terraform-tools google-cloud-cli-nomos google-cloud-cli-local-extract google-cloud-cli-firestore-emulator google-cloud-cli-harbourbridge google-cloud-cli-log-streaming google-cloud-cli-minikube google-cloud-cli-app-engine-java google-cloud-cli-enterprise-certificate-proxy google-cloud-cli

Spanner API'yi etkinleştirme

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun. Şu anda yapılandırılmış proje kimliğini bulmak için aşağıdaki ilk komutu kullanın. Sonuç beklenmedikse aşağıdaki ikinci komut doğru olanı ayarlar.

gcloud config get-value project
gcloud config set project [YOUR-DESIRED-PROJECT-ID]

Varsayılan bölgenizi us-central1 olarak yapılandırın. Bunu, Spanner bölgesel yapılandırmaları tarafından desteklenen farklı bir bölgeyle değiştirebilirsiniz.

gcloud config set compute/region us-central1

Spanner API'yi etkinleştirin:

gcloud services enable spanner.googleapis.com

Spanner örneğini oluşturma

Bu bölümde ücretsiz deneme örneği veya sağlanmış bir örnek oluşturacaksınız. Bu codelab'de kullanılan Spanner Cassandra bağdaştırıcısı örnek kimliği cassandra-adapter-demo olup export komut satırı kullanılarak SPANNER_INSTANCE_ID değişkeni olarak ayarlanmıştır. İsteğe bağlı olarak kendi örnek kimliği adınızı seçebilirsiniz.

Ücretsiz deneme Spanner örneği oluşturma

Google Hesabı olan ve projesinde Cloud Billing'i etkinleştirmiş herkes 90 günlük Spanner ücretsiz deneme örneğinden yararlanabilir. Ücretsiz deneme örneğinizi ücretli bir örneğe yükseltmeyi seçmediğiniz sürece sizden ücret alınmaz. Spanner Cassandra Adaptörü, ücretsiz deneme örneğinde desteklenir. Uygunsa Cloud Shell'i açıp şu komutu çalıştırarak ücretsiz deneme örneği oluşturun:

export SPANNER_INSTANCE_ID=cassandra-adapter-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
  --config=$SPANNER_REGION \
  --instance-type=free-instance \
  --description="Spanner Cassandra Adapter demo"

Komut çıkışı:

gcloud spanner instances create $SPANNER_INSTANCE_ID \
  --config=$SPANNER_REGION \
  --instance-type=free-instance \
  --description="Spanner Cassandra Adapter demo"
Creating instance...done.

5. Cassandra şemasını ve veri modelini Spanner'a taşıma

Cassandra veritabanından Spanner'a veri geçişinin ilk ve önemli aşaması, mevcut Cassandra şemasının Spanner'ın yapısal ve veri türü gereksinimlerine uygun şekilde dönüştürülmesini içerir.

Bu karmaşık şema taşıma sürecini kolaylaştırmak için Spanner'ın sağladığı iki değerli açık kaynak aracından birini kullanın:

  1. Spanner Taşıma Aracı: Bu araç, mevcut bir Cassandra veritabanına bağlanıp şemayı Spanner'a taşıyarak şemayı taşımanıza yardımcı olur. Bu araç, gcloud cli kapsamında sunulmaktadır.
  2. Spanner Cassandra Şema Aracı: Bu araç, Cassandra'dan dışa aktarılan bir DDL'yi Spanner'a dönüştürmenize yardımcı olur. Codelab için bu iki araçtan herhangi birini kullanabilirsiniz. Bu codelab'de, şemayı taşımak için Spanner Taşıma Aracı'nı kullanacağız.

Spanner Taşıma Aracı

Spanner Taşıma Aracı, MySQL, Postgres ve Cassandra gibi çeşitli veri kaynaklarından şemaları taşımaya yardımcı olur.

Bu codelab'in amacı doğrultusunda bu aracın CLI'sını kullanacak olsak da, aracın kullanıcı arayüzü tabanlı sürümünü keşfetmenizi ve kullanmanızı önemle tavsiye ederiz. Bu sürüm, uygulanmadan önce Spanner şemanızda değişiklik yapmanıza da yardımcı olur.

spanner-migration-tool komutunun Cloud Shell'de çalıştırılması durumunda Cassandra VM'nizin dahili IP adresine erişemeyebileceğini unutmayın. Bu nedenle, Cassandra'yı yüklediğiniz sanal makinede aynı komutu çalıştırmanızı öneririz.

Cassandra'yı yüklediğiniz sanal makinede aşağıdakileri yürütün.

Spanner Taşıma Aracı'nı yükleme

sudo apt-get update
sudo apt-get install --upgrade google-cloud-sdk-spanner-migration-tool

Yükleme sırasında herhangi bir sorunla karşılaşırsanız ayrıntılı adımlar için installing-spanner-migration-tool başlıklı makaleyi inceleyin.

Gcloud Kimlik Bilgilerini Yenileme

gcloud auth login
gcloud auth application-default login

Şemayı Taşıma

export CASSANDRA_HOST=`<ip address of the VM used as rpc_address above>`
export PROJECT=`<PROJECT_ID>`
gcloud alpha spanner migrate schema \
  --source=cassandra \
  --source-profile="host=${CASSANDRA_HOST},user=cassandra,password=cassandra,port=9042,keyspace=analytics,datacenter=datacenter1" \
  --target-profile="project=${PROJECT},instance=cassandra-adapter-demo,dbName=analytics" \
  --project=${PROJECT}

Spanner DDL'yi doğrulama

gcloud spanner databases ddl describe analytics --instance=cassandra-adapter-demo

Şema taşıma işleminin sonunda bu komutun çıkışı şu şekilde olmalıdır:

CREATE TABLE users (
  active BOOL OPTIONS (
    cassandra_type = 'boolean'
  ),
  id INT64 NOT NULL OPTIONS (
    cassandra_type = 'int'
  ),
  username STRING(MAX) OPTIONS (
    cassandra_type = 'text'
  ),
) PRIMARY KEY(id);

(İsteğe bağlı) Dönüştürülen DDL'yi görüntüleme

Dönüştürülen DDL'yi görebilir ve Spanner'da yeniden uygulayabilirsiniz (ek değişiklik yapmanız gerekirse).

cat `ls -t cassandra_*schema.ddl.txt  | head -n 1`

Bu komutun çıkışı şu olur:

CREATE TABLE `users` (
        `active` BOOL OPTIONS (cassandra_type = 'boolean'),
        `id` INT64 NOT NULL  OPTIONS (cassandra_type = 'int'),
        `username` STRING(MAX) OPTIONS (cassandra_type = 'text'),
) PRIMARY KEY (`id`)

(İsteğe bağlı) Dönüşüm raporunu görüntüleyin.

cat `ls -t cassandra_*report.txt  | head -n 1`

Dönüşüm raporunda, dikkat etmeniz gereken sorunlar vurgulanır. Örneğin, bir sütunun maksimum hassasiyeti kaynak ile Spanner arasında eşleşmiyorsa bu durum burada vurgulanır.

6. Geçmiş verilerinizi toplu olarak dışa aktarma

Toplu taşıma işlemini gerçekleştirmek için:

  1. Mevcut bir GCS paketini sağlayın veya yeniden kullanın.
  2. Cassandra sürücüsü yapılandırma dosyasını pakete yükleyin.
  3. Toplu taşıma işlemini başlatın.

Toplu taşımayı Cloud Shell'den veya yeni sağlanan sanal makineden başlatabilirsiniz. Ancak yapılandırma dosyası oluşturma gibi bazı adımlar dosyaları yerel depolama alanında kalıcı hale getireceğinden bu codelab için sanal makineyi kullanmanızı öneririz.

GCS paketi sağlama

Bu adımın sonunda bir GCS paketi sağlamış ve yolunu CASSANDRA_BUCKET_NAME adlı bir değişkene aktarmış olmanız gerekir. Mevcut bir paketi yeniden kullanmak istiyorsanız yolu dışa aktararak devam edebilirsiniz.

if [ -z ${CASSANDRA_BUCKET_NAME} ]; then
  export CASSANDRA_BUCKET_NAME="gs://cassandra-demo-$(date +%Y-%m-%d-%H-%M-%S)-$(head /dev/urandom | tr -dc a-z | head -c 20)"
  gcloud storage buckets create "${CASSANDRA_BUCKET_NAME}"
else
  echo "using existing bucket ${CASSANDRA_BUCKET_NAME}"
fi

Sürücü yapılandırma dosyası oluşturma ve yükleme

Burada çok temel bir Cassandra sürücüsü yapılandırma dosyası yüklüyoruz. Dosyanın tam biçimi için lütfen bu makaleyi inceleyin.

# Configuration for the Cassandra instance and GCS bucket
INSTANCE_NAME="cassandra-origin"
ZONE="us-central1-a"
CASSANDRA_PORT="9042"

# Retrieve the internal IP address of the Cassandra instance
CASSANDRA_IP=$(gcloud compute instances describe "${INSTANCE_NAME}" \
    --format="get(networkInterfaces[0].networkIP)" \
    --zone="${ZONE}")

# Check if the IP was successfully retrieved
if [[ -z "${CASSANDRA_IP}" ]]; then
    echo "Error: Could not retrieve Cassandra instance IP."
    exit 1
fi

# Define the full contact point
CONTACT_POINT="${CASSANDRA_IP}:${CASSANDRA_PORT}"

# Create a temporary file with the specified content
TMP_FILE=$(mktemp)
cat <<EOF > "${TMP_FILE}"
# Reference configuration for the DataStax Java driver for Apache Cassandra®.
# This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md.
datastax-java-driver {
  basic.contact-points = ["${CONTACT_POINT}"]
  basic.session-keyspace = analytics
  basic.load-balancing-policy.local-datacenter = datacenter1
  advanced.auth-provider {
    class = PlainTextAuthProvider
    username = cassandra
    password = cassandra
  }
}
EOF

# Upload the temporary file to the specified GCS bucket
if gsutil cp "${TMP_FILE}" "${CASSANDRA_BUCKET_NAME}/cassandra.conf"; then
    echo "Successfully uploaded ${TMP_FILE} to ${CASSANDRA_BUCKET_NAME}/cassandra.conf"

    # Concatenate (cat) the uploaded file from GCS
    echo "Displaying the content of the uploaded file:"
    gsutil cat "${CASSANDRA_BUCKET_NAME}/cassandra.conf"
else
    echo "Error: Failed to upload file to GCS."
fi

# Clean up the temporary file
rm "${TMP_FILE}"

Toplu taşıma işlemi çalıştırma

Bu, verilerinizin Spanner'a toplu olarak taşınmasını sağlamak için çalıştırılacak örnek bir komuttur. Gerçek üretim kullanım alanlarında, makine türünü ve sayısını istediğiniz ölçeğe ve işleme hızına göre ayarlamanız gerekir. Seçeneklerin tam listesi için lütfen README_Sourcedb_to_Spanner.md#cassandra-to-spanner-bulk-migration adresini ziyaret edin.

gcloud dataflow flex-template run "sourcedb-to-spanner-flex-job" \
  --project "`gcloud config get-value project`" \
  --region "us-central1" \
  --max-workers "2" \
  --num-workers "1" \
  --worker-machine-type "e2-standard-8" \
  --template-file-gcs-location "gs://dataflow-templates-us-central1/latest/flex/Sourcedb_to_Spanner_Flex" \
  --additional-experiments="[\"disable_runner_v2\"]" \
  --parameters "sourceDbDialect=CASSANDRA" \
  --parameters "insertOnlyModeForSpannerMutations=true" \
  --parameters "sourceConfigURL=$CASSANDRA_BUCKET_NAME/cassandra.conf" \
  --parameters "instanceId=cassandra-adapter-demo" \
  --parameters "databaseId=analytics" \
  --parameters "projectId=`gcloud config get-value project`" \
  --parameters "outputDirectory=$CASSANDRA_BUCKET_NAME/output" \
  --parameters "batchSizeForSpannerMutations=1"

Bu işlem, aşağıdakine benzer bir çıktı oluşturur. Oluşturulan id değerini not edin ve Dataflow işinin durumunu sorgulamak için aynı değeri kullanın.

job:
  createTime: '2025-08-08T09:41:09.820267Z'
  currentStateTime: '1970-01-01T00:00:00Z'
  id: 2025-08-08_02_41_09-17637291823018196600
  location: us-central1
  name: sourcedb-to-spanner-flex-job
  projectId: span-cloud-ck-testing-external
  startTime: '2025-08-08T09:41:09.820267Z'

İşin durumunu kontrol etmek için aşağıdaki komutu çalıştırın ve durumun JOB_STATE_DONE olarak değişmesini bekleyin.

gcloud dataflow jobs describe --region=us-central1 <dataflow job id> | grep "currentState:"

İş başlangıçta şu şekilde sıralanmış durumda olur:

currentState: JOB_STATE_QUEUED

İş kuyruğa alınmış veya çalışıyor durumdayken işi izlemek için Cloud Console kullanıcı arayüzündeki Dataflow/Jobs sayfasını incelemenizi önemle tavsiye ederiz.

İşlem tamamlandığında işin durumu şu şekilde değişir:

currentState: JOB_STATE_DONE

7. Uygulamanızı Spanner'a yönlendirme (geçiş)

Taşıma aşamasından sonra verilerinizin doğruluğunu ve bütünlüğünü titizlikle doğruladıktan sonraki önemli adım, uygulamanızın operasyonel odağını eski Cassandra sisteminizden yeni doldurulmuş Spanner veritabanına geçirmektir. Bu kritik geçiş dönemine genellikle "geçiş" adı verilir.

Geçiş aşaması, canlı uygulama trafiğinin orijinal Cassandra kümesinden yönlendirildiği ve doğrudan sağlam ve ölçeklenebilir Spanner altyapısına bağlandığı anı ifade eder. Bu geçiş, uygulamaların Spanner Cassandra arayüzü kullanılırken özellikle Spanner'ın gücünden ne kadar kolay bir şekilde yararlanabileceğini gösterir.

Spanner Cassandra arayüzü sayesinde geçiş süreci kolaylaştırılır. Bu işlem, öncelikle tüm veri etkileşimi için istemci uygulamalarınızı yerel Spanner Cassandra İstemcisi'ni kullanacak şekilde yapılandırmayı içerir. Uygulamalarınız, Cassandra (kaynak) veritabanınızla iletişim kurmak yerine doğrudan Spanner'a (hedef) veri okumaya ve yazmaya sorunsuz bir şekilde başlayacak. Bağlantıdaki bu temel değişiklik genellikle SpannerCqlSessionBuilder kullanılarak sağlanır. Bu, Spanner Cassandra istemci kitaplığının Spanner örneğinize bağlantı kurulmasını kolaylaştıran önemli bir bileşenidir. Bu işlem, uygulamanızın tüm veri trafiği akışını Spanner'a yönlendirir.

cassandra-java-driver kitaplığını kullanan Java uygulamalarında Spanner Cassandra Java İstemcisi'nin entegrasyonu için yalnızca CqlSession başlatma işleminde küçük değişiklikler yapılması gerekir.

google-cloud-spanner-cassandra bağımlılığını alma

Spanner Cassandra İstemcisi'ni kullanmaya başlamak için önce bağımlılığını projenize dahil etmeniz gerekir. google-cloud-spanner-cassandra yapıları, Maven Central'da com.google.cloud grup kimliği altında yayınlanır. Java projenizdeki mevcut <dependencies> bölümünün altına aşağıdaki yeni bağımlılığı ekleyin. google-cloud-spanner-cassandra bağımlılığını nasıl dahil edeceğinize dair basitleştirilmiş bir örneği aşağıda bulabilirsiniz:

<!-- native Spanner Cassandra Client -->
<dependencies>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-spanner-cassandra</artifactId>
    <version>0.2.0</version>
  </dependency>
</dependencies>

Spanner'a bağlanmak için bağlantı yapılandırmasını değiştirme

Gerekli bağımlılığı ekledikten sonraki adım, Spanner veritabanına bağlanmak için bağlantı yapılandırmanızı değiştirmektir.

Bir Cassandra kümesiyle etkileşimde bulunan tipik bir uygulama, bağlantı kurmak için genellikle aşağıdakine benzer bir kod kullanır:

CqlSession session = CqlSession.builder()
        .addContactPoint(new InetSocketAddress("127.0.0.1", 9042))
        .withLocalDatacenter("datacenter1")
        .withAuthCredentials("username", "password")
        .build();

Bu bağlantıyı Spanner'a yönlendirmek için CqlSession oluşturma mantığınızı değiştirmeniz gerekir. cassandra-java-driver içindeki standart CqlSessionBuilder işlevini doğrudan kullanmak yerine, Spanner Cassandra istemcisi tarafından sağlanan SpannerCqlSession.builder() işlevini kullanırsınız. Bağlantı kodunuzu nasıl değiştireceğinize dair açıklayıcı bir örneği aşağıda bulabilirsiniz:

String databaseUri = "projects/<your-gcp-project>/instances/<your-spanner-instance>/databases/<your-spanner-database>";

CqlSession session = SpannerCqlSession.builder()
        .setDatabaseUri(databaseUri)
        .addContactPoint(new InetSocketAddress("localhost", 9042))
        .withLocalDatacenter("datacenter1")
        .build();

CqlSession öğesini SpannerCqlSession.builder() kullanarak oluşturup doğru databaseUri değerini sağladığınızda uygulamanız artık Spanner Cassandra istemcisi aracılığıyla hedef Spanner veritabanınıza bağlantı kurar. Bu önemli değişiklik, uygulamanız tarafından gerçekleştirilen tüm sonraki okuma ve yazma işlemlerinin Spanner'a yönlendirilmesini ve Spanner tarafından sunulmasını sağlayarak ilk geçişi etkili bir şekilde tamamlar. Bu noktada, uygulamanız artık Spanner'ın ölçeklenebilirlik ve güvenilirlik özellikleriyle desteklenerek beklendiği gibi çalışmaya devam etmelidir.

Perde Arkası: Spanner Cassandra İstemcisi Nasıl Çalışır?

Spanner Cassandra istemcisi, bir sürücü veya istemci aracı tarafından gönderilen ham Cassandra protokolü baytlarını yakalayan yerel bir TCP proxy'si olarak işlev görür. Ardından, bu baytları gerekli meta verilerle birlikte Spanner ile iletişim için gRPC mesajlarına sarar. Spanner'dan gelen yanıtlar tekrar Cassandra tel biçimine çevrilir ve kaynak sürücüye veya araca geri gönderilir.

26D34akkBHcMFFe.png

Spanner'ın tüm trafiği doğru şekilde sunduğundan emin olduğunuzda şunları yapabilirsiniz:

  • Orijinal Cassandra kümesini devre dışı bırakın.

8. Temizleme (isteğe bağlı)

Temizlemek için Cloud Console'un Spanner bölümüne gidip kod laboratuvarında oluşturduğumuz cassandra-adapter-demo örneğini silmeniz yeterlidir.

76D34akkJRcMFMr.png

Cassandra veritabanını silme (yerel olarak yüklenmişse veya kalıcı hale getirilmişse)

Cassandra'yı burada oluşturulan bir Compute Engine VM'sinin dışında yüklediyseniz verileri kaldırmak veya Cassandra'yı kaldırmak için uygun adımları uygulayın.

9. Tebrikler!

Sırada ne var?