GH GambleHub

מאפיין דגלים ושחרור תכונהName

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

מטרות מפתח:
  • להפחית את רדיוס הפיצוץ עבור שחרור.
  • פריסה והפעלה נפרדת.
  • אפשר ניהול שינויים שקוף עם ביקורת, SLO וגלגול של קליק אחד.

1) סוגי דגלים ומתי להחיל אותם

שחרר דגלים - הכללה שלבית של תכונה חדשה (dark # canary ach ramp-up = 100%).
Ops/kill-switch - ניתוק מיידי של תלויות (ספק, תת-מערכת, חישובים כבדים).
ניסוי (A/B, multi-variant) - חלוקת התנועה לגוונים (משקולות, דביקות).
הרשאה/זכאות - גישה לתכונות לפי תפקיד/תוכנית/תחום שיפוט.
הגדרות מרוחקות - פרמטרים של התנהגות (סף, פסק זמן, נוסחה) מהדגל/הגדרה.
דגלי נדידה - החלפת תרשימים/נתיבי נתונים (מעבר לאינדקס/DB/endpoint חדש).

אנטי-דפוס: אותו דגל ”על הכל” - התפצל למאפיין, מתג מתג ופרמטרים.

2) מודל נתוני דגל (מינימום)

yaml flag:
key: "catalog. new_ranker"
type: "release"    # release      ops      kill      experiment      permission      config     migration description: "New Directory Ranking"
owner: "search-team@company"
created_at: "2025-10-01T10:00:00Z"
ttl: "2026-01-31" # delete deadline after 100% enable rules:
- when:
tenant_id: ["brand_eu","brand_latam"]
region: ["EE","BR"]
user_pct: 10 # progressive percentage then: "on"
- when:
kyc_tier: ["unverified"]
then: "off"
variants: # for experiments
- name: "control"; weight: 50
- name: "v1"; weight: 30
- name: "v2"; weight: 20 payload:
v1:
boost_freshness: 0. 3 boost_jackpot:  0. 2 v2:
boost_freshness: 0. 2 boost_jackpot:  0. 4 prerequisites: # dependent flags/schema versions
- key: "catalog. index_v2_ready"
must_be: "on"
audit:
require_ticket: true change_window: "09:00-19:00 Europe/Kyiv"
safeguards:
max_rollout_pct: 50 # stop threshold auto_rollback_on:
p95_ms: ">200"
error_rate: ">2%"

3) הערכה ומיקוד

Catalid: 'דייר _ id, אזור/רישיון, מטבע, ערוץ, מקום, תפקיד, תכנית, מכשיר, user_id, קוהורטה, kyc_tier, experiment_bucket'.
פקודת הערכה: תנאים מוקדמים * מכחישים כללים * לאפשר חוקים * ברירת מחדל.
דביק דביק: לניסויים, חשיש מזהה יציב (לדוגמה, 'חשיש (user_id, flag_key)') כך שהמשתמש תמיד מקבל אפשרות אחת.

פסאודו-קוד:
ts result = evaluate(flag, context)  // pure function if (!prereqs_ok(result)) return OFF if (deny_match(result, ctx)) return OFF if (allow_match(result, ctx)) return resolve_variant_or_on(result, ctx)
return flag. default

4) הפצת FF וארכיטקטורה

אפשרויות:
  • SDK (מומלץ): מקורות של אמת ומטמון בגב; איחוד ההיגיון.
  • הערכה של Edge/CDN: מיקוד מהיר על המתחם (שבו אין סודות PII/PII).
  • בצד הלקוח SDK: כאשר אתה צריך התאמה אישית של UI, אבל רק עם הקשר מינימלי וללא כללים רגישים.
  • הגדרות כקוד: אחסון דגלים במאגר, אימות CI, rollout באמצעות תקליטור.
מטמון אסטרטגיה:
  • עדכוני הזרמה (SSE/gRPC) + נופלים לתמונה האחרונה.
  • דגלי ”רעננות”: p95 5.

5) אסטרטגיות שחרור

5. שיגור כהה 1

התכונה מופעלת אך בלתי נראית למשתמש; לאסוף מדדים וטעויות.

5. 2 קנרית

