הקצאות של feature flag ב-App Lifecycle Manager עוזרות לכם לבדוק את האפליקציה על ידי חלוקה של אחוזי התנועה. כך חלק מהמשתמשים יראו וריאנט אחד של האפליקציה, ומשתמשים אחרים יראו וריאנט אחר. זה יעזור לכם לקבוע אילו וריאנטים או תכונות מוצלחים יותר (התהליך הזה נקרא לעיתים קרובות בדיקת A/B). הקצאות של feature flag עוזרות לכם להגדיר איך לפצל את התנועה ולשלב את הווריאציות שהוקצו באפליקציה.
במדריך הזה מוסבר איך להגדיר וריאציות, לפצל את התנועה ולשלב את הווריאציות באפליקציה.
כדי לפשט את המעקב והניתוח, כדאי להקצות מזהים של מחרוזות תיאוריות לגרסאות (לדוגמה, experimental ו-baseline) ולהשתמש בשמות האלה ישירות בקוד ובצינורות הניתוח.
דרישות מוקדמות
לפני שמתחילים, חשוב לוודא שיש לכם:
- השלמתם את המדריך למתחילים בנושא פריסת דגלי תכונות או את המדריך למתחילים בנושא שימוש בדגלי תכונות (מדריך עצמאי למתחילים).
- סביבת Google Cloud CLI שמוגדרת לניהול משאבים של App Lifecycle Manager.
הגדרת הקצאה של דגל תכונה
כדי להגדיר feature flag ניסיוני:
מגדירים את המאפיין האקראי (למשל,
userID) שישמש להקצאה קבועה של משתמשים לקבוצות כדי להבטיח חוויה עקבית לכל משתמש.gcloud beta app-lifecycle-manager flags attributes create "user-id-attr" \ --key="userID" \ --attribute-value-type="STRING" \ --location=globalמשתמשים בהקצאה כדי להגדיר את החלוקה (לדוגמה, 50/50), תוך הפניה למזהי הווריאציות התיאוריים.
# Create a flag with explicitly named variants for the experiment and a 50/50 allocation referencing the custom IDs gcloud beta app-lifecycle-manager flags create "search-algo-test" \ --key="search-algo-test" \ --flag-value-type=BOOL \ --location="global" \ --unit-kind="demo-test-unitkind" \ --variants='[ { "id": "experimental", "booleanValue": true }, { "id": "baseline", "booleanValue": false } ]'\ --evaluation-spec='{ "allocations": [{ "id": "search-split-50-50", "randomizedOn": "userID", "slots": [ {"variant": "baseline", "weight": 50}, {"variant": "experimental", "weight": 50} ] }], "defaultTarget": "search-split-50-50", "attributes": ["projects/PROJECT_ID/locations/global/flagAttributes/user-id-attr"] }'בשירות הקצה העורפי, מאתחלים את OpenFeature SDK ומזריקים את
userIDלהקשר ההערכה. משתמשים בשיטהBooleanValueDetails(או בשיטה מקבילה בשפה שלכם) כדי לאחזר אתvariantID(מחרוזת) באפליקציה. כך תוכלו לשנות את הלוגיקה של ה-Backend על סמך השם התיאורי ולא רק על סמך ערך בוליאני.// 1. Prepare evaluation context evalCtx := map[string]any{"userID": currentUser.ID} // 2. Fetch evaluation details to get the variant name details, err := client.BooleanValueDetails(ctx, "search-algo-test", false, evalCtx) // 3. Execute logic based on the Variant ID (string name) if details.Variant == "experimental" { results = search.ExperimentalV2(query) } else { results = search.BaselineV1(query) }כדאי להשתמש בשמות וריאנטים תיאוריים כדי שהתיעוד ייווצר אוטומטית במהלך הביקורת והניתוח. כדי לבצע ביקורת על ההערכות, צריך לרשום ביומן את המחרוזת
details.Variantלצד מדדי הביצועים:startTime := time.Now() // ... perform search ... duration := time.Since(startTime) // Audit: Log the descriptive variant name ("experimental" or "baseline") logger.Info("Search performed", "variant", details.Variant, "latency_ms", duration.Milliseconds(), )השוואה בין המדדים של קבוצת הניסוי לבין המדדים של קבוצת הבסיס מאפשרת לכם לנתח באופן ידני אם האלגוריתם החדש משפר את היעילות של הקצה העורפי או את הרלוונטיות של החיפוש, לפני שמתקדמים להשקה מלאה.