קישוריות ישירה של gRPC

קישוריות ישירה מאפשרת ל Google Cloud ספריות לקוח נתמכות ליצור חיבורי רשת gRPC מאומתים ישירות ל-Cloud Storage, וכך לצמצם את זמן האחזור ואת התקורה של החיבור. כשמשתמשים ב-gRPC עם קישוריות ישירה, הבקשות של ספריית הלקוח עוקפות את ממשקי הקצה של Google ‏ (GFE) ומנותבות ישירות ל-Cloud Storage.

אפשר להשתמש בקישוריות ישירה רק לבקשות שנשלחות ממכונות וירטואליות (VM) של Compute Engine.

הדרישות לקישוריות ישירה

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

  • למכונות הווירטואליות של Compute Engine שמקיימות אינטראקציה עם Cloud Storage צריך להיות חשבון שירות מצורף, גם אם לחשבון השירות אין הרשאות. חשבון השירות משמש לייצוג של המכונה הווירטואלית של Compute Engine בתהליך לחיצת היד של אבטחת שכבת התעבורה של האפליקציה.

  • המכונות הווירטואליות של Compute Engine שמקיימות אינטראקציה עם קטגוריה של Cloud Storage צריכות להיות באותו מיקום כמו הקטגוריה. לדוגמה, אם הקטגוריה נמצאת ב-us-central1, המכונה הווירטואלית יכולה להיות ב-us-central1-a. אם הקטגוריה נמצאת במספר אזורים או בשני אזורים, ה-VM צריך להיות באחד מהאזורים האלה. לדוגמה, אם הקטגוריה נמצאת במספר אזורים ב-us, המכונה הווירטואלית יכולה להיות ב-us-east4-c.

    מידע נוסף על מיקומי קטגוריות זמין במאמר מיקומים.

  • המסלולים וכללי חומת האש מאפשרים לתעבורת IPv4 להגיע אל 34.126.0.0/18 ולתעבורת IPv6 להגיע אל 2001:4860:8040::/42. אל תגבילו את יציאות היעד בכללי חומת האש, כי כל היציאות משמשות להצגת מודעות. בנוסף, צריך לאפשר לתנועה להגיע לנקודות הקצה storage.googleapis.com:443 ו-directpath-pa.googleapis.com:443.

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

  • כדי לאמת אפליקציות ב-Cloud Storage ולקבל קישוריות ישירה, ספריות הלקוח של Cloud Storage דורשות פרטי כניסה ספציפיים:

    • ספריית הלקוח של Java דורשת פרטי כניסה לחשבון משתמש או פרטי כניסה לחשבון שירות.

    • ספריית הלקוח C++‎ דורשת פרטי כניסה לחשבון שירות.

    • ספריית הלקוח של Go דורשת פרטי כניסה לחשבון שירות. בגרסאות שקדמו ל-1.52.0 נדרשים פרטי הכניסה של חשבון השירות שמוגדר כברירת מחדל של המכונה הווירטואלית שניגשת לקטגוריה.

    כדי לראות את שם החשבון שבו ה-VM משתמש לאימות ב-Cloud Storage, משתמשים בפקודה gcloud auth list:

    gcloud auth list --filter=status:ACTIVE --format="value(account)"
    

    אם אתם משתמשים בספריית הלקוח של Go וצריכים לבדוק אם החשבון Google שמשמש לאימות תואם לחשבון השירות שמוגדר כברירת מחדל ב-VM, השתמשו בפקודה gcloud compute instances describe:

    gcloud compute instances describe INSTANCE_NAME --format='yaml(serviceAccounts)'
    

    מחליפים את INSTANCE_NAME בשם המכונה.

    למידע נוסף על אימות, קראו את הסקירה הכללית על ניהול הזהויות ב- Google .

בדיקת הקישוריות באמצעות Google Cloud CLI

כדי לבדוק את האבחון של הקישוריות הישירה בקטגוריה, אפשר להפעיל קריאת GET לקטגוריה באמצעות gcloud storage buckets describe gs://example-bucket ב-Google Cloud CLI. בקטע הזה מוסבר איך לבצע בדיקת אבחון לקישוריות ישירה באמצעות Google Cloud CLI.

לפני שמתחילים

  1. מוודאים שיש לכם את הרשאת ה-IAM‏ storage.buckets.get בקטגוריה. אפשר להעניק את ההרשאה הזו באמצעות התפקיד "קורא קטגוריות מדור קודם ב-Storage"‏ (roles/storage.legacyBucketReader).

  2. הפקודה gcloud alpha storage diagnose זמינה רק ב-Google Cloud CLI מגרסה 531.0.0 ואילך. כדי להשתמש בפקודה הזו, מומלץ לשדרג לגרסה האחרונה של Google Cloud CLI.

הרצת האבחון

כדי לבדוק אם יש קישוריות ישירה, מריצים את הפקודה gcloud alpha storage diagnose עם הארגומנט --test-type=DIRECT_CONNECTIVITY:

gcloud alpha storage diagnose --test-type=DIRECT_CONNECTIVITY gs://BUCKET_NAME

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

  • ‫BUCKET_NAME: שם הקטגוריה. לדוגמה, my-bucket.

אם אפשר ליצור חיבור, תתקבל תשובה דומה לזו:

Using my-bucket bucket for the diagnostic tests.
Bucket location : US
Bucket storage class : STANDARD
Running diagnostic: Direct Connectivity Diagnostic...
WARNING: This diagnostic is experimental. The output may change, and checks may be added or removed at any time. Please do not rely on the diagnostic being present.
Finished running diagnostic: Direct Connectivity Diagnostic
Generating diagnostic report...
NAME
Direct Connectivity Diagnostic
    ┌────────────────────────────┬─────────────────────────────────────────────────────────────────────────┬──────────┐
    │            NAME            │                           PAYLOAD_DESCRIPTION                           │  RESULT  │
    ├────────────────────────────┼─────────────────────────────────────────────────────────────────────────┼──────────┤
    │ Direct Connectivity Call   │ Able to get bucket metadata using Direct Connectivity network path.     │ Success. │
    └────────────────────────────┴─────────────────────────────────────────────────────────────────────────┴──────────┘

בדיקת הגדרות הרשת

אם נתקלתם בשגיאה Unable to connect to Traffic Director כשבדקתם את הקישוריות הישירה באמצעות Google Cloud CLI, אתם יכולים להשתמש בהוראות הבאות כדי לוודא שהגדרות הרשת מאפשרות לתעבורת הנתונים לעבור מהמכונות הווירטואליות לנקודות הקצה הנדרשות.

כדי להשתמש בקישוריות ישירה, צריך שירות שמתארח בכתובת directpath-pa.googleapis.com:443 ובכתובת storage.googleapis.com:443. כדי לבדוק אם אפשר להתחבר לשירות, מבצעים קריאת curl ל-directpath-pa.googleapis.com:443 או ל-storage.googleapis.com:443. לדוגמה:

curl directpath-pa.googleapis.com:443

אם אפשר ליצור חיבור, תתקבל תשובה ריקה בלי שגיאות:

curl: (52) Empty reply from server

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

curl: (56) Recv failure: Connection reset by peer

מגבלות

אי אפשר להשתמש ב-Private Service Connect בקישוריות ישירה.

פתרון בעיות

בקטע הזה מפורטים פרטים ופתרונות לשגיאות שיכולות להתרחש כשמשתמשים בקישוריות ישירה של gRPC.

יותר מדי קבצים פתוחים

הבעיה: כשמשתמשים בקישוריות ישירה של gRPC, יכול להיות שהאפליקציה תתחזק מספר גבוה יותר של חיבורים בו-זמניים ל-Cloud Storage מאשר ממשקי API בארכיטקטורת REST. בסביבות עם מקביליות גבוהה, יכול להיות חריגה מהמגבלה של תיאור הקובץ במערכת ההפעלה, וכתוצאה מכך תופיע השגיאה too many open files. השגיאה הזו יכולה להתרחש כשמשתמשים ב-Google Cloud CLI.

פתרון: כדי לפתור את הבעיה, בוחרים באחת מהשיטות הבאות:

  • מגדירים את המספר המקסימלי של קבצים פתוחים לתהליך באמצעות ulimit -n $(ulimit -Hn).

  • כדי להקטין את מספר המשימות שמותר לבצע בו-זמנית, משתמשים בפקודה gcloud config set עם המאפיינים storage/process_count ו-storage/thread_count. אנחנו ממליצים על ערך מקסימלי של 12 משימות. למידע נוסף: מקור המידע gcloud config set. חשוב לזכור שהקטנת מספר המשימות שמותר לבצע בו-זמנית מפחיתה את המקביליות, ויכולה להשפיע על הביצועים.