בדף הזה מוסבר איך להפעיל זיקה לסשן (session affinity) לגרסה של שירות Cloud Run.
איך פועלת קרבה לסשן
כברירת מחדל, זיקה לסשן (session affinity) לא מופעלת, ולכן יכול להיות שבקשות מאותו לקוח יטופלו על ידי מכונות שונות, כמו שמוצג כאן:
אם מפעילים את התכונה 'העדפה של סשן', Cloud Run מנתב בקשות עוקבות של לקוח מסוים לאותו מופע של עדכון. Cloud Run משתמש בקובץ Cookie של זיקה לסשן עם TTL של 30 יום, ובודק את הערך שלו כדי לזהות בקשות מרובות מאותו לקוח ומפנה את כל הבקשות האלה לאותו מופע, כמו שמוצג כאן:
התנהגויות חשובות שכדאי להכיר
כפי שמוצג בתרשים שלמעלה, אם האפשרות 'שמירת סשן' מופעלת, לקוח יגיע לאותו מופע. עם זאת, חשוב לזכור שהמופע יכול לקבל בקשות מלקוחות שונים. זיקה לסשן (session affinity) לא אומרת שהמופע מוקדש רק ללקוח אחד.
בגלל התנהגות ההתאמה האוטומטית לעומס (autoscaling) של Cloud Run, הזיקה לסשן היא זיקה על בסיס המאמץ הטוב ביותר. אם המופע מסתיים מסיבה כלשהי, או מגיע למקסימום של בקשות בו-זמניות או לניצול מקסימלי של 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) ברמת הגרסה. אם מפעילים את התכונה 'זיקה לסשן' בגרסה של Cloud Run וגם משתמשים בחלוקת התנועה, זיקה לסשן מקבלת עדיפות על פני חלוקת התנועה. במקרים קיצוניים, אם לקוח יחיד שמשתמש בזיקה לסשן (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 כשיוצרים שירות חדש או פורסים גרסה חדשה:
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.
אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Containers, Networking, Security (מאגרי נתונים, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.
נכנסים לכרטיסייה Networking.
- לוחצים על תיבת הטקסט Session affinity (העדפה של סשן).
לוחצים על יצירה או על פריסה.
gcloud
כדי לציין את הזיקה לסשן (session affinity), משתמשים בפקודה הבאה:
gcloud run services update SERVICE --session-affinity
החלפה
- SERVICE בשם השירות שרוצים לעדכן.
כדי להסיר את הזיקה לסשן (session affinity), משתמשים בפקודה
gcloud run services update SERVICE --no-session-affinity
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, אתם צריכים להוריד את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מוסיפים את ההערה
run.googleapis.com/sessionAffinity::spec: template: metadata: annotations: run.googleapis.com/sessionAffinity: 'BOOL'
החלפה
- 'BOOL' עם הערך '
true' כדי להגדיר זיקה לסשן, או 'false' כדי להסיר זיקה לסשן.
- 'BOOL' עם הערך '
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
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:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
לוחצים על השירות שרוצים לראות כדי לפתוח את הדף פרטי השירות.
לוחצים על הכרטיסייה עדכונים.
בחלונית הפרטים בצד ימין, הגדרת זיקה לסשן (session affinity) מופיעה בכרטיסייה Networking (רשת).
gcloud
משתמשים בפקודה הבאה:
gcloud run services describe SERVICE
מאתרים את הגדרת הזיקה לסשן (session affinity) בהגדרה שמוחזרת.