אנחנו כוללים 1-5% מהתנועה בתחום שיפוט/דייר אחד; צג p95/p99, שגיאות, המרה.
תנאי עצירה - סף אוטומטיות מפעיל על ידי מדדים.

5. 3 Rollout מתקדם

10% -25% -50% -100% מתוכננים עם אימות ידני/אוטומטי.

5. 4 צל/שיקוף

אנו לשכפל בקשות למסלול החדש (ללא השפעה נראית לעין) ולהשוות את התוצאות/latency.

5. 5 כחול/ירוק + FF

אנו לפרוס שתי גרסאות; הדגל מנווט תנועה ומתחלף תלות בחלק.

6) תלות ועקביות השירות הצולב

השתמש בתנאים מוקדמים ו ”דגלי בריאות” של מוכנות: האינדקס נבנה, הנדידה הושלמה.
תיאום באמצעות אירועים: ”FlagChange (flag_key, היקף, new_state)”.

לתרחישים קריטיים, השתמש בשני שלבים:

1. אפשר cread-path _ 2) בדיקת מדדים * 3) מאפשרת כתיבה/תופעות לוואי.

  • חוזי שירות: ברירת המחדל חייבת להיות אל-כשל.

7) יכולת תצפית ו ־ SLO

מדדים לדגל/וריאנט/קטע:
  • 'flag _ eval _ p95 _ ms',' שגיאות _ rate ',' config _ treeness _ ms'.
  • מדדים עסקיים: ctr, 'המרה', 'ARPU', 'שימור', מעקות בטיחות (למשל. תקריות ר "ג).
  • סף SLO אוטומטי לאוטוקטופה.

לוגים/איתור: הוספת "flag _ key", "variant'," decision _ source "(שרת/אדג '/לקוח)," context _ hash ".

לוחות מחוונים: לגלגל ”סולם” עם מפתן, שגיאות מפת חום על ידי מקטעים.

8) בטיחות וציות

PII-מזעור בהקשר.
RLS/ACL: מי יכול לשנות את הדגלים (לפי תחום/שוק).
חלונות שעה של שינויים (שינוי חלונות) ו ”אישור כפול” לדגלים רגישים.
ביקורת אינסופית: מי/מתי/מה/למה (כרטיס/קישור תקרית).
תחום השיפוט: אסור לדגלים לעקוף את האיסורים הרגולטוריים (למשל, לשחק במדינה אסורה).

9) ניהול דגלים ”ארוכי ימים”

לכל דגל יש תאריך TTL/מחיקה.
לאחר הכללה של 100% - ליצור משימה למחיקת סניפי קוד, אחרת ”חובות הדגל” יגדלו.
סמן את הדגלים כ ”הגירה ”/” חד פעמית”, הפרד אותם מהקבוע ”אישור/הגדרה”.

10) חוזה מדגם API/SDK

API הערכה (צד שרת)

http
POST /v1/flags/evaluate
Headers: X-Tenant: brand_eu
Body: { "keys":["catalog. new_ranker","rgs. killswitch"], "context": { "user_id":"u42", "region":"EE" } }
→ 200
{
"catalog. new_ranker": { "on": true, "variant":"v1", "as_of":"2025-10-31T12:10:02Z" },
"rgs. killswitch":  { "on": false, "variant":null, "as_of":"2025-10-31T12:10:02Z" }
}

לקוח SDK (cultule, fallback)

ts const ff = await sdk. getSnapshot()     // bootstrap const on = ff. isOn("catalog. new_ranker", ctx)
const payload = ff. payload("catalog. new_ranker", "v1")

11) אינטראקציה עם מעגלים אחרים

מגבלות קצב/מכסות: דגלים יכולים להוריד RPS/לאפשר חפירה למשך האירוע.
מפסק מעגל/הידרדרות: להרוג-החלפה לנטרל שבילים כבדים ולאפשר הידרדרות.
Directory/Personalization: דגלים משנים משקולות/כללי דירוג (באמצעות תצורה מרוחקת).
נדידת מסד נתונים: דגלים מתרגמים בהדרגה קריאה/כתיבה לסכימה חדשה (read-replica # double-write # write-primary).

12) ספרי משחק (ספרי הפעלה)

1. תקרית לאחר הכללה של 25%

