בדף הזה מוסבר איך להפעיל זיקה לסשן (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 כשיוצרים שירות חדש או פורסים גרסה חדשה:
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.
אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, 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:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
לוחצים על השירות שרוצים לראות את הפרטים שלו כדי לפתוח את הדף פרטי השירות.
לוחצים על הכרטיסייה עדכונים.
בחלונית הפרטים בצד ימין, הגדרת הזיקה לסשן מופיעה בכרטיסייה Networking (רישות).
gcloud
משתמשים בפקודה הבאה:
gcloud run services describe SERVICE
מאתרים את הגדרת הזיקה לסשן (session affinity) בהגדרה שמוחזרת.