การเริ่มต้นใช้งาน Spanner Cassandra Adapter

1. บทนำ

Spanner เป็นบริการฐานข้อมูลที่รองรับการปรับขนาดในแนวนอนและมีการจัดการครบวงจรซึ่งจัดจำหน่ายทั่วโลก เหมาะสำหรับทั้งภาระงานเชิงสัมพันธ์และไม่ใช่เชิงสัมพันธ์

อินเทอร์เฟซ Cassandra ของ Spanner ช่วยให้คุณใช้ประโยชน์จากโครงสร้างพื้นฐานที่มีการจัดการครบวงจร ปรับขนาดได้ และพร้อมใช้งานสูงของ Spanner โดยใช้เครื่องมือและไวยากรณ์ Cassandra ที่คุ้นเคย

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าอินสแตนซ์และฐานข้อมูล Spanner
  • วิธีแปลงสคีมาและโมเดลข้อมูล Cassandra
  • วิธีทำให้ใช้งานได้และกำหนดค่าการเขียนแบบคู่สําหรับข้อมูลที่เข้ามา
  • วิธีส่งออกข้อมูลย้อนหลังจำนวนมากจาก Cassandra ไปยัง Spanner
  • วิธีตรวจสอบข้อมูลเพื่อให้แน่ใจว่าข้อมูลสมบูรณ์ตลอดกระบวนการย้ายข้อมูล
  • วิธีชี้แอปพลิเคชันไปยัง Spanner แทน Cassandra

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud ที่เชื่อมต่อกับบัญชีสำหรับการเรียกเก็บเงิน
  • เข้าถึงเครื่องที่ติดตั้งและกำหนดค่า gcloud CLI แล้ว หรือใช้ Google Cloud Shell
  • เว็บเบราว์เซอร์ เช่น Chrome หรือ Firefox

2. การตั้งค่าและข้อกำหนด

สร้างโปรเจ็กต์ GCP

ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อดังกล่าวจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ

การตั้งค่าการเรียกเก็บเงิน

จากนั้น คุณจะต้องทําตามคู่มือผู้ใช้การจัดการการเรียกเก็บเงิน และเปิดใช้การเรียกเก็บเงินใน Cloud Console ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD หากไม่ต้องการให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ ให้ปิดอินสแตนซ์ Spanner เมื่อสิ้นสุดการใช้งานโค้ดแล็บโดยทำตาม "ขั้นตอนที่ 9 การเก็บกวาด"

เริ่มต้น Cloud Shell

แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย

ถัดไป

ต่อไป คุณจะนำคลัสเตอร์ Cassandra ไปใช้งาน

3. ติดตั้งใช้งานคลัสเตอร์ Cassandra (Origin)

ในโค้ดแล็บนี้ เราจะตั้งค่าคลัสเตอร์ Cassandra แบบโหนดเดียวใน Compute Engine

1. สร้าง VM ใน GCE สําหรับ Cassandra

หากต้องการสร้างอินสแตนซ์ ให้ใช้คำสั่ง gcloud compute instances create

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

2. ติดตั้ง Cassandra

# Install Java (Cassandra dependency)
sudo apt-get update
sudo apt-get install -y openjdk-11-jre-headless

# Add Cassandra repository
echo "deb [https://debian.cassandra.apache.org](https://debian.cassandra.apache.org) 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl [https://downloads.apache.org/cassandra/KEYS](https://downloads.apache.org/cassandra/KEYS) | sudo apt-key add -

# Install Cassandra
sudo apt-get update
sudo apt-get install -y cassandra

3. สร้างคีย์สเปซและตาราง

เราจะใช้ตัวอย่างตาราง users และสร้างคีย์สเปซชื่อ "analytics"

cd ~/apache-cassandra
bin/cqlsh <your-localhost-ip? 9042  #starts the cql shell

ภายใน cqlsh

-- 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,
);

-- Exit cqlsh
EXIT;

ปล่อยเซสชัน SSH ไว้หรือจดที่อยู่ IP ของ VM นี้ (ชื่อโฮสต์ -I)

ถัดไป

ต่อไป คุณจะต้องตั้งค่าอินสแตนซ์และฐานข้อมูล Cloud Spanner

