שימוש בלקוח Cassandra Go כדי להתחבר ל-Spanner Omni

לקוח 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

הלקוח הזה שימושי בתרחישים הבאים:

  • שימוש ב-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.SpannerEndpoint = "ENDPOINT"
      opts.InstanceType = spanner.Omni
      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.SpannerEndpoint = "ENDPOINT"
      opts.InstanceType = spanner.Omni
      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.SpannerEndpoint = "ENDPOINT"
      opts.InstanceType = spanner.Omni
      opts.CaCertificate = "PATH_TO_CA_CRT"
      opts.ClientCertificate = "PATH_TO_CLIENT_CERT"
      opts.ClientKey = "PATH_TO_CLIENT_KEY"
    
      cluster := spanner.NewCluster(opts)
      // ...
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫DATABASE_ID: המזהה של מסד הנתונים של Spanner Omni, לדוגמה, test-db.

    • ‫ENDPOINT: נקודת הקצה של מופע Spanner Omni, לדוגמה, localhost:15000.

    • PATH_TO_CA_CRT: הנתיב לקובץ אישור ה-CA.

    • ‫PATH_TO_CLIENT_CERT: הנתיב לקובץ אישור הלקוח.

    • ‫PATH_TO_CLIENT_KEY: הנתיב לקובץ מפתח הלקוח.

פריסת הלקוח כקובץ עזר חיצוני

פריסת לקוח Spanner Cassandra Go כפרוקסי sidecar היא אפשרות יעילה לאפליקציות ולכלים שאינם Go, כמו cqlsh, להתחבר ל-Spanner Omni באמצעות דרייברים סטנדרטיים של Cassandra. בשיטה הזו, הלקוח מופעל כשרת proxy עצמאי של TCP שמיירט את תעבורת הנתונים של פרוטוקול Cassandra וממיר אותה ל-gRPC לצורך תקשורת עם Spanner Omni.

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

אפשר להריץ את ה-proxy של ה-sidecar בדרכים הבאות:

הרצה מקומית באמצעות הפקודה run של Go

הפעלת פרוקסי מסוג sidecar כתהליך מקומי מקוד המקור שימושית בסביבות פיתוח ובדיקה שבהן רוצים לבצע איטרציות מהירות באפליקציה ובהגדרות הפרוקסי.

  1. משכפלים את המאגר:

    git clone https://github.com/googleapis/go-spanner-cassandra.git

  2. עוברים לספריית המאגר:

    cd go-spanner-cassandra

  3. מריצים את הפקודה cassandra_launcher.go עם הדגל -db הנדרש ועם הדגלים הספציפיים הבאים של Spanner Omni:

    טקסט פשוט

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

    go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -instanceType OMNI -usePlainText
    

    TLS

    כדי להריץ עם חיבור TLS, מריצים את הפקודה הבאה:

    go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -instanceType OMNI -caCertificate PATH_TO_CA_CRT
    

    mTLS

    כדי להריץ עם חיבור mTLS, מריצים את הפקודה הבאה:

    go run cassandra_launcher.go -db DATABASE_ID -endpoint ENDPOINT -instanceType OMNI -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY
    

הרצה עם קובץ אימג' של Docker שנבנה מראש

אנחנו ממליצים להריץ את ה-proxy של ה-sidecar כאפליקציה בקונטיינר באמצעות תמונת Docker מוכנה מראש לסביבות ייצור, כי היא מספקת סביבת זמן ריצה עקבית ומבודדת.

  1. שולפים את התמונה ממאגר הרישום הרשמי:

    docker pull gcr.io/cloud-spanner-adapter/cassandra-adapter

  2. מריצים את התמונה עם הדגלים הנדרשים:

    טקסט פשוט

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

    docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -instanceType OMNI -usePlainText
    

    TLS

    כדי להריץ עם חיבור TLS, מריצים את הפקודה הבאה:

    docker run -d -p 9042:9042 gcr.io/cloud-spanner-adapter/cassandra-adapter -db DATABASE_ID -endpoint ENDPOINT -instanceType OMNI -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 -instanceType OMNI -caCertificate PATH_TO_CA_CRT -clientCertificate PATH_TO_CLIENT_CERT -clientKey PATH_TO_CLIENT_KEY