GH GambleHub

ميزة الأعلام وإصدار الميزات

علم الميزة (FF) هو شرط مُدار يمكّن/يعطل سلوك النظام دون إصدار رمز. تتيح لك الأعلام: طرح الميزات بأمان، والمجموعات المستهدفة من المستخدمين/الأسواق/المستأجرين، وتعطيل المكونات الإشكالية بسرعة، وإجراء التجارب وتكوين المعلمات في وقت التشغيل.

الأهداف الرئيسية:
  • قلل من نصف قطر الانفجار للإطلاقات.
  • نشر منفصل وتفعيل.
  • اسمح بإدارة التغيير الشفافة من خلال التدقيق و SLO والتراجع بنقرة واحدة.

1) أنواع الأعلام ومتى يتم تطبيقها

أعلام الإصدار - تضمين تدريجي لميزة جديدة (مظلمة → كناري → تكثيف → 100٪).
Ops/kill-switch - فصل فوري للتبعيات (مزود، نظام فرعي، حسابات ثقيلة).
التجربة (A/B، متعدد المتغيرات) - تقسيم حركة المرور إلى متغيرات (الأوزان، الدلو اللزج).
الإذن/الاستحقاق - الوصول إلى السمات حسب الدور/الخطة/الولاية القضائية.
Remote Config - معايير السلوك (العتبة، المهلة، الصيغة) من العلم/التكوين.
أعلام الهجرة - تبديل المخططات/مسارات البيانات (الانتقال إلى مؤشر جديد/DB/نقطة النهاية).

النمط المضاد: نفس العلم «حول كل شيء» - مقسم إلى ميزة ومفتاح ومعلمات.

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) التقييم والاستهداف

Ключи таргетинга: 'مستأجر _ معرف، منطقة/ترخيص، عملة، قناة، موقع، دور، خطة، جهاز، user_id، مجموعة، kyc_tier، experiment_bucket'.
أمر التقييم: شروط مسبقة → رفض القواعد → تسمح بالقواعد → التقصير.
الدلو اللزج: للتجارب، تجزئة معرف مستقر (على سبيل المثال، «هاش (user_id، flag_key)») بحيث يحصل المستخدم دائمًا على خيار واحد.

Cseudocode:
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/أسرار).
  • SDK من جانب العميل: عندما تحتاج إلى تخصيص واجهة المستخدم، ولكن فقط مع الحد الأدنى من السياق وعدم وجود قواعد حساسة.
  • Config-as-Code: تخزين الأعلام في المستودع، التحقق من صحة CI، يتم طرحها عبر CD.
مخبأ الإستراتيجية:
  • Startup bootstrap + تحديثات البث (SSE/gRPC) + العودة إلى اللقطة الأخيرة.
  • أعلام SLA «النضارة»: p95 ≤ 5 s.

5) استراتيجيات الإصدار

5. 1 الإطلاق المظلم

الميزة ممكنة ولكنها غير مرئية للمستخدم ؛ جمع المقاييس والأخطاء.

5. 2 كناري

نشمل 1-5٪ من حركة المرور في ولاية قضائية/مستأجر واحد ؛ p95/p99، الأخطاء، التحويل.
ظروف التوقف - تؤدي عتبة التوقف التلقائي بالمقاييس.

5. 3 طرح تدريجي

10٪ → 25٪ → 50٪ → 100٪ مجدولة مع التحقق اليدوي/التلقائي.

5. 4 ظل/مرآة

نحن نكرر الطلبات على المسار الجديد (بدون تأثير واضح) ونقارن النتائج/زمن الوصول.

5. 5 الأزرق/الأخضر + FF

ننشر نسختين ؛ يقوم العلم بتوجيه حركة المرور وتبديل التبعيات حسب القطاع.

6) التبعيات والاتساق بين الخدمات

استخدام الشروط المسبقة و «الأعلام الصحية» للاستعداد: تم بناء المؤشر، واكتمال الهجرة.
التنسيق من خلال الأحداث: «تغير العلم (flag_key، النطاق، new_state)».

بالنسبة للسيناريوهات الحرجة، استخدم التبديل على مرحلتين:

1. تمكين مسار القراءة → 2) التحقق من المقاييس → 3) تمكين الكتابة/الآثار الجانبية.

  • عقود الخدمة: يجب أن يكون التخلف عن السداد آمنًا من الفشل.

7) إمكانية الرصد و SLO

المقاييس لكل علم/متغير/قطاع:
  • «flag _ eval _ p95 _ ms'،» أخطاء _ معدل «،» config _ newhness _ ms'.
  • مقاييس الأعمال التجارية: 'ctr'، 'التحويل'، 'ARPU'، 'الاحتفاظ'، حواجز الحماية (على سبيل المثال حوادث RG).
  • عتبات SLO التلقائية لـ autocatopa.

Logs/tracking: إضافة 'flag _ key', 'variant',' decision _ source '(server/edge/client),' context _ hash '.

لوحات القيادة: طرح «سلم» مع عتبات، أخطاء خريطة الحرارة حسب المقاطع.

8) السلامة والامتثال

في السياق.
RLS/ACL: من يمكنه تغيير الأعلام (حسب المجال/السوق).
نوافذ الساعة للتغييرات (تغيير النوافذ) و «تأكيد مزدوج» للأعلام الحساسة.
مراجعة الحسابات غير القابلة للتغيير: من/متى/ماذا/لماذا (رابط التذكرة/الحادث).
الولايات القضائية: يجب ألا تتحايل الأعلام على الحظر التنظيمي (على سبيل المثال، تشمل اللعب في بلد محظور).

9) إدارة الأعلام «طويلة العمر»

كل علم له تاريخ TTL/حذف.
بعد التضمين بنسبة 100٪ - قم بإنشاء مهمة لحذف فروع الرموز، وإلا فإن «دين العلم» سينمو.
ضع علامة على الأعلام على أنها «هجرة »/« لمرة واحدة»، وفصلها عن «الإذن/التكوين» المستمر.

10) نموذج عقد API/SDK

واجهة برمجة التطبيقات للتقييم (جانب الخادم)

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 (кэш، احتياطي)

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/تمكن من الاختناق طوال مدة الحادث.
قاطع الدائرة/التحلل: يقوم kill-switchi بتعطيل المسارات الثقيلة وتمكين التحلل.
الدليل/التخصيص: تقوم الأعلام بتغيير الأوزان/قواعد الترتيب (عبر Remote Config).
هجرات قاعدة البيانات: تترجم الأعلام تدريجياً القراءات/الكتابة إلى مخطط جديد (قراءة نسخة طبق الأصل → الكتابة المزدوجة → الكتابة الأولية).

12) كتب اللعب (كتب التشغيل)

1. الحادث بعد إدراج 25٪

أطلقت Autocatoff علم OFF → للجميع/القطاع، وتذكرة الاستدعاء، ومجموعة الإحصائيات، RCA.
تمكين التدهور/الفرع القديم مؤقتًا من خلال علم الهجرة.

2. نمو كتالوج p95

العتبة 'p95 _ ms> 200' - autocatoph ؛ قم بإصلاح لقطة من السجلات باستخدام "flag _ key = catalog. new_ranker'.
مكّن تهيئة الحمولة.

3. عدم الاختصاص

فتح علم الإذن اللعبة عن طريق الخطأ في «NL» - OFF + تدقيق ما بعد الحقائق، مضيفًا قاعدة الحراسة «تنكر المنطقة».

4. الفرق في ألف/باء

أوقف التجربة، وأجرى تحليلًا CUPED/طبقيًا، وأعد التدحرج باستخدام مقاييس محدثة.

13) الاختبار

الوحدة: التقييم الحتمي للقواعد/الأولويات/الشروط المسبقة.
العقد: مخطط العلم (JSON/YAML)، المصدقين، CI-check قبل الدمج.
قائم على الملكية: «رفض> اسمح»، «الانتصارات الأكثر تحديدًا»، دلو مستقر.
إعادة تشغيل-تشغيل السياقات الحقيقية على التكوين الجديد.
E2E: نصوص الكناري (تصاعد/تنحي)، والفحص التلقائي وأحداث التدقيق.
الفوضى: جرف متدفق، لقطة قديمة، تحديث ضخم للعلم.

14) أخطاء نموذجية

المنطق السري في أعلام العملاء (التسريبات/الانتحال).
غياب TTL → «مقبرة» الأعلام في الكود.
لا يمكن للأعلام «العالمية» بدون تجزئة → أن تحدد موقع المشكلة.
لا حواجز حماية/صوتية - حوادث يدوية.
التبعيات غير المتوافقة بين الأعلام → الحلقات/خارج المزامنة.
تقييم الأعلام في كل طلب بدون مسامير مخبأ → زمن انتقال.
لا توجد نافذة مراجعة/تغيير - مخاطر الامتثال.

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"

استنتاج

أعلام الميزة ليست فقط «تشغيل/إيقاف»، ولكن انضباط إدارة مخاطر التغيير. تجعل أنواع الأعلام الواضحة، والاستهداف الحتمي، والعروض التدريجية باستخدام حواجز الحماية، وخطة الاحتواء التلقائي، وخطة التدقيق والحذف، الإصدارات قابلة للتنبؤ بها والحوادث موجزة ومراقبة. قم ببناء الأعلام في الهندسة المعمارية كطبقة أولى من المواطنين - ويمكنك تقديم قيمة في كثير من الأحيان وأكثر أمانًا وأكثر جدوى.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.