Autocatoff מופעל = Off Flag עבור כל/פלח, כרטיס לכוננות, אוסף סטטיסטיקות, RCA.
אפשר באופן זמני הידרדרות/ענף ישן דרך דגל הנדידה.

2. צמיחה בקטלוג p95

סף 'p95 _ ms> 200' - אוטוקטופ; לתקן תצלום של יומנים עם 'flag _ key = קטלוג. new_ranker'.
אפשר הגדרת מטען.

3. חוסר סמכות שיפוטית

דגל ההרשאה פתח בטעות את המשחק בביקורת ”NL-OFF + פוסט-עובדה”, והוסיף את כלל השמירה ”אזור מכחיש”.

4. שונות ב A/B

לעצור את הניסוי, לבצע ניתוח CUPED/stratied, לגלגל מחדש עם מאזניים מעודכנים.

13) בדיקה

יחידה: הערכה דטרמיניסטית של כללים/סדרי עדיפויות/תנאים מוקדמים.
חוזה: סכימת דגל (JSON/YAML), אימות, בדיקת CI לפני המיזוג.
מבוסס רכוש: ”למנוע> לאפשר”, ”הניצחונות הספציפיים ביותר”, דלי יציב.
משחק חוזר-מנגן אמיתי על התצורה החדשה.
E2E: תסריטים קנריים (שלב למעלה/שלב למטה), בדיקה אוטומטית ואירועי ביקורת.
זרימת צוק, צילום מורשת, עדכון דגל מסיבי.

14) שגיאות אופייניות

היגיון סודי בדגלי הלקוח (הדלפות/זיוף).
העדר TTL = ”בית הקברות” של דגלים בקוד.
דגלים ”אוניברסליים” ללא מקטע של מספר לא יכול לאתר את הבעיה.
אין מעקות בטיחות/אוטוקטופונים - תקריות ידניות.
תלות בלתי תואמת בין דגלים * לולאות/מתוך סינכרון.
הערכה של דגלים בכל בקשה ללא מטמון = latency spikes.
אין ביקורת/שינוי חלון - סיכוני ציות.

15) רשימת בדיקות לפני המכירה

[ דגל ] נוצר עם סוג, בעלים, תיאור, TTL ודרישות כרטיס.
[ ] כללי מיקוד מוגדרים; Deny 'על אזורים/תפקידים לא רצויים.
[ ] דביקות דטרמיניסטיות; תעודת הזהות יציבה.
[ ] דרישות מראש ודגלי בריאות מוכנים; ברירת מחדל.
[ ] לוחות מחוונים והתראות על p95/p99, error_rate, מעקות בטיחות עסקיים.
[ ] Autocatoff מוגדר; תעצור את סף העצירה ותנאי הריצה.
[ ] הקנרית - אחוזי אבני דרך/החלונות/בעלים
[ ] קונפיג 'ים מותאמים ב-CI; תצלום שמופץ על פני אשכולות/אזורים.
[ ] תמיכה/תיעוד מוצר; חוברות משחקים תקריות.
[ ] מתכנן להסיר ענפי קוד והדגל עצמו לאחר 100%.

16) דוגמה לדגל ”הגירה” (DB/Index)

yaml flag:
key: "search. use_index_v2"
type: "migration"
description: "Switching reads to index v2"
prerequisites:
- key: "search. index_v2_built"
must_be: "on"
rules:
- when: { tenant_id: ["brand_eu"], user_pct: 5 } then: "on"
- when: { tenant_id: ["brand_eu"], user_pct: 25 } then: "on"
safeguards:
auto_rollback_on:
search_p95_ms: ">180"
error_rate: ">1%"
ttl: "2026-02-01"

סיכום

Feature Flags הוא לא רק ”on/off”, אלא גם המשמעת של שינוי ניהול סיכונים. סוגי דגל ברורים, מטרות דטרמיניסטיות, תצוגות מתקדמות עם מעקות בטיחות, אוטוקאטה, ביקורת חשבונות ותוכנית מחיקה לבנות דגלים לארכיטקטורה כמחלקה ראשונה של אזרחים - ואתה יכול לספק ערך לעתים קרובות יותר, בטוח יותר ומשמעותי יותר.

Contact

צרו קשר

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

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.