4. สร้างอินสแตนซ์และฐานข้อมูล Spanner (เป้าหมาย)

ใน Spanner อินสแตนซ์คือคลัสเตอร์ของทรัพยากรการประมวลผลและพื้นที่เก็บข้อมูลที่โฮสต์ฐานข้อมูล Spanner อย่างน้อย 1 รายการ คุณจะต้องมีอินสแตนซ์อย่างน้อย 1 รายการเพื่อโฮสต์ฐานข้อมูล Spanner สําหรับโค้ดแล็บนี้

ตรวจสอบเวอร์ชัน gcloud SDK

ก่อนสร้างอินสแตนซ์ ให้ตรวจสอบว่า gcloud SDK ใน Google Cloud Shell ได้รับการอัปเดตเป็นเวอร์ชันที่จําเป็นแล้ว ซึ่งก็คือ gcloud SDK 493.0.0 คุณดูเวอร์ชัน gcloud SDK ได้โดยทำตามคําสั่งด้านล่าง

$ gcloud version | grep Google

ตัวอย่างเอาต์พุต

Google Cloud SDK 489.0.0

หากเวอร์ชันที่คุณใช้อยู่เก่ากว่าเวอร์ชัน 493.0.0 ที่กำหนด (489.0.0 ในตัวอย่างก่อนหน้า) คุณจะต้องอัปเกรด Google Cloud SDK โดยเรียกใช้คําสั่งต่อไปนี้

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

ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว ใช้คำสั่งแรกด้านล่างเพื่อค้นหารหัสโปรเจ็กต์ที่กำหนดค่าไว้ในปัจจุบัน หากผลลัพธ์ไม่เป็นไปตามที่คาดไว้ คำสั่งที่ 2 ด้านล่างจะตั้งค่าที่ถูกต้อง

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

กำหนดค่าภูมิภาคเริ่มต้นเป็น us-central1 คุณเปลี่ยนเป็นภูมิภาคอื่นที่ การกำหนดค่าระดับภูมิภาคของ Spanner รองรับได้

gcloud config set compute/region us-central1

เปิดใช้ Spanner API

gcloud services enable spanner.googleapis.com

สร้างอินสแตนซ์ Spanner

ในส่วนนี้ คุณจะต้องสร้างอินสแตนซ์ช่วงทดลองใช้ฟรีหรืออินสแตนซ์ที่จัดสรรไว้ ตลอดทั้งโค้ดแล็บนี้ รหัสอินสแตนซ์ของ Spanner Cassandra Adapter ที่ใช้คือ cassandra-adapter-demo ซึ่งตั้งค่าเป็นตัวแปร SPANNER_INSTANCE_ID โดยใช้บรรทัดคำสั่ง export คุณเลือกชื่อรหัสอินสแตนซ์ของคุณเองได้

สร้างอินสแตนซ์ Spanner ช่วงทดลองใช้ฟรี

อินสแตนซ์ช่วงทดลองใช้ฟรี 90 วันของ Spanner พร้อมให้บริการแก่ทุกคนที่มีบัญชี Google ซึ่งเปิดใช้การเรียกเก็บเงินในระบบคลาวด์ในโปรเจ็กต์ ระบบจะไม่เรียกเก็บเงินจากคุณ เว้นแต่คุณจะเลือกอัปเกรดอินสแตนซ์ช่วงทดลองใช้ฟรีเป็นอินสแตนซ์แบบชำระเงิน อินสแตนซ์ช่วงทดลองใช้ฟรีรองรับ Spanner Cassandra Adapter หากมีสิทธิ์ ให้สร้างอินสแตนซ์ช่วงทดลองใช้ฟรีโดยเปิด Cloud Shell แล้วเรียกใช้คําสั่งนี้

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"

เอาต์พุตของคำสั่ง

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

สร้างฐานข้อมูล

เมื่ออินสแตนซ์ทํางานแล้ว คุณก็สร้างฐานข้อมูลได้ ฐานข้อมูลคือที่ที่คุณกําหนดสคีมา นอกจากนี้ คุณยังควบคุมผู้ที่มีสิทธิ์เข้าถึงฐานข้อมูล ตั้งค่าการเข้ารหัสที่กำหนดเอง กำหนดค่าเครื่องมือเพิ่มประสิทธิภาพ และกำหนดระยะเวลาการเก็บรักษาได้ด้วย

ระบบจะสร้างฐานข้อมูลในอินสแตนซ์ที่มีรหัส SPANNER_INSTANCE_ID

หากต้องการสร้างฐานข้อมูล ให้ใช้เครื่องมือบรรทัดคำสั่ง gcloud โดยทำดังนี้

export SPANNER_DATABASE=analytics
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

เอาต์พุตจากคำสั่ง:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

5. ย้ายสคีมา Cassandra และโมเดลข้อมูลไปยัง Spanner

ระยะแรกและสำคัญในการเปลี่ยนข้อมูลจากฐานข้อมูล Cassandra ไปยัง Spanner เกี่ยวข้องกับการเปลี่ยนรูปแบบสคีมา Cassandra ที่มีอยู่ให้สอดคล้องกับข้อกำหนดด้านโครงสร้างและประเภทข้อมูลของ Spanner

Spanner มีเครื่องมือโอเพนซอร์สที่มีประโยชน์ซึ่งเรียกว่าเครื่องมือสคีมา Spanner Cassandra เพื่อปรับปรุงกระบวนการย้ายข้อมูลสคีมาที่ซับซ้อนนี้

เครื่องมือสคีมาของ Spanner Cassandra

เครื่องมือสคีมา Cassandra ของ Spanner เป็นเครื่องมือโอเพนซอร์สแบบสแตนด์อโลนสำหรับการประเมิน Spanner และการย้ายข้อมูลสคีมา ฟังก์ชันหลักคือการสร้างสคีมา Spanner โดยอัตโนมัติตามคำจำกัดความที่พบในสคีมา Cassandra ที่มีอยู่ เครื่องมือจะสร้างคําจํากัดความตาราง Spanner ที่เทียบเท่าโดยการวิเคราะห์โครงสร้างตาราง Cassandra, ประเภทข้อมูล และการกําหนดค่าคีย์หลัก ซึ่งจะช่วยลดงานที่ต้องทำด้วยตนเองซึ่งมักเกี่ยวข้องกับการแปลสคีมาได้อย่างมาก

ส่งออกสคีมา Cassandra

ก่อนที่จะใช้เครื่องมือสคีมา Spanner Cassandra ขั้นตอนแรกคือการดึงสคีมาออกจากคลัสเตอร์ Cassandra ปัจจุบัน ซึ่งทำได้โดยเชื่อมต่อกับคลัสเตอร์ Cassandra ที่มีอยู่ผ่าน cqlsh และส่งออกสคีมาจาก Cassandra

cqlsh [IP] "-e DESC SCHEMA" > orig_schema.cql

ในคำสั่งนี้ ให้แทนที่ [IP] ด้วยที่อยู่ IP หรือชื่อโฮสต์ของโหนดใดโหนดหนึ่งในคลัสเตอร์ Cassandra ส่วน -e DESC SCHEMA ของคําสั่งจะสั่งให้ cqlsh อธิบายสคีมาทั้งหมดของคลัสเตอร์ Cassandra จากนั้นระบบจะเปลี่ยนเส้นทางเอาต์พุตของคำสั่งนี้ซึ่งมีคำสั่ง CREATE KEYSPACE และ CREATE TABLE ไปยังไฟล์ชื่อ orig_schema.cql

เนื้อหาของไฟล์ orig_schema.cql นี้จะแสดงภาพร่างแบบข้อความของสคีมา Cassandra เนื้อหาของไฟล์ orig_schema.cql ควรมีลักษณะดังนี้

CREATE KEYSPACE analytics WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

CREATE TABLE analytics.users (
    id int PRIMARY KEY,
    active boolean,
    username text
) WITH additional_write_policy = '99p'
    AND allow_auto_snapshot = true
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND cdc = false
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND memtable = 'default'
    AND crc_check_chance = 1.0
    AND default_time_to_live = 0
    AND extensions = {}
    AND gc_grace_seconds = 864000
    AND incremental_backups = true
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair = 'BLOCKING'
    AND speculative_retry = '99p';

โคลนที่เก็บ

หากต้องการใช้เครื่องมือสคีมา Spanner Cassandra ขั้นตอนถัดไปคือการรับซอร์สโค้ดของเครื่องมือ ซึ่งทำได้โดยการโคลนที่เก็บที่โฮสต์ใน GitHub โคลนเครื่องมือสคีมา Spanner Cassandra จาก GitHub โดยพิมพ์คำสั่งต่อไปนี้ใน Cloud Shell

git clone https://github.com/cloudspannerecosystem/spanner-cassandra-schema-tool.git

จากนั้นเปลี่ยนไดเรกทอรีเป็นไดเรกทอรี "spanner-cassandra-schema-tool" ซึ่งคุณจะเรียกใช้คําสั่ง

cd spanner-cassandra-schema-tool

ติดตั้งการอ้างอิง

เครื่องมือสคีมา Spanner Cassandra เขียนขึ้นในภาษาโปรแกรม Go เครื่องมือนี้ใช้โมดูล (ไลบรารี) Go ภายนอกบางอย่างเพื่อให้ทำงานได้อย่างถูกต้อง คุณต้องดาวน์โหลดและจัดการทรัพยากรเหล่านี้ก่อนจึงจะเรียกใช้เครื่องมือได้ ในไดเรกทอรี spanner-cassandra-schema-tool ให้เรียกใช้คำสั่งต่อไปนี้

go mod download

ตั้งค่าข้อมูลเข้าสู่ระบบ Google Cloud

เครื่องมือนี้ใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน (ADC) เป็นแหล่งข้อมูลเข้าสู่ระบบสำหรับเชื่อมต่อกับฐานข้อมูล Spanner ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางของไฟล์คีย์บัญชีบริการ

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"

แทนที่ /path/to/your/service-account-file.json ด้วยเส้นทางจริงไปยังไฟล์คีย์บัญชีบริการที่ดาวน์โหลด การตั้งค่าตัวแปรสภาพแวดล้อมนี้ช่วยให้มั่นใจได้ว่าเครื่องมือสคีมา Spanner Cassandra จะตรวจสอบสิทธิ์กับโปรเจ็กต์ Google Cloud และอินสแตนซ์ Spanner ได้อย่างปลอดภัย

การใช้งาน

เมื่อติดตั้งข้อกำหนดเบื้องต้นและกำหนดค่าข้อมูลเข้าสู่ระบบ Google Cloud แล้ว คุณก็พร้อมเรียกใช้เครื่องมือสคีมา Cassandra ของ Spanner เพื่อสร้างสคีมา Spanner จากไฟล์สคีมา Cassandra ที่ส่งออก ไปที่ไดเรกทอรี spanner-cassandra-schema-tool ในเทอร์มินัลหรือ Cloud Shell แล้วเรียกใช้คำสั่ง go run ต่อไปนี้

go run schema_converter.go \
    --project $PROJECT_ID \
    --instance $SPANNER_INSTANCE_ID \
    --database $SPANNER_DATABASE \
    --cql orig_schema.cql \
    --dry-run

การทำงานด้วยตัวเลือก --dry-run จะสร้างสคีมาเท่านั้น ตรวจสอบและปรับแต่งการแมปประเภทข้อมูลและคอลัมน์คีย์หลักที่เครื่องมือสร้างขึ้น ตรวจสอบว่าประเภทข้อมูล Spanner แสดงถึงช่วง ความแม่นยำ และความหมายของประเภทฐานข้อมูล Cassandra ที่เกี่ยวข้องอย่างถูกต้อง

เครื่องมือนี้จะแมปประเภท Cassandra กับประเภท Spanner ตามที่ระบุไว้ในประเภทข้อมูล Cassandra ที่รองรับ

เอาต์พุตของคําสั่งจะมีลักษณะดังนี้

.....

[Converted Spanner statement]
CREATE TABLE users (
 id INT64 NOT NULL OPTIONS (cassandra_type = 'int'),
 active BOOL OPTIONS (cassandra_type = 'boolean'),
 username STRING(MAX) OPTIONS (cassandra_type = 'text'),
) PRIMARY KEY (id)
----------------------------------------------
Writing converted Spanner schema to: schema.txt
Dry run enabled. Skipping schema execution.
Schema conversion completed!

ในกรณีที่ต้องการให้ใช้สคีมากับ Spanner โดยอัตโนมัติด้วย คุณควรเรียกใช้ CLI โดยไม่ใช้ตัวเลือก --dry-run

7B2FCQSrtHfveuc.png

ตรวจสอบในคอนโซล Google Cloud ว่าตารางและตารางข้อมูลเมตาอยู่ในฐานข้อมูล Cloud Spanner

6. ตั้งค่าการเขียนแบบคู่สําหรับข้อมูลที่เข้ามา

[TODO]

7. ส่งออกข้อมูลย้อนหลังจํานวนมาก

[TODO]

8. ตรวจสอบข้อมูล

[TODO]

9. ชี้แอปพลิเคชันไปยัง Spanner (การเปลี่ยนผ่าน)

หลังจากตรวจสอบความถูกต้องและความสมบูรณ์ของข้อมูลอย่างละเอียดถี่ถ้วนหลังจากระยะการย้ายข้อมูลแล้ว ขั้นตอนสําคัญคือการเปลี่ยนโฟกัสการดําเนินการของแอปพลิเคชันจากระบบ Cassandra เดิมไปยังฐานข้อมูล Google Cloud Spanner ที่สร้างขึ้นใหม่ ระยะเวลาเปลี่ยนผ่านสําคัญนี้มักเรียกว่า "การเปลี่ยนผ่าน"

ระยะเปลี่ยนผ่านเป็นช่วงเวลาที่ระบบเปลี่ยนเส้นทางการเข้าชมแอปพลิเคชันเวอร์ชันที่ใช้งานอยู่ออกจากคลัสเตอร์ Cassandra เดิมและเชื่อมต่อกับโครงสร้างพื้นฐาน Spanner ที่มีประสิทธิภาพและปรับขนาดได้โดยตรง การเปลี่ยนแปลงนี้แสดงให้เห็นว่าแอปพลิเคชันใช้ประโยชน์จากความสามารถของ Spanner ได้อย่างง่ายดายเพียงใด โดยเฉพาะเมื่อใช้อินเทอร์เฟซ Spanner Cassandra

อินเทอร์เฟซ Spanner Cassandra ช่วยทำให้กระบวนการเปลี่ยนผ่านมีประสิทธิภาพมากขึ้น โดยหลักๆ แล้วจะเกี่ยวข้องกับการกำหนดค่าแอปพลิเคชันไคลเอ็นต์เพื่อใช้ไคลเอ็นต์ Spanner Cassandra ดั้งเดิมสำหรับการโต้ตอบกับข้อมูลทั้งหมด แอปพลิเคชันจะเริ่มอ่านและเขียนข้อมูลไปยัง Spanner (เป้าหมาย) โดยตรงอย่างราบรื่นแทนที่จะสื่อสารกับฐานข้อมูล Cassandra (ต้นทาง) การเปลี่ยนแปลงพื้นฐานในการเชื่อมต่อนี้มักจะเกิดขึ้นผ่านการใช้ SpannerCqlSessionBuilder ซึ่งเป็นคอมโพเนนต์หลักของไลบรารีไคลเอ็นต์ Spanner Cassandra ที่ช่วยสร้างการเชื่อมต่อกับอินสแตนซ์ Spanner ซึ่งจะเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดของแอปพลิเคชันไปยัง Spanner อย่างมีประสิทธิภาพ

สําหรับแอปพลิเคชัน Java ที่ใช้ไลบรารี cassandra-java-driver อยู่แล้ว การผสานรวมไคลเอ็นต์ Java ของ Spanner Cassandra จะต้องมีการเปลี่ยนแปลงเพียงเล็กน้อยในการเริ่มต้น CqlSession

การรับข้อกําหนดของ google-cloud-spanner-cassandra

หากต้องการเริ่มใช้ไคลเอ็นต์ Spanner Cassandra ก่อนอื่นคุณต้องรวมข้อกำหนดไว้ในโปรเจ็กต์ อาร์ติแฟกต์ google-cloud-spanner-cassandra ได้รับการเผยแพร่ใน Maven Central ภายใต้รหัสกลุ่ม com.google.cloud เพิ่ม Dependency ใหม่ต่อไปนี้ในส่วน <dependencies> ที่มีอยู่ของโปรเจ็กต์ Java ต่อไปนี้เป็นตัวอย่างแบบย่อของวิธีรวมข้อกําหนด google-cloud-spanner-cassandra

<!-- 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

เมื่อเพิ่มข้อกําหนดเบื้องต้นที่จําเป็นแล้ว ขั้นตอนถัดไปคือเปลี่ยนการกําหนดค่าการเชื่อมต่อเพื่อเชื่อมต่อกับฐานข้อมูล Spanner

แอปพลิเคชันทั่วไปที่โต้ตอบกับคลัสเตอร์ Cassandra มักจะใช้โค้ดที่คล้ายกับโค้ดต่อไปนี้เพื่อสร้างการเชื่อมต่อ

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

หากต้องการเปลี่ยนเส้นทางการเชื่อมต่อนี้ไปยัง Spanner คุณต้องแก้ไขตรรกะการสร้าง CqlSession คุณจะใช้ SpannerCqlSession.builder() ที่ได้จาก Spanner Cassandra Client แทนการใช้ CqlSessionBuilder มาตรฐานจาก cassandra-java-driver โดยตรง ต่อไปนี้เป็นภาพตัวอย่างของวิธีแก้ไขโค้ดการเชื่อมต่อ

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 โดยใช้ SpannerCqlSession.builder() และระบุ databaseUri ที่ถูกต้องจะทำให้แอปพลิเคชันสร้างการเชื่อมต่อผ่านไคลเอ็นต์ Spanner Cassandra กับฐานข้อมูล Spanner เป้าหมาย การเปลี่ยนแปลงที่สําคัญนี้ช่วยให้มั่นใจได้ว่าการดําเนินการอ่านและเขียนทั้งหมดที่ตามมาซึ่งแอปพลิเคชันของคุณทําจะส่งไปยังและดำเนินการโดย Spanner เพื่อให้การเปลี่ยนผ่านครั้งแรกเสร็จสมบูรณ์ เมื่อถึงจุดนี้ แอปพลิเคชันของคุณควรทํางานต่อไปได้ตามที่คาดไว้ โดยตอนนี้ได้รับการสนับสนุนจากความยืดหยุ่นและความน่าเชื่อถือของ Spanner

กลไกภายใน: วิธีการทำงานของไคลเอ็นต์ Spanner Cassandra

ไคลเอ็นต์ Spanner Cassandra จะทําหน้าที่เป็นพร็อกซี TCP ในพื้นที่ ซึ่งจะขัดจังหวะไบต์โปรโตคอล Cassandra ดิบซึ่งไดรเวอร์หรือเครื่องมือไคลเอ็นต์ส่ง จากนั้นจะรวมไบต์เหล่านี้พร้อมกับข้อมูลเมตาที่จำเป็นไว้ในข้อความ gRPC เพื่อสื่อสารกับ Spanner ระบบจะแปลคำตอบจาก Spanner กลับเป็นรูปแบบการแลกเปลี่ยนข้อมูลของ Cassandra และส่งกลับไปที่ไดรเวอร์หรือเครื่องมือต้นทาง

26D34akkBHcMFFe.png

เมื่อมั่นใจว่า Spanner ให้บริการทราฟฟิกทั้งหมดอย่างถูกต้องแล้ว คุณจะทำสิ่งต่อไปนี้ได้

  • หยุดการเขียนแบบคู่
  • เลิกใช้งานคลัสเตอร์ Cassandra เดิม

10. การเก็บกวาด (ไม่บังคับ)

หากต้องการล้างข้อมูล ให้ไปที่ส่วน Spanner ของ Cloud Console แล้วลบอินสแตนซ์ cassandra-adapter-demo ที่เราสร้างขึ้นในโค้ดแล็บ

76D34akkJRcMFMr.png

ลบฐานข้อมูล Cassandra (หากติดตั้งในเครื่องหรือเก็บไว้ถาวร)

หากคุณติดตั้ง Cassandra นอก VM ของ Compute Engine ที่สร้างขึ้นที่นี่ ให้ทำตามขั้นตอนที่เหมาะสมเพื่อนำข้อมูลออกหรือถอนการติดตั้ง Cassandra

11. ยินดีด้วย

ขั้นตอนถัดไปคือ