סקירה כללית של דגלי תכונות ב-App Lifecycle Manager

בעזרת ה-feature flags של App Lifecycle Manager, אתם יכולים לשלוט בזמינות ובהתנהגות של התכונות באפליקציות בלי לפרוס קוד חדש או לשנות את התשתית.

יש שתי דרכים עיקריות להשתמש בדגלים:

  1. משולב: אפשר לשלב את ניהול הדגלים עם פריסות האפליקציות שמנוהלות על ידי App Lifecycle Manager.
  2. עצמאית: אתם יכולים להשתמש במערכת הסימון החזקה באופן עצמאי, גם אם תשתית האפליקציה מנוהלת במקום אחר, על ידי הגדרת רכיבי המערכת כיחידות של App Lifecycle Manager.

ה-feature flags משתלבים עם מושגי הליבה של App Lifecycle Manager, כמו יחידות והשקות. כך אתם יכולים לנהל את הגדרות הדגלים לצד תשתית האפליקציה (גישה משולבת).

אם אתם לא מכירים את היחידות או ההשקות של App Lifecycle Manager, כדאי לעיין בסקירה הכללית של App Lifecycle Manager.

למה כדאי להשתמש ב-feature flags ב-App Lifecycle Manager?

כשמטמיעים את ה-feature flags באמצעות App Lifecycle Manager, נהנים מכמה יתרונות במחזור החיים של הפיתוח והתפעול של ה-SaaS:

  • הפרדה בין השקת תכונות לבין פריסת קוד: מעבירים קוד חדש לייצור כשהתכונות מושבתות כברירת מחדל. להפעיל תכונות למשתמשים ספציפיים או לפרוס אותן בהדרגה כשהן מוכנות, וכך להפחית את הסיכון שקשור לפריסות גדולות.
  • שיפור הבטיחות, המהירות והאמינות:
    • לבדוק תכונות בסביבת הייצור עם קהל מוגבל (גרסאות איטרטיביות לקהל מצומצם).
    • להשיק בהדרגה באמצעות יכולות ההשקה של App Lifecycle Manager, כדי לצמצם את ההשפעה של בעיות פוטנציאליות.
  • הפעלה של רשימת היתרים והתאמה אישית של דיירים: הפעלה או השבתה של תכונות ביחידות שיכולות לייצג דיירים, שירותים או סביבות.
  • החזרה קלה יותר למצב קודם: השבתה של feature flag היא בדרך כלל מהירה יותר ופחות משבשת מאשר פריסה של גרסה קודמת של האפליקציה. תהליך העבודה הזה מאפשר להשבית תכונות בעייתיות בלי להחזיר לאחור קובצי בינארי.
  • ניהול מאוחד של הגדרות הדגלים: ניהול ההגדרות של דגלי התכונות ושימוש בהן כדי להגדיר השקות. תהליך העבודה הזה מספק אמינות תפעולית, כי הוא מאפשר לשנות את הפונקציונליות של האפליקציה באמצעות יצירת השקות של feature flag.

איך פועלים דגלי התכונות של App Lifecycle Manager

השימוש ב-feature flags ב-App Lifecycle Manager כולל שני היבטים עיקריים: מישור הניהול (הגדרה ופריסה של דגלים) ומישור הנתונים (גישה לערכי הדגלים באפליקציה).

שימוש משולב עם App Lifecycle Manager

אם אתם משתמשים ב-App Lifecycle Manager כדי לנהל את פריסות האפליקציות (לדוגמה, פריסת תשתית באמצעות Terraform Blueprints):

  1. הגדרת feature flag: יוצרים משאבים של feature flag ב-App Lifecycle Manager, מציינים Flag key ייחודי (לדוגמה, enable-new-dashboard) ומשייכים אותו לסוג יחידה. יש תמיכה בדגלים בוליאניים.
  2. שינויים בדגלים של הקצאת משאבים: שינויים בדגלים (יצירה או עדכונים) לא נכנסים לתוקף עד שמפעילים השקה של App Lifecycle Manager. כך אפשר להשתמש בתכונות כמו אצוות, פיקוח ובדיקות בטיחות לפריסות של דגלים. ההשקה מעדכנת את הגדרת הדגל שמשויכת ליחידות המטורגטות.
  3. גישה לדגלים באפליקציה: קוד האפליקציה, שפועל ביחידה שהוקצתה (לדוגמה, בקונטיינר ב-Cloud Run או ב-Google Kubernetes Engine), משתמש ב-OpenFeature SDK שמוגדר עם הספק flagd. הספק הזה מתחבר לנקודת הקצה של השירות saasconfig.googleapis.com. באמצעות App Lifecycle Manager, מוסיפים את מזהה היחידה הנדרש לסביבת האפליקציה, כדי לאפשר ל-SDK לאחזר את ערכי הדגלים הנכונים של היחידה הספציפית הזו.

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

מישור הניהול

אתם משתמשים במישור הניהול כדי להגדיר את הדגלים ולשלוט בהם. אתם יכולים להשתמש במסוף Google Cloud , ב-CLI של gcloud או ב-App Lifecycle Manager API כדי:

  • יצירה או עדכון של דגלים: כדי להגדיר דגלים, מציינים את Flag key, משייכים אותו לסוג יחידה ומגדירים את הסוג וערך ברירת המחדל שלו.
  • יצירת השקות: אתם מתחילים השקה כדי להפיץ שינויים בדגלים (יצירות או עדכונים) ליחידות המטורגטות ששייכות לסוג היחידה של הדגל. ההשקות מבטיחות שהשינויים יחולו בצורה בטוחה ואמינה בהתאם למדיניות שהגדרתם.

מישור הנתונים

קוד האפליקציה שלכם יוצר אינטראקציה עם מישור הנתונים כדי לצרוך ערכי דגלים:

  • ‫OpenFeature SDK: משלבים באפליקציה את OpenFeature SDK, שלא תלוי בספק.
  • ‫ספק flagd: מגדירים את OpenFeature SDK כך שישתמש בספק flagd.
  • הגדרה: מפנים את הספק של flagd לנקודת הקצה של שירות ה-feature flag של App Lifecycle Manager‏: saasconfig.googleapis.com:443.
  • טירגוט: צריך לספק את ה-provider_id כדי לזהות את הגדרת הדגל. הערך הזה בדרך כלל תואם לשם המשאב המלא של יחידת App Lifecycle Manager (לדוגמה, projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID).
  • אימות: הספק משתמש ב-Application Default Credentials ‏ (ADC) כדי לאמת באופן מאובטח בקשות לנקודת הקצה של השירות Google Cloud . לחשבון השירות שבו משתמשים צריך להיות תפקיד roles/saasconfig.viewer בניהול הזהויות והרשאות הגישה (IAM).
  • הערכת דגלים: משתמשים בשיטות OpenFeature רגילות (client.get_boolean_value(...)) בקוד כדי לבדוק את ערכי הדגלים. הספק מטפל באחזור של ההגדרה האחרונה שנפרסה מהשירות.

ב-App Lifecycle Manager יש הטמעות לדוגמה ודוגמאות לשילוב עם מישור הנתונים:

סוגי הערכים של ה-feature flag

ה-feature flags של App Lifecycle Manager תומכים ביותר מהערכות בוליאניות רגילות של הפעלה/השבתה. אתם יכולים להגדיר דגלים עם ערכים מסוג STRING,‏ INTEGER או DOUBLE כדי לשלוט במשתנים תפעוליים מורכבים, כמו ערכי סף של זמן ריצה, פרמטרים של עיצוב או מגבלות תצורה.

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

התראות מחרוזת

דגלי מחרוזת מעבירים מזהי הגדרות אישיות ישירות ללקוחות מחוברים.

gcloud beta app-lifecycle-manager flags create "feature-mode" \
  --key="feature-mode" \
  --flag-value-type=STRING \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "standard", "stringValue": "STANDARD"}, {"id": "advanced", "stringValue": "ADVANCED"}]' \
  --evaluation-spec='{"defaultTarget": "standard"}'

דגלים של מספרים שלמים

דגלים של מספרים שלמים קובעים את הגבולות המספריים המדויקים ואת גבולות המטען הייעודי (payload).

gcloud beta app-lifecycle-manager flags create "max-retry-count" \
  --key="max-retry-count" \
  --flag-value-type=INTEGER \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "low", "integerValue": 3}, {"id": "high", "integerValue": 10}]' \
  --evaluation-spec='{"defaultTarget": "low"}'

סימונים כפולים

דגלים מסוג Double מספקים ערכים ברמת דיוק גבוהה שמשמשים לספי הסתברות או לפרמטרים מסוג Float.

gcloud beta app-lifecycle-manager flags create "sampling-rate" \
  --key="sampling-rate" \
  --flag-value-type=DOUBLE \
  --location="global" \
  --unit-kind="demo-test-unitkind" \
  --variants='[{"id": "minimal", "doubleValue": 0.01}, {"id": "full", "doubleValue": 1.0}]' \
  --evaluation-spec='{"defaultTarget": "minimal"}'

הקצאת מתגי feature flag באמצעות השקות

כדי לוודא שהשינויים או העדכונים ב-App Lifecycle Manager מתבצעים באופן בטוח בקנה מידה נרחב, משתמשים בהשקות כדי להקצות עדכונים של feature flags.

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

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

קבוצות של מתגי feature flag

קבוצות של feature flags מאגדות כמה feature flags ומאפשרות לנהל אותם כמשאב לוגי אחד. האפשרות הזו שימושית כשמשיקים תכונות שדורשות תיאום בין כמה דגלים.

מידע נוסף על קבוצות דגלים

מניפסטים

מניפסטים מאפשרים לכם להגדיר ולנהל feature flags באמצעות קובצי JSON. אתם יכולים להעביר את ההגדרות האלה ל-App Lifecycle Manager API, או למשוך הגדרות קיימות כדי ליצור פונקציות גישה (accessors) עם מניעת שגיאות הקלדה לאפליקציה.

מידע נוסף על מניפסטים

טירגוט מורכב

אתם יכולים להשתמש ב-Common Expression Language‏ (CEL) כדי ליצור כללי טירגוט מתוחכמים שמבוססים על מאפייני משתמשים או בקשות, וכך לשלוט בצורה מדויקת באילו תכונות יוצגו למשתמשים.

מידע נוסף על טירגוט מורכב

ארכיטקטורה מרובת דיירים

אתם יכולים להשתמש בפריסות מרובות דיירים עם App Lifecycle Manager אם אתם מטרגטים דגלים ליחידות ספציפיות או לקבוצות של יחידות (באמצעות תוויות או דיירים). אפשר גם להטמיע השקות הדרגתיות בכל הדיירים.

מידע נוסף על ארכיטקטורה מרובת דיירים

הקצאת מתגי feature flag

מגדירים הקצאות (כמו ניסוי או בסיס השוואה) ומשתמשים בחלוקת התנועה כדי לבצע בדיקות או השקות אקראיות.

מידע נוסף על הקצאות של feature flag

המאמרים הבאים