תחילת העבודה עם 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 ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, אתם צריכים ליצור חשבון.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא נשארת לאורך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.

הגדרת החיוב

לאחר מכן, תצטרכו לפעול לפי ההוראות במדריך למשתמש בנושא ניהול החיוב user guide ולהפעיל את החיוב במסוף Cloud. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$. כדי להימנע מחיובים נוספים אחרי סיום המדריך הזה, אפשר להשבית את מופע Spanner בסוף ה-codelab לפי 'שלב 9: ניקוי'.

הפעלת Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-Google Cloud Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

55efc1aaa7a4d3ad.png

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

7ffe5cbb04455448.png

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות של הרשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.

הבא בתור

בשלב הבא, פורסים את אשכול Cassandra.

3. פריסת אשכול Cassandra (מקור)

ב-codelab הזה נגדיר אשכול Cassandra עם צומת יחיד ב-Compute Engine.

1. יצירת מכונה וירטואלית ב-GCE עבור Cassandra

כדי ליצור מכונה, משתמשים בפקודה gcloud compute instances create מ-Cloud Shell שהוקצה קודם.

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

כדי להיכנס אל VM Instances מהדף Navigation menu, פועלים לפי ההוראות הבאות: עוברים אל מכונות וירטואליות.

מחפשים את המכונה הווירטואלית cassandra-origin ומתחברים אליה באמצעות SSH כמו שמוצג:

חיבור ב-SSH למופע של מכונת VM.

מריצים את הפקודות הבאות כדי להתקין את Cassandra במכונת ה-VM שיצרתם והתחברתם אליה באמצעות SSH.

התקנת Java (תלות ב-Cassandra)

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

הוספת מאגר Cassandra

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

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

מגדירים את כתובת ההאזנה לשירות Cassandra.

כאן אנחנו משתמשים בכתובת ה-IP הפנימית של מכונת ה-VM של Cassandra כדי להגביר את רמת האבטחה.

שימו לב לכתובת ה-IP של המחשב המארח

אפשר להשתמש בפקודה הבאה ב-Cloud Shell או להעתיק אותה מהדף VM Instances במסוף Cloud.

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

או

חיבור ב-SSH למופע של מכונת VM.

עדכון הכתובת בקובץ ההגדרות

אפשר להשתמש בעורך לבחירתכם כדי לעדכן את קובץ ההגדרות של Cassandra

sudo vim /etc/cassandra/cassandra.yaml

משנים את rpc_address: לכתובת ה-IP של המכונה הווירטואלית, שומרים את הקובץ וסוגרים אותו.

הפעלת שירות Cassandra במכונה הווירטואלית

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

3. יצירת מרחב מפתחות וטבלה {create-keyspace-and-table}

נשתמש בדוגמה של טבלת 'משתמשים' וניצור מרחב מפתחות בשם 'ניתוח נתונים'.

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

בתוך 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,
);

-- 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 פתוח או רושמים את כתובת ה-IP של מכונת ה-VM הזו (hostname -I).

הבא בתור

לאחר מכן, תגדירו מסד נתונים ומופע של Cloud Spanner.

4. יצירת מופע Spanner (יעד)

ב-Spanner, ‏ instance הוא אשכול של משאבי מחשוב ואחסון שמארח מסד נתונים אחד או יותר של Spanner. כדי להשתמש ב-codelab הזה, תצטרכו לפחות מופע אחד לאירוח מסד נתונים של Spanner.

בדיקת גרסת gcloud SDK

לפני שיוצרים מופע, צריך לוודא ש-gcloud SDK ב-Google Cloud Shell עודכן לגרסה הנדרשת – כל גרסה שגבוהה מ-gcloud SDK 531.0.0. כדי למצוא את גרסת gcloud SDK, מריצים את הפקודה הבאה.

$ gcloud version | grep Google

פלט לדוגמה:

Google Cloud SDK 489.0.0

אם הגרסה שבה אתם משתמשים קודמת לגרסה הנדרשת 531.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, מוודאים שמזהה הפרויקט מוגדר. כדי למצוא את מזהה הפרויקט שמוגדר כרגע, משתמשים בפקודה הראשונה שבהמשך. אם התוצאה לא צפויה, הפקודה השנייה שבהמשך מגדירה את התוצאה הנכונה.

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

בקטע הזה, יוצרים מכונה וירטואלית לתקופת ניסיון בחינם או מכונה וירטואלית שהוקצתה. במהלך ה-codelab הזה, מזהה המופע של Spanner Cassandra Adapter שבו נעשה שימוש הוא cassandra-adapter-demo, שמוגדר כמשתנה SPANNER_INSTANCE_ID באמצעות שורת הפקודה export. אפשר גם לבחור שם משלכם למזהה המופע.

יצירת מכונת Spanner עם תקופת ניסיון בחינם

כל מי שיש לו חשבון Google ושהפעיל חיוב ב-Cloud בפרויקט שלו יכול להשתמש במכונה לתקופת ניסיון בחינם של Spanner למשך 90 יום. לא נחייב אתכם, אלא אם תבחרו לשדרג את המופע של תקופת הניסיון בחינם למופע בתשלום. המתאם של Spanner Cassandra נתמך במופע של תקופת הניסיון בחינם. אם אתם עומדים בדרישות, תוכלו ליצור מכונה במסגרת תקופת ניסיון בחינם. לשם כך, פותחים את 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.

5. העברת סכימה ומודל נתונים של Cassandra אל Spanner

השלב הראשוני והחשוב במעבר מנתונים ממסד נתונים של Cassandra ל-Spanner הוא שינוי הסכימה הקיימת של Cassandra כך שתתאים לדרישות המבניות ולסוגי הנתונים של Spanner.

כדי לייעל את תהליך ההעברה המורכב הזה של הסכימה, אפשר להשתמש באחד משני הכלים החשובים של קוד פתוח ש-Spanner מספקת:

  1. כלי ההעברה של Spanner: הכלי הזה עוזר להעביר סכימה על ידי התחברות למסד נתונים קיים של Cassandra והעברת הסכימה ל-Spanner. הכלי הזה זמין כחלק מ-gcloud cli.
  2. Spanner Cassandra Schema Tool: הכלי הזה עוזר להמיר DDL שיוצא מ-Cassandra ל-Spanner. אפשר להשתמש בכל אחד משני הכלים האלה בסדנת הקוד. ב-codelab הזה נשתמש בכלי להעברת נתונים ל-Spanner כדי להעביר את הסכימה.

כלי ההעברה של Spanner

כלי ההעברה של Spanner עוזר להעביר סכימה ממקורות נתונים שונים כמו MySQL,‏ Postgres,‏ Cassandra וכו'.

בסדנת הקוד הזו נשתמש בממשק שורת הפקודה של הכלי הזה, אבל מומלץ מאוד להתנסות בגרסה של הכלי שמבוססת על ממשק משתמש ולהשתמש בה. הגרסה הזו גם עוזרת לבצע שינויים בסכימת Spanner לפני שהיא מוחלת.

שימו לב: אם מריצים את spanner-migration-tool ב-Cloud Shell, יכול להיות שלא תהיה לו גישה לכתובת ה-IP הפנימית של מכונת Cassandra הווירטואלית. לכן, מומלץ להריץ את אותה פקודה במכונה הווירטואלית שבה התקנתם את Cassandra.

מריצים את הפקודה הבאה ב-VM שבו התקנתם את Cassandra.

התקנת כלי ההעברה של Spanner

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

אם נתקלים בבעיות בהתקנה, אפשר לעיין בשלבים המפורטים במאמר installing-spanner-migration-tool.

רענון פרטי הכניסה ל-Gcloud

gcloud auth login
gcloud auth application-default login

העברת סכימה

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

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

בסיום העברת הסכימה, הפלט של הפקודה הזו צריך להיות:

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

(אופציונלי) צפייה ב-DDL שהומר

אפשר לראות את ה-DDL שהומר ולהחיל אותו מחדש ב-Spanner (אם צריך לבצע שינויים נוספים)

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

הפלט של הפקודה הזו יהיה

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`)

(אופציונלי) צפייה בדוח ההמרות

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

בדוח ההמרות מודגשות הבעיות שכדאי לזכור. לדוגמה, אם יש אי התאמה בין רמת הדיוק המקסימלית של עמודה במקור לבין רמת הדיוק המקסימלית שלה ב-Spanner, היא תודגש כאן.

6. ייצוא נתונים היסטוריים בכמות גדולה

כדי לבצע את ההעברה בכמות גדולה, תצטרכו:

  1. הקצאת קטגוריה חדשה ב-GCS או שימוש בקטגוריה קיימת.
  2. העלאת קובץ ההגדרות של Cassandra Driver לקטגוריית האחסון
  3. מפעילים העברה בכמות גדולה.

אפשר להפעיל את ההעברה בכמות גדולה מ-Cloud Shell או מהמכונה הווירטואלית החדשה שהוקצתה, אבל מומלץ להשתמש במכונה הווירטואלית בשביל ה-codelab הזה, כי חלק מהשלבים, כמו יצירת קובץ הגדרה, ישמרו קבצים באחסון המקומי.

הקצאת קטגוריית GCS.

בסוף השלב הזה, אמור להיות לכם מאגר GCS שהוקצה וייצאתם את הנתיב שלו במשתנה בשם CASSANDRA_BUCKET_NAME. אם רוצים לעשות שימוש חוזר בקטגוריה קיימת, אפשר פשוט להמשיך ולייצא את הנתיב.

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

יצירה והעלאה של קובץ הגדרות של Driver

כאן אנחנו מעלים קובץ תצורה בסיסי מאוד של מנהל התקן של Cassandra. כאן מפורט הפורמט המלא של הקובץ.

# 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}"

הפעלת העברה בכמות גדולה

זוהי פקודה לדוגמה להפעלת העברה בכמות גדולה של הנתונים ל-Spanner. במקרי שימוש בפועל בסביבת ייצור, תצטרכו לשנות את סוג המכונה ואת מספר המכונות בהתאם להיקף ולתפוקה הרצויים. הרשימה המלאה של האפשרויות זמינה במאמר README_Sourcedb_to_Spanner.md#cassandra-to-spanner-bulk-migration.

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"

יוצג פלט כמו בדוגמה הבאה. שימו לב ל-id שנוצר והשתמשו בו כדי לשאול על הסטטוס של עבודת Dataflow.

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'

מריצים את הפקודה שלמטה כדי לבדוק את סטטוס העבודה ומחכים עד שהסטטוס ישתנה ל-JOB_STATE_DONE.

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

בהתחלה, העבודה תהיה במצב של המתנה בתור, כמו

currentState: JOB_STATE_QUEUED

בזמן שהעבודה נמצאת בתור או פועלת, מומלץ מאוד לעיין בדף Dataflow/Jobs בממשק המשתמש של מסוף Cloud כדי לעקוב אחרי העבודה.

אחרי שהפעולה תסתיים, סטטוס העבודה ישתנה ל:

currentState: JOB_STATE_DONE

7. הפניית האפליקציה אל Spanner (מעבר)

אחרי שמאמתים בקפידה את הדיוק והשלמות של הנתונים אחרי שלב ההעברה, השלב המרכזי הוא להעביר את המיקוד התפעולי של האפליקציה ממערכת Cassandra מדור קודם למסד הנתונים החדש של Spanner שאוכלס בנתונים. תקופת המעבר הקריטית הזו נקראת בדרך כלל מעבר.

שלב המעבר מסמן את הרגע שבו תנועת הנתונים של האפליקציה בזמן אמת מנותבת מחדש מאשכול Cassandra המקורי ומחוברת ישירות לתשתית Spanner החזקה והניתנת להרחבה. המעבר הזה מדגים כמה קל להשתמש ביכולות של Spanner באפליקציות, במיוחד כשמשתמשים בממשק Spanner Cassandra.

בעזרת ממשק Spanner Cassandra, תהליך המעבר פשוט יותר. התהליך כולל בעיקר הגדרה של אפליקציות הלקוח כך שישתמשו בלקוח המקורי של Spanner Cassandra לכל האינטראקציות עם הנתונים. במקום לתקשר עם מסד הנתונים של Cassandra (המקור), האפליקציות יתחילו לקרוא ולכתוב נתונים ישירות ב-Spanner (היעד). השינוי המהותי הזה בקישוריות מושג בדרך כלל באמצעות SpannerCqlSessionBuilder, רכיב מרכזי בספריית הלקוח של Spanner Cassandra שמסייע ליצור חיבורים למופע Spanner. הפעולה הזו למעשה מעבירה את כל תנועת הנתונים של האפליקציה ל-Spanner.

באפליקציות Java שכבר נעשה בהן שימוש בספרייה cassandra-java-driver, שילוב של Spanner Cassandra Java Client דורש רק שינויים קלים בהגדרה הראשונית של CqlSession.

קבלת התלות google-cloud-spanner-cassandra

כדי להתחיל להשתמש בלקוח Spanner Cassandra, קודם צריך לשלב את התלות שלו בפרויקט. הארטיפקטים google-cloud-spanner-cassandra מתפרסמים ב-Maven Central, תחת מזהה הקבוצה com.google.cloud. מוסיפים את יחסי התלות החדשים הבאים בקטע <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 לוגיקת היצירה. במקום להשתמש ישירות בפונקציה CqlSessionBuilder הרגילה מ-cassandra-java-driver, תשתמשו בפונקציה SpannerCqlSession.builder() שסופקה על ידי Spanner Cassandra Client. הנה דוגמה להמחשה של שינוי קוד החיבור:

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 Client למסד הנתונים של Spanner שמוגדר כיעד. השינוי המרכזי הזה מבטיח שכל פעולות הקריאה והכתיבה הבאות שהאפליקציה תבצע יופנו אל Spanner ויטופלו על ידו, וכך יושלם המעבר הראשוני. בשלב הזה, האפליקציה אמורה להמשיך לפעול כצפוי, ועכשיו היא מבוססת על יכולת ההתאמה והאמינות של Spanner.

הפרטים הטכניים: איך פועל לקוח Spanner Cassandra

לקוח Spanner Cassandra פועל כ-TCP Proxy מקומי, ומיירט את הבייטים של פרוטוקול Cassandra הגולמי שנשלחים על ידי מנהל התקן או כלי לקוח. לאחר מכן, הוא עוטף את הבייטים האלה יחד עם המטא-נתונים הדרושים בהודעות gRPC לצורך תקשורת עם Spanner. התשובות מ-Spanner מתורגמות בחזרה לפורמט של Cassandra ונשלחות בחזרה לדרייבר או לכלי המקוריים.

26D34akkBHcMFFe.png

אחרי שמוודאים ש-Spanner משרת את כל התנועה בצורה נכונה, אפשר בסופו של דבר:

  • להוציא משימוש את אשכול Cassandra המקורי.

8. ניקוי (אופציונלי)

כדי לנקות, פשוט נכנסים אל הקטע Spanner ב-Cloud Console ומוחקים את מופע cassandra-adapter-demo שיצרנו ב-codelab.

76D34akkJRcMFMr.png

מחיקה של מסד נתונים של Cassandra (אם הוא מותקן באופן מקומי או נשמר)

אם התקנתם את Cassandra מחוץ למכונה וירטואלית ב-Compute Engine שנוצרה כאן, עליכם לפעול לפי השלבים המתאימים כדי להסיר את הנתונים או להסיר את ההתקנה של Cassandra.

9. מעולה!

מה השלב הבא?