ویژگی پرچم ها و انتشار ویژگی
پرچم ویژگی (FF) یک وضعیت مدیریت شده است که رفتار سیستم را بدون انتشار کد فعال/غیرفعال می کند. پرچم اجازه می دهد تا شما را به: رول از ویژگی های با خیال راحت، گروه هدف از کاربران/بازار/مستاجران، به سرعت غیر فعال کردن اجزای مشکل ساز، انجام آزمایش و پیکربندی پارامترها در زمان اجرا.
اهداف کلیدی:- کاهش شعاع انفجار برای انتشار.
- استقرار و فعال سازی جداگانه.
- اجازه می دهد مدیریت تغییر شفاف با حسابرسی، SLO و یک کلیک برگشت.
1) انواع پرچم ها و زمان استفاده از آنها
پرچم های انتشار - گنجاندن مرحله ای از یک ویژگی جدید (تاریک → قناری → رمپ → 100٪).
Ops/kill-switch - قطع فوری وابستگی ها (ارائه دهنده، زیر سیستم، محاسبات سنگین).
آزمایش (A/B، چند نوع) - تقسیم ترافیک به انواع (وزن، دست و پنجه نرم چسبنده).
مجوز/حق - دسترسی به ویژگی های نقش/طرح/صلاحیت.
پیکربندی از راه دور - پارامترهای رفتار (آستانه، اتمام وقت، فرمول) از پرچم/پیکربندی.
پرچم های مهاجرت - تغییر طرح ها/مسیرهای داده (حرکت به شاخص/DB/نقطه پایانی جدید).
ضد الگو: همان پرچم «در مورد همه چیز» - تقسیم به ویژگی، سوئیچ comp و پارامترها.
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) ارزیابی و هدف گذاری
: 'tenant _ id، region/license، currency، channel، locale، role، plan، device، ، cohort، .
ترتیب ارزیابی: پیش نیازها → انکار قوانین → اجازه قوانین → پیش فرض.
bucketing چسبنده: برای آزمایش، هش یک شناسه پایدار (به عنوان مثال، 'هش (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 سمت سرور (توصیه می شود): منابع حقیقت و کش در باطن ؛ وحدت منطق است.
- ارزیابی لبه/CDN: هدف قرار دادن سریع در محیط (که در آن هیچ PII/اسرار وجود دارد).
- SDK سمت مشتری: هنگامی که شما نیاز به شخصی سازی UI دارید، اما فقط با حداقل زمینه و بدون قوانین حساس.
- پیکربندی به عنوان کد: ذخیره پرچم ها در مخزن، اعتبار سنجی CI، گسترش از طریق CD.
- بوت استرپ راه اندازی + به روز رسانی جریان (SSE/gRPC) + بازگشت به آخرین عکس فوری.
- پرچم های «طراوت» SLA: p95 ≤ 5 s.
5) استراتژی های انتشار
5. 1 راه اندازی تاریک
این ویژگی فعال است اما برای کاربر نامرئی است. جمع آوری معیارها و خطاها
5. 2 قناری
ما شامل 1-5٪ از ترافیک در یک حوزه قضایی/مستاجر ؛ مانیتور p95/p99، خطاها، تبدیل.
شرایط توقف - آستانه autocatoph باعث شده توسط معیارها.
5. 3 برنامه ریزی پیشرفته
10٪ → 25٪ → 50٪ → 100٪ برنامه ریزی شده با تأیید دستی/خودکار.
5. 4 سایه/آینه کاری
ما درخواست ها را به مسیر جدید تکرار می کنیم (بدون اثر ظاهری) و نتایج/تاخیر را مقایسه می کنیم.
5. 5 آبی/سبز + FF
ما دو نسخه داریم ؛ پرچم ترافیک را هدایت می کند و وابستگی ها را بر اساس بخش تغییر می دهد.
6) وابستگی ها و سازگاری خدمات متقابل
از پیش نیازها و «پرچم های سلامتی» آمادگی استفاده کنید: شاخص ساخته شده است، مهاجرت کامل شده است.
هماهنگی از طریق رویدادها: «FlagChanged (flag_key, scope, new_state)».
1. فعال کردن مسیر خواندن → 2) بررسی معیارها → 3) فعال کردن نوشتن/عوارض جانبی.
- قراردادهای خدمات: پیش فرض باید خاموش باشد.
7) قابلیت مشاهده و SLO
معیارها در هر پرچم/نوع/بخش:- 'flag _ eval _ p95 _ ms'، 'errors _ rate'، 'config _ freshness _ ms'.
- معیارهای کسب و کار: «CTR»، «تبدیل»، «ARPU»، «نگهداری»، guardrails (به عنوان مثال حوادث RG)
- آستانه SLO اتوماتیک برای اتوکاتوپا.
Logs/tracing: اضافه کردن 'flag _ key', 'variant', 'decision _ source' (server/edge/client), '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 مشتری (кэш، برگشت)
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 مسیرهای سنگین را غیرفعال کرده و تخریب را فعال می کند.
دایرکتوری/شخصی سازی: پرچم ها وزن/قوانین رتبه بندی را تغییر می دهند (از طریق پیکربندی از راه دور).
مهاجرت پایگاه داده: پرچم ها به تدریج خواندن/نوشتن را به یک طرح جدید ترجمه می کنند (read-replica → dual-write → write-primary).
12) کتاب های بازی (کتاب های اجرا)
1. حادثه پس از 25٪ گنجاندن
Autocatoff باعث شد → پرچم OFF برای همه/بخش، بلیط برای تماس، مجموعه آمار، RCA.
به طور موقت شاخه تخریب/قدیمی را از طریق پرچم مهاجرت فعال کنید.
2. رشد کاتالوگ p95
آستانه 'p95 _ ms> 200' - اتوکاتوپ ؛ رفع یک عکس فوری از سیاهههای مربوط با 'flag _ key = کاتالوگ. new_ranker' است.
فعالسازی پیکربندی بار.
3. عدم صلاحیت قضایی
پرچم مجوز به اشتباه بازی را در «NL» باز کرد - OFF + ممیزی پس از واقعیت، اضافه کردن قانون نگهبان «منطقه انکار».
4. واریانس در A/B
آزمایش را متوقف کنید، تجزیه و تحلیل CUPED/طبقه بندی شده را انجام دهید، با مقیاس های به روز شده دوباره رول کنید.
13) تست
واحد: ارزیابی قطعی از قوانین/اولویت ها/پیش نیازها.
قرارداد: طرح پرچم (JSON/YAML)، اعتبار سنج، CI-چک قبل از ادغام.
مبتنی بر اموال: «انکار> اجازه می دهد»، «خاص ترین برنده»، پایدار bucketing.
پخش زمینه های واقعی در پیکربندی جدید.
E2E: اسکریپت های canary (گام به گام/گام به پایین)، بررسی خودکار و رویدادهای حسابرسی.
هرج و مرج: صخره جریان، عکس فوری میراث، به روز رسانی پرچم عظیم.
14) خطاهای معمول
منطق مخفی در پرچم های مشتری (نشت/spoofing).
عدم وجود TTL → «گورستان» پرچم ها در کد.
پرچمهای «جهانی» بدون تقسیم بندی → نمیتوانند مشکل را محلی کنند.
بدون محافظ/اتوکاتوفون - حوادث دستی.
وابستگیهای ناسازگار بین پرچمها → حلقهها/خارج از همگامسازی.
ارزیابی پرچمها در هر درخواست بدون cache → latency spikes.
بدون پنجره حسابرسی/تغییر - خطرات انطباق.
15) چک لیست پیش فروش
- پرچم ایجاد شده با نوع، مالک، توضیحات، TTL و نیاز بلیط.
- قوانین تعیین شده ؛ 'deny' در مناطق/نقش های ناخواسته.
- دست و پنجه نرم چسبنده قطعی است ؛ کارت شناسايي پايداره.
- پیش نیازها و پرچم های بهداشتی آماده ؛ پیش فرض امن است.
- داشبورد و هشدار در p95/p99، error_rate، guardrails کسب و کار.
- پیکربندی خودکار ؛ آستانه توقف rollout و شرایط برگشت.
- طرح قناری - درصد/نقاط عطف/تغییر پنجره/صاحبان
- پیکربندی ها در CI اعتبار دارند ؛ Snapshot در سراسر خوشه ها/مناطق توزیع شده است.
- مستندات پشتیبانی/محصول ؛ کتابهای بازی حادثه.
- برنامه ریزی برای حذف شاخه های کد و پرچم خود را پس از 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"
نتیجه گیری
پرچم ها نه تنها «روشن/خاموش» هستند، بلکه نظم و انضباط مدیریت ریسک را تغییر می دهند. پاک کردن انواع پرچم، هدف گیری قطعی، نمایش مترقی با guardrails، autocathof، حسابرسی و حذف طرح را منتشر قابل پیش بینی و حوادث مختصر و کنترل می شود. ساخت پرچم ها به معماری به عنوان یک کلاس اول شهروندان - و شما می توانید ارزش بیشتر، امن تر و معنی دار تر ارائه.