לקוח Cassandra Go ל-Spanner מחבר בין אפליקציות שנכתבו עבור מסד הנתונים של Apache Cassandra לבין Spanner. הלקוח פועל עם Spanner Omni באותו אופן שבו הוא פועל עם Spanner.
Spanner תומך באופן מובנה בפרוטוקול Cassandra v4 wire, ולכן הלקוח הזה מאפשר לאפליקציות Go שמשתמשות בדרייבר gocql, או לאפליקציות ולכלים שאינם Go, כמו cqlsh, להתחבר למסד נתונים של Spanner.
הלקוח הזה פועל כפרוקסי TCP מקומי. הוא מיירט את הבייטים של פרוטוקול Cassandra הגולמיים שנשלחים על ידי כלי של מנהל התקן או לקוח. לאחר מכן, הוא עוטף את הבייטים האלה ואת המטא-נתונים הדרושים בהודעות gRPC כדי לתקשר עם Spanner Omni. הלקוח מתרגם את התשובות מ-Spanner Omni בחזרה לפורמט Cassandra wire ושולח אותן בחזרה לדרייבר או לכלי המקוריים.
במאמר הזה מוסבר איך לשלב את הלקוח עם Spanner Omni באחת מהשיטות הבאות:
תלות בתהליך: משתמשים בשיטה הזו באפליקציות Go שכבר משתמשות במנהל ההתקנים
gocql. הגישה הזו מטמיעה את הלקוח בתהליך הבקשה שלכם כדי לצמצם את השינויים בקוד.Sidecar proxy: משתמשים בשיטה הזו באפליקציות שאינן Go או כשמשתמשים בכלים חיצוניים של Cassandra, כמו
cqlsh. בגישה הזו, הלקוח פועל כתהליך עצמאי.
מידע נוסף על אופן הפעולה של Apache Cassandra עם Spanner זמין במאמר בנושא ממשק Cassandra.
מתי כדאי להשתמש ב-Spanner Cassandra Go Client
הלקוח הזה שימושי בתרחישים הבאים:
שימוש ב-Spanner עם מינימום שינויים בקוד. אתם רוצים להשתמש ב-Spanner כקצה העורפי של אפליקציית Go, אבל אתם מעדיפים להמשיך להשתמש ב-API המוכר של
gocqlכדי לגשת לנתונים.שימוש בכלים של Cassandra שאינם Go. רוצים להתחבר ל-Spanner באמצעות כלים סטנדרטיים של Cassandra כמו
cqlshאו אפליקציות שנכתבו בשפות אחרות שמשתמשות במנהלי התקנים של Cassandra.
שימוש בלקוח כתלות בתהליך
אפליקציות Go מתחברות ל-Spanner Omni על ידי שילוב של לקוח Spanner Cassandra Go כתלות בתהליך. בגישה הזו, הלוגיקה של ה-Proxy מוטמעת ישירות באפליקציה, וכך ארכיטקטורת הפריסה פשוטה יותר כי לא צריך תהליך נפרד. ההגדרה הזו גם מספקת ביצועים אופטימליים כי היא מונעת צעד נוסף ברשת וסריאליזציה ודסריאליזציה נוספות של הנתונים.
כדי להשתמש בלקוח כתלות בתהליך:
מייבאים את חבילת Spanner לאפליקציית Go:
import spanner "github.com/googleapis/go-spanner-cassandra/cassandra/gocql"משנים את הקוד ליצירת אשכול. במקום להשתמש ב-
gocql.NewCluster, צריך להשתמש ב-spanner.NewClusterולציין את האפשרויות הבאות שספציפיות ל-Spanner Omni:תקשורת בטקסט פשוט
בדוגמה הבאה מוצג איך ליצור חיבור בטקסט פשוט ל-Spanner Omni:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.UsePlainText = true cluster := spanner.NewCluster(opts) // ... }חיבור TLS
בדוגמה הבאה מוסבר איך ליצור חיבור TLS ל-Spanner Omni:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.CaCertificate = "PATH_TO_CA_CRT" cluster := spanner.NewCluster(opts) // ... }חיבור mTLS
בדוגמה הבאה מוצג איך ליצור חיבור mTLS ל-Spanner Omni:
func main() { opts := &spanner.Options{ // Required: Specify the Spanner database URI DatabaseUri: "DATABASE_ID", } // Optional: Configure Spanner Omni cluster settings as needed opts.ExperimentalHost = true opts.CaCertificate = "PATH_TO_CA_CRT" opts.ClientCertificate = "PATH_TO_CLIENT_CERT" opts.ClientKey = "PATH_TO_CLIENT_KEY" cluster := spanner.NewCluster(opts) // ... }
פריסת הלקוח כקובץ עזר חיצוני
פריסת לקוח Spanner Cassandra Go כפרוקסי sidecar היא אפשרות יעילה לאפליקציות ולכלים שאינם Go, כמו cqlsh, להתחבר ל-Spanner Omni באמצעות דרייברים סטנדרטיים של Cassandra. בשיטה הזו, הלקוח מופעל כשרת proxy עצמאי של TCP שמיירט את תעבורת הנתונים של פרוטוקול Cassandra וממיר אותה ל-gRPC לצורך תקשורת עם Spanner Omni.
ההגדרה הזו שימושית כשצריך להשתמש בכלים חיצוניים של Cassandra או כשרוצים להימנע משינויים ישירים בקוד של האפליקציה.
אפשר להריץ את ה-proxy של ה-sidecar בדרכים הבאות:
הרצה מקומית באמצעות הפקודה run של Go
הפעלת פרוקסי מסוג sidecar כתהליך מקומי מקוד המקור שימושית בסביבות פיתוח ובדיקה שבהן רוצים לבצע איטרציות מהירות על האפליקציה ועל הגדרת הפרוקסי.
משכפלים את המאגר:
git clone https://github.com/googleapis/go-spanner-cassandra.gitעוברים לספריית המאגר:
cd go-spanner-cassandraמריצים את הפקודה
cassandra_launcher.goעם הדגל-dbהנדרש ועם הדגלים הספציפיים הבאים של Spanner Omni. מחליפים את הערך של-dbבשם מסד הנתונים של Spanner Omni:
- כדי להשתמש בתקשורת בטקסט פשוט, מריצים את הפקודה הבאה:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainText
- כדי להשתמש בחיבור TLS, מריצים את הפקודה הבאה:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT
- לחיבור mTLS, מריצים את הפקודה הבאה:
go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY
הרצה עם קובץ אימג' של Docker שנבנה מראש
אנחנו ממליצים להריץ את קובץ העזר החיצוני כאפליקציה בקונטיינרים באמצעות קובץ אימג' של Docker שנבנה מראש לסביבות ייצור, כי הוא מספק סביבת זמן ריצה עקבית ומבודדת.
שליפת התמונה ממאגר הרישום הרשמי:
docker pull gcr.io/cloud-spanner-adapter/cassandra-adapterמריצים את התמונה עם הדגלים הנדרשים:
תקשורת בטקסט פשוט
כדי להשתמש בתקשורת בטקסט פשוט, מריצים את הפקודה הבאה:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -usePlainTextחיבור TLS
לחיבור TLS, מריצים את הפקודה הבאה:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRTחיבור mTLS
כדי ליצור חיבור mTLS, מריצים את הפקודה הבאה:
docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -experimentalHost -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY