1. Giới thiệu
Spanner là một dịch vụ cơ sở dữ liệu được quản lý hoàn toàn, có khả năng mở rộng theo chiều ngang và được phân phối trên toàn cầu, phù hợp cho cả tải công việc quan hệ và không quan hệ.
Giao diện Cassandra của Spanner cho phép bạn tận dụng cơ sở hạ tầng có khả năng mở rộng, được quản lý hoàn toàn và có tính sẵn sàng cao của Spanner bằng cách sử dụng cú pháp và các công cụ quen thuộc của Cassandra.
Kiến thức bạn sẽ học được
- Cách thiết lập một thực thể và cơ sở dữ liệu Spanner.
- Cách chuyển đổi giản đồ Cassandra và mô hình dữ liệu.
- Cách xuất hàng loạt dữ liệu cũ từ Cassandra sang Spanner.
- Cách trỏ ứng dụng của bạn đến Spanner thay vì Cassandra.
Bạn cần có
- Một dự án trên Google Cloud được kết nối với một tài khoản thanh toán.
- Có quyền truy cập vào một máy có cài đặt và định cấu hình CLI
gcloud
hoặc sử dụng Google Cloud Shell. - Một trình duyệt web, chẳng hạn như Chrome hoặc Firefox.
2. Thiết lập và yêu cầu
Tạo một dự án trên GCP
Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị cho những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
- Mã dự án là giá trị duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án. - Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
Thiết lập thanh toán
Tiếp theo, bạn cần làm theo hướng dẫn sử dụng để quản lý thông tin thanh toán và bật tính năng thanh toán trong Cloud Console. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD. Để tránh phát sinh phí ngoài phạm vi hướng dẫn này, bạn có thể tắt phiên bản Spanner ở cuối lớp học lập trình bằng cách làm theo "Bước 9 Dọn dẹp".
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trong Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:
Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
Tiếp theo
Tiếp theo, bạn sẽ triển khai cụm Cassandra.
3. Triển khai cụm Cassandra (Nguồn)
Trong lớp học lập trình này, chúng ta sẽ thiết lập một cụm Cassandra một nút trên Compute Engine.
1. Tạo một máy ảo GCE cho Cassandra
Để tạo một phiên bản, hãy dùng lệnh gcloud compute instances create
từ cloud shell được cung cấp trước đó.
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. Cài đặt Cassandra
Chuyển đến VM Instances
từ trang Navigation menu
bằng cách làm theo hướng dẫn bên dưới: .
Tìm máy ảo cassandra-origin
rồi kết nối với máy ảo đó bằng SSH như minh hoạ:
.
Chạy các lệnh sau để cài đặt Cassandra trên máy ảo mà bạn đã tạo và truy cập bằng SSH.
Cài đặt Java (phần phụ thuộc Cassandra)
sudo apt-get update
sudo apt-get install -y openjdk-11-jre-headless
Thêm kho lưu trữ 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
Cài đặt Cassandra
sudo apt-get update
sudo apt-get install -y cassandra
Đặt địa chỉ nghe cho dịch vụ Cassandra.
Ở đây, chúng ta sử dụng địa chỉ IP nội bộ của máy ảo Cassandra để tăng cường bảo mật.
Ghi lại địa chỉ IP của máy chủ
Bạn có thể dùng lệnh sau trên cloud shell hoặc lấy lệnh này từ trang VM Instances
của bảng điều khiển đám mây.
gcloud compute instances describe cassandra-origin --format="get(networkInterfaces[0].networkIP)" --zone=us-central1-a
HOẶC
.
Cập nhật địa chỉ trong tệp cấu hình
Bạn có thể sử dụng trình chỉnh sửa mà mình chọn để cập nhật tệp cấu hình Cassandra
sudo vim /etc/cassandra/cassandra.yaml
thay đổi rpc_address:
thành địa chỉ IP của VM, lưu và đóng tệp.
Bật dịch vụ Cassandra trên máy ảo
sudo systemctl enable cassandra
sudo systemctl stop cassandra
sudo systemctl start cassandra
sudo systemctl status cassandra
3. Tạo một không gian khoá và bảng {create-keyspace-and-table}
Chúng ta sẽ sử dụng ví dụ về bảng "users" và tạo một keyspace có tên là "analytics".
export CQLSH_HOST=<IP of the VM added as rpc_address>
/usr/bin/cqlsh
Trong 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;
Giữ phiên SSH ở trạng thái mở hoặc ghi lại địa chỉ IP của VM này (hostname -I
).
Tiếp theo
Tiếp theo, bạn sẽ thiết lập một Cơ sở dữ liệu và phiên bản Cloud Spanner.
4. Tạo một phiên bản Spanner (Đích)
Trong Spanner, thực thể là một cụm gồm các tài nguyên điện toán và lưu trữ lưu trữ một hoặc nhiều cơ sở dữ liệu Spanner. Bạn sẽ cần ít nhất 1 phiên bản để lưu trữ cơ sở dữ liệu Spanner cho lớp học lập trình này.
Kiểm tra phiên bản gcloud SDK
Trước khi tạo một phiên bản, hãy đảm bảo rằng gcloud SDK trong Google Cloud Shell đã được cập nhật lên phiên bản bắt buộc – mọi phiên bản lớn hơn gcloud SDK 531.0.0. Bạn có thể tìm phiên bản gcloud SDK bằng cách làm theo lệnh bên dưới.
$ gcloud version | grep Google
Sau đây là một ví dụ về kết quả:
Google Cloud SDK 489.0.0
Nếu phiên bản bạn đang dùng cũ hơn phiên bản 531.0.0 bắt buộc (489.0.0
trong ví dụ trước), thì bạn cần nâng cấp Google Cloud SDK bằng cách chạy lệnh sau:
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
Bật Spanner API
Trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án. Hãy dùng lệnh đầu tiên bên dưới để tìm mã dự án hiện được định cấu hình. Nếu kết quả không như mong đợi, lệnh thứ hai bên dưới sẽ đặt lệnh phù hợp.
gcloud config get-value project
gcloud config set project [YOUR-DESIRED-PROJECT-ID]
Định cấu hình khu vực mặc định thành us-central1
. Bạn có thể thay đổi chế độ này thành một khu vực khác được hỗ trợ bởi cấu hình theo khu vực của Spanner.
gcloud config set compute/region us-central1
Bật Spanner API:
gcloud services enable spanner.googleapis.com
Tạo phiên bản Spanner
Trong phần này, bạn sẽ tạo một phiên bản dùng thử miễn phí hoặc một phiên bản được cung cấp. Trong suốt lớp học lập trình này, mã nhận dạng phiên bản của Trình kết nối Cassandra của Spanner được sử dụng là cassandra-adapter-demo
, được đặt làm biến SPANNER_INSTANCE_ID
bằng dòng lệnh export
. Bạn có thể chọn tên mã nhận dạng phiên bản của riêng mình (không bắt buộc).
Tạo một phiên bản Spanner dùng thử miễn phí
Bất kỳ ai có Tài khoản Google và đã bật tính năng Thanh toán trên đám mây trong dự án của mình đều có thể sử dụng phiên bản dùng thử miễn phí Spanner trong 90 ngày. Bạn sẽ không bị tính phí trừ phi bạn chọn nâng cấp phiên bản dùng thử miễn phí lên phiên bản có tính phí. Spanner Cassandra Adapter được hỗ trợ trong phiên bản dùng thử miễn phí. Nếu đủ điều kiện, hãy tạo một phiên bản dùng thử miễn phí bằng cách mở Cloud Shell và chạy lệnh sau:
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"
Đầu ra của lệnh:
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--instance-type=free-instance \
--description="Spanner Cassandra Adapter demo"
Creating instance...done.
5. Di chuyển giản đồ Cassandra và mô hình dữ liệu sang Spanner
Giai đoạn ban đầu và quan trọng của việc chuyển đổi dữ liệu từ cơ sở dữ liệu Cassandra sang Spanner bao gồm việc chuyển đổi giản đồ Cassandra hiện có để phù hợp với các yêu cầu về cấu trúc và kiểu dữ liệu của Spanner.
Để đơn giản hoá quy trình di chuyển giản đồ phức tạp này, hãy sử dụng một trong hai công cụ nguồn mở có giá trị do Spanner cung cấp:
- Công cụ di chuyển Spanner: Công cụ này giúp bạn di chuyển giản đồ bằng cách kết nối với cơ sở dữ liệu Cassandra hiện có và di chuyển giản đồ đó sang Spanner. Công cụ này có trong
gcloud cli
. - Công cụ giản đồ Cassandra của Spanner: Công cụ này giúp bạn chuyển đổi một DDL đã xuất từ Cassandra sang Spanner. Bạn có thể sử dụng một trong hai công cụ này cho lớp học lập trình. Trong lớp học lập trình này, chúng ta sẽ sử dụng Công cụ di chuyển Spanner để di chuyển giản đồ.
Công cụ di chuyển Spanner
Spanner Migration Tool giúp di chuyển giản đồ từ nhiều nguồn dữ liệu như MySQL, Postgres, Cassandra, v.v.
Mặc dù cho mục đích của lớp học lập trình này, chúng ta sẽ sử dụng CLI của công cụ này, nhưng bạn nên khám phá và sử dụng phiên bản dựa trên giao diện người dùng của công cụ này. Phiên bản này cũng giúp bạn sửa đổi giản đồ Spanner trước khi áp dụng.
Xin lưu ý rằng nếu spanner-migration-tool
chạy trên Cloud Shell, thì có thể không truy cập được vào địa chỉ IP nội bộ của Cassandra VM. Do đó, bạn nên chạy lệnh tương tự trên máy ảo mà bạn đã cài đặt Cassandra.
Thực thi lệnh sau trên VM mà bạn đã cài đặt Cassandra.
Cài đặt Công cụ di chuyển Spanner
sudo apt-get update
sudo apt-get install --upgrade google-cloud-sdk-spanner-migration-tool
Nếu bạn gặp bất kỳ vấn đề nào khi cài đặt, hãy tham khảo installing-spanner-migration-tool để biết các bước chi tiết.
Làm mới thông tin xác thực Gcloud
gcloud auth login
gcloud auth application-default login
Di chuyển giản đồ
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}
Xác minh DDL của Spanner
gcloud spanner databases ddl describe analytics --instance=cassandra-adapter-demo
Khi quá trình di chuyển giản đồ kết thúc, đầu ra của lệnh này sẽ là:
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);
(Không bắt buộc) Xem DDL đã chuyển đổi
Bạn có thể xem DDL đã chuyển đổi và áp dụng lại trên Spanner (nếu cần thay đổi thêm)
cat `ls -t cassandra_*schema.ddl.txt | head -n 1`
Kết quả của lệnh này sẽ là
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`)
(Không bắt buộc) Xem báo cáo lượt chuyển đổi
cat `ls -t cassandra_*report.txt | head -n 1`
Báo cáo lượt chuyển đổi nêu bật những vấn đề bạn nên lưu ý. Ví dụ: nếu có sự không khớp về độ chính xác tối đa của một cột giữa nguồn và Spanner, thì cột đó sẽ được làm nổi bật ở đây.
6. Xuất dữ liệu cũ hàng loạt
Để thực hiện quy trình di chuyển hàng loạt, bạn phải:
- Cung cấp hoặc sử dụng lại một vùng chứa GCS hiện có.
- Tải tệp cấu hình Cassandra Driver lên vùng lưu trữ
- Bắt đầu di chuyển hàng loạt.
Mặc dù bạn có thể khởi chạy quy trình di chuyển hàng loạt từ Cloud Shell hoặc VM mới được cấp phép, nhưng bạn nên sử dụng VM cho lớp học lập trình này vì một số bước như tạo tệp cấu hình sẽ lưu giữ các tệp trên bộ nhớ cục bộ.
Cung cấp một bộ chứa GCS.
Khi kết thúc bước này, bạn sẽ cung cấp một vùng chứa GCS và xuất đường dẫn của vùng chứa đó trong một biến có tên là CASSANDRA_BUCKET_NAME
. Nếu muốn dùng lại một nhóm hiện có, bạn chỉ cần tiếp tục bằng cách xuất đường dẫn.
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
Tạo và tải tệp cấu hình Trình điều khiển lên
Tại đây, chúng ta sẽ tải một tệp cấu hình trình điều khiển Cassandra rất cơ bản lên. Vui lòng tham khảo nội dung này để biết định dạng đầy đủ của tệp.
# 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}"
Chạy quy trình di chuyển hàng loạt
Đây là một lệnh mẫu để chạy quy trình di chuyển hàng loạt dữ liệu sang Spanner. Đối với các trường hợp sử dụng thực tế trong quá trình sản xuất, bạn sẽ phải điều chỉnh loại máy và số lượng theo quy mô và thông lượng mong muốn. Vui lòng truy cập vào README_Sourcedb_to_Spanner.md#cassandra-to-spanner-bulk-migration để xem danh sách đầy đủ các lựa chọn.
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"
Thao tác này sẽ tạo ra kết quả như sau. Lưu ý id
được tạo và sử dụng cùng một id
để truy vấn trạng thái của công việc luồng dữ liệu.
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'
Chạy lệnh bên dưới để kiểm tra trạng thái của tác vụ và đợi cho đến khi trạng thái thay đổi thành JOB_STATE_DONE
.
gcloud dataflow jobs describe --region=us-central1 <dataflow job id> | grep "currentState:"
Ban đầu, công việc sẽ ở trạng thái đang chờ xử lý, chẳng hạn như
currentState: JOB_STATE_QUEUED
Trong khi công việc đang được xếp hàng/chạy, bạn nên khám phá trang Dataflow/Jobs
trong giao diện người dùng Cloud Console để theo dõi công việc.
Sau khi hoàn tất, trạng thái của công việc sẽ thay đổi thành:
currentState: JOB_STATE_DONE
7. Trỏ ứng dụng của bạn đến Spanner (Chuyển đổi)
Sau khi xác thực kỹ lưỡng tính chính xác và tính toàn vẹn của dữ liệu sau giai đoạn di chuyển, bước quan trọng là chuyển trọng tâm hoạt động của ứng dụng từ hệ thống Cassandra cũ sang cơ sở dữ liệu Spanner mới được điền sẵn. Khoảng thời gian chuyển đổi quan trọng này thường được gọi là "chuyển đổi".
Giai đoạn chuyển đổi đánh dấu thời điểm lưu lượng truy cập ứng dụng trực tiếp được chuyển hướng khỏi cụm Cassandra ban đầu và kết nối trực tiếp với cơ sở hạ tầng Spanner mạnh mẽ và có khả năng mở rộng. Quá trình chuyển đổi này cho thấy mức độ dễ dàng mà các ứng dụng có thể tận dụng sức mạnh của Spanner, đặc biệt là khi sử dụng giao diện Spanner Cassandra.
Với giao diện Spanner Cassandra, quy trình chuyển đổi được tinh giản. Việc này chủ yếu liên quan đến việc định cấu hình các ứng dụng khách để sử dụng Cassandra Client gốc của Spanner cho mọi hoạt động tương tác dữ liệu. Thay vì giao tiếp với cơ sở dữ liệu Cassandra (nguồn), các ứng dụng của bạn sẽ bắt đầu đọc và ghi dữ liệu trực tiếp vào Spanner (đích) một cách liền mạch. Sự thay đổi cơ bản này về khả năng kết nối thường đạt được thông qua việc sử dụng SpannerCqlSessionBuilder
, một thành phần chính của thư viện Spanner Cassandra Client giúp thiết lập các kết nối đến phiên bản Spanner của bạn. Thao tác này sẽ định tuyến lại toàn bộ luồng lưu lượng truy cập dữ liệu của ứng dụng đến Spanner.
Đối với các ứng dụng Java đã sử dụng thư viện cassandra-java-driver
, việc tích hợp Spanner Cassandra Java Client chỉ yêu cầu những thay đổi nhỏ đối với quá trình khởi tạo CqlSession
.
Nhận phần phụ thuộc google-cloud-spanner-cassandra
Để bắt đầu sử dụng Ứng dụng Cassandra Spanner, trước tiên, bạn cần kết hợp phần phụ thuộc của ứng dụng này vào dự án của mình. Các cấu phần phần mềm google-cloud-spanner-cassandra
được xuất bản trong Maven Central, theo mã nhóm com.google.cloud
. Thêm phần phụ thuộc mới sau đây vào phần <dependencies>
hiện có trong dự án Java của bạn. Sau đây là một ví dụ đơn giản về cách bạn sẽ thêm phần phụ thuộc 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>
Thay đổi cấu hình kết nối để kết nối với Spanner
Sau khi thêm phần phụ thuộc cần thiết, bước tiếp theo là thay đổi cấu hình kết nối để kết nối với cơ sở dữ liệu Spanner.
Một ứng dụng điển hình tương tác với một cụm Cassandra thường sử dụng mã tương tự như sau để thiết lập kết nối:
CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress("127.0.0.1", 9042))
.withLocalDatacenter("datacenter1")
.withAuthCredentials("username", "password")
.build();
Để chuyển hướng kết nối này đến Spanner, bạn cần sửa đổi logic tạo CqlSession
. Thay vì trực tiếp sử dụng CqlSessionBuilder
tiêu chuẩn từ cassandra-java-driver
, bạn sẽ sử dụng SpannerCqlSession.builder()
do Spanner Cassandra Client cung cấp. Sau đây là ví dụ minh hoạ về cách sửa đổi mã kết nối:
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();
Bằng cách khởi tạo CqlSession
bằng SpannerCqlSession.builder()
và cung cấp databaseUri
chính xác, ứng dụng của bạn sẽ thiết lập kết nối thông qua Spanner Cassandra Client với cơ sở dữ liệu Spanner mục tiêu. Thay đổi quan trọng này đảm bảo rằng tất cả các thao tác đọc và ghi tiếp theo do ứng dụng của bạn thực hiện sẽ được chuyển hướng đến và được Spanner xử lý, nhờ đó hoàn tất quá trình chuyển đổi ban đầu một cách hiệu quả. Tại thời điểm này, ứng dụng của bạn sẽ tiếp tục hoạt động như dự kiến, giờ đây được hỗ trợ bởi khả năng mở rộng và độ tin cậy của Spanner.
Tìm hiểu sâu: Cách hoạt động của ứng dụng Spanner Cassandra
Ứng dụng Spanner Cassandra hoạt động như một proxy TCP cục bộ, chặn các byte giao thức Cassandra thô do một trình điều khiển hoặc công cụ ứng dụng gửi. Sau đó, nó sẽ bao bọc các byte này cùng với siêu dữ liệu cần thiết vào các thông báo gRPC để giao tiếp với Spanner. Các phản hồi từ Spanner sẽ được dịch ngược lại thành định dạng truyền dữ liệu của Cassandra và gửi lại cho trình điều khiển hoặc công cụ ban đầu.
Sau khi chắc chắn rằng Spanner đang phân phát tất cả lưu lượng truy cập một cách chính xác, bạn có thể:
- Ngừng hoạt động cụm Cassandra ban đầu.
8. Dọn dẹp (không bắt buộc)
Để dọn dẹp, bạn chỉ cần chuyển đến mục Spanner của Cloud Console rồi xoá phiên bản cassandra-adapter-demo
mà chúng ta đã tạo trong lớp học lập trình.
Xoá cơ sở dữ liệu Cassandra (nếu được cài đặt cục bộ hoặc duy trì)
Nếu bạn đã cài đặt Cassandra bên ngoài một máy ảo Compute Engine được tạo tại đây, hãy làm theo các bước thích hợp để xoá dữ liệu hoặc gỡ cài đặt Cassandra.
9. Xin chúc mừng!
Tiếp theo là gì?
- Tìm hiểu thêm về Spanner.
- Tìm hiểu thêm về Giao diện Cassandra.