הגדרת זיקה לסשן (session affinity) לשירותים

בדף הזה מוסבר איך להפעיל זיקה לסשן (session affinity) לגרסה בשירות Cloud Run.

איך פועלת קרבה לסשן

כברירת מחדל, זיקה לסשן (session affinity) לא מופעלת, ולכן בקשות מאותו לקוח עשויות להיות מטופלות על ידי מופעים שונים, כמו שמוצג כאן: תמונה

אם מפעילים את התכונה 'זיקה לסשן (session affinity)',‏ Cloud Run מנתב בקשות עוקבות של לקוח מסוים לאותו מופע של גרסה. ‫Cloud Run משתמש בקובץ Cookie של זיקה לסשן עם TTL של 30 יום, ובודק את הערך שלו כדי לזהות מספר בקשות מאותו לקוח ולהפנות את כל הבקשות האלה לאותו מופע, כמו שמוצג כאן: תמונה

התנהגויות חשובות שכדאי להכיר

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

בגלל התאמה אוטומטית לעומס (autoscaling) של Cloud Run, זיקה לסשן (session affinity) היא זיקה במיטבה. אם המופע מסתיים מסיבה כלשהי, או מגיע למקסימום של בקשות בו-זמניות או לניצול מקסימלי של CPU, הזיקה לסשן נקטעת ובקשות נוספות מנותבות למופע אחר.

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

Cloud Load Balancing session affinity ו-Cloud Run session affinity הן שתי הטמעות נפרדות ועצמאיות של session affinity. אתם יכולים להפעיל את הזיקה לסשן (session affinity) ב-Cloud Run בשירות Cloud Run, גם אם הוא נמצא מאחורי מאזן עומסים. עם זאת, לא מומלץ להפעיל את ההגדרה'זיקה לסשן' ב-Cloud Load Balancing בקבוצת נקודות קצה ברשת ללא שרתים, כי היא לא נתמכת.

זיקה לסשן (session affinity) ופיצול תנועה

אפשר להפעיל או להשבית את הזיקה לסשן (session affinity) ברמת הגרסה. אם מפעילים את התכונה 'זיקה לסשן (session affinity)' בגרסה של Cloud Run וגם משתמשים בפיצול תנועה, זיקה לסשן (session affinity) מקבלת עדיפות על פני פיצול התנועה. במקרים קיצוניים, אם לקוח יחיד שמשתמש בזיקה לסשן (session affinity) אחראי לרוב המוחלט של כל הבקשות, כל הבקשות האלה יכולות להיות מנותבות לגרסה נתונה בלי קשר להגדרת פיצול התנועה.

אם מפעילים חלוקת התנועה לגרסאות שחלקן מופעלות עם זיקה לסשן (session affinity) וחלקן לא, התוצאה היא שהבקשות מועברות בהדרגה לגרסאות שמופעלות עם זיקה לסשן (session affinity), גם אם לא משנים במפורש את הגדרת חלוקת התנועה. הסיבה לכך היא שכל בקשה שלא מצורף אליה קובץ Cookie של זיקה לסשן (session affinity), תעבור פיצול אקראי. חלק מהבקשות ישויכו בסופו של דבר לגרסה עם זיקה לסשן (session affinity), והבקשות האלה יישארו עם הגרסה הספציפית הזו.

כשמעדכנים את הגדרת חלוקת התנועה בשירות Cloud Run, יכול להיות שבקשות עוקבות עם קובצי Cookie של שיוך לסשן יוקצו לגרסה אחרת. ב-Cloud Run, מספר הלקוחות שמופנים לגרסה חדשה מצומצם למינימום.

לדוגמה, אם שירות מסוים מפצל את התנועה בשיעורים של 90% ו-10%, והפיצול מתעדכן ל-80% ו-20%, אז 10% מהתנועה יופנו לגרסה שמוצגת ל-20% מהתנועה.

הגדרת זיקה לסשן

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

אפשר להגדיר את הזיקה לסשן (session affinity) באמצעות המסוף Google Cloud , שורת הפקודה של gcloud או קובץ ‎ .yaml כשיוצרים שירות חדש או פורסים גרסה חדשה:

המסוף

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.

  3. אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.

  4. נכנסים לכרטיסייה Networking.

    תמונה

    • לוחצים על תיבת הטקסט Session affinity (העדפה של סשן).
  5. לוחצים על יצירה או על פריסה.

gcloud

כדי לציין את הזיקה לסשן (session affinity), משתמשים בפקודה הבאה:

gcloud run services update SERVICE --session-affinity

החלפה

  • SERVICE בשם השירות שרוצים לעדכן.

כדי להסיר את הזיקה לסשן (session affinity), משתמשים בפקודה

gcloud run services update SERVICE --no-session-affinity

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מוסיפים את ההערה run.googleapis.com/sessionAffinity::

    spec:
     template:
       metadata:
         annotations:
           run.googleapis.com/sessionAffinity: 'BOOL'

    החלפה

    • 'BOOL' עם הערך 'true' כדי להגדיר זיקה לסשן, או 'false' כדי להסיר זיקה לסשן.
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את השורות הבאות למשאב google_cloud_run_v2_service בקובץ התצורה של Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-aff"
  location = "REGION"
  deletion_protection = false
  ingress = "INGRESS_TRAFFIC_ALL"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    session_affinity = BOOL
  }
}

מחליפים את:

  • REGION עם האזור Google Cloud . לדוגמה: europe-west1.
  • BOOL עם הערך true כדי להגדיר זיקה לסשן, או false כדי להסיר זיקה לסשן.

הצגת הגדרות זיקה לסשן

כדי לראות את ההגדרות הנוכחיות של זיקה לסשן (session affinity) בשירות Cloud Run:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על השירות שרוצים לראות את הפרטים שלו כדי לפתוח את הדף פרטי השירות.

  3. לוחצים על הכרטיסייה עדכונים.

  4. בחלונית הפרטים בצד ימין, הגדרת הזיקה לסשן מופיעה בכרטיסייה Networking (רישות).

gcloud

  1. משתמשים בפקודה הבאה:

    gcloud run services describe SERVICE
  2. מאתרים את הגדרת הזיקה לסשן (session affinity) בהגדרה שמוחזרת.