Feature flagها

Pulse feature flagها را از کجا می‌خواند، چطور تغییرشان می‌دهید، و وقتی منبع در دسترس نیست چه می‌شود.

Feature flagها یک قابلیت محصول را برای کل استقرار، یا برای workspaceها، تیم‌ها، نقش‌ها یا کاربران انتخاب‌شده روشن یا خاموش می‌کنند. این صفحه برای کسانی است که یک استقرار Pulse را اداره می‌کنند. تنظیمات workspace در مدیریت آمده است.

Flag فقط یک قابلیت را نشان می‌دهد یا پنهان می‌کند و هیچ دسترسی‌ای نمی‌دهد: قابلیتی که روشن است هم همان permissionهای همیشگی را اعمال می‌کند.

Flagها از کجا می‌آیند

Flagها در flag store خود pulse-api نگه داشته می‌شوند. سطح‌شان platform است، پس یک تعریف همهٔ workspaceهای استقرار را پوشش می‌دهد. همهٔ اجزا آن‌ها را از pulse-api می‌خوانند:

جزءمسیر خواندن flag
pulse-api و schedulerمستقیم از flag store
سرویس‌های Pulse Agent (pulse-agent و pulse-ai)endpoint ارزیابی سرویس pulse-api
اپ‌های Web، Mac و iOSendpoint کلاینت pulse-api (POST /api/v1/ofrep/v1/evaluate/flags)

هیچ کلاینتی با Unleash تماس نمی‌گیرد.

انتخاب منبع

pulse-api، scheduler و pulse-agent هر کدام منبع خود را با FEATURE_FLAGS_SOURCE انتخاب می‌کنند:

مقدارپاسخ از
pulseflag store خود pulse-api. همین را به کار ببرید.
unleashیک سرور Unleash که با UNLEASH_URL و UNLEASH_API_TOKEN تنظیم می‌شود. بدون این دو، هر flag مقدار پیش‌فرض خود را می‌دهد. پیش‌فرض این متغیر همین است و برای استقرارهای قدیمی‌تر مانده است.
noneهیچ منبعی. هر flag مقدار پیش‌فرض خود را می‌دهد.
FEATURE_FLAGS_SOURCE=pulse

مقدار خالی یا ناشناخته جلوی بالا آمدن سرویس را می‌گیرد. عوض کردن منبع یک restart لازم دارد.

  • Pulse میزبانی‌شده روی pulse اجرا می‌شود و دیگر از Unleash استفاده نمی‌کند.
  • نصب‌های pulse-ctl همیشه روی pulse اجرا می‌شوند. pulse-ctl این تنظیم را خودش می‌نویسد و FEATURE_FLAGS_SOURCE و هر کلید UNLEASH_* را در service_env رد می‌کند.
  • pulse-ai تنظیمی ندارد و همیشه از pulse-api می‌خواند.

Unleash اختیاری است. اگر امروز از آن استفاده می‌کنید، یک platform admin می‌تواند flagهایش را با POST /api/v1/admin/feature-flags/import/unleash?dry_run=true به store کپی کند. برای نوشتن واقعی dry_run را بردارید. Flagهایی که store نمی‌تواند نشان بدهد، مثل rolloutهای درصدی یا variantها، به‌جای import گزارش می‌شوند.

زیر unleash، تغییرهایی که در flag store ذخیره می‌شوند اثری ندارند. پیش از مدیریت flagها در backoffice منبع را به pulse تغییر دهید.

مقدارهای پیش‌فرض

pulse-api هر بار که بالا می‌آید، هر flagی را که می‌شناسد و هنوز در store نیست با مقدار پیش‌فرضش اضافه می‌کند. Flagی که یک مدیر تغییر داده هیچ‌وقت reset نمی‌شود، پس نصب تازه به seed کردن نیاز ندارد.

Flagپیش‌فرضچه چیزی را کنترل می‌کند
pulse_agentروشنPulse Agent در اپ‌ها و سرویس agent
pulse_loopsروشنLoopها: کار زمان‌بندی‌شده و event-محور agent. وقتی خاموش است، routeهای Loop پاسخ LOOPS_DISABLED می‌دهند و اپ‌ها Loopها را پنهان می‌کنند.
subagentsروشنsub-agentهای Pulse Agent
project_coordinatorخاموشagent مربوط به Project Coordinator
pulse_live_effects_offخاموشیک kill switch: روشن بودنش افکت‌های بصری زنده را در اپ وب خاموش می‌کند.
pulse_judgmentsخاموشjudgmentهای TypeSafe در Pulse Agent. این‌ها متن workspace را به typesafe.ai می‌فرستند، پس flag تا وقتی مدیری روشنش نکند خاموش می‌ماند.
environment_runner_routingخاموشفرستادن coding sessionها به runner بر اساس execution target محیط
agent_appsخاموشagent appهای شخص ثالث

تغییر یک flag

یک platform admin flagها را در backoffice زیر Feature flags (/feature-flags) یا از طریق /api/v1/admin/feature-flags تغییر می‌دهد. هر تغییر یک session واردشده لازم دارد. API key یا توکن یک OAuth application نمی‌تواند flagها را تغییر دهد.

هر flag یکی از حالت‌های on، off یا targeted را دارد. Flag از نوع targeted چند rule دارد و وقتی یکی از ruleها match شود روشن است. یک rule وقتی match می‌شود که همهٔ شرط‌هایش برقرار باشند:

  • workspace یکی از workspaceهای فهرست باشد
  • کاربر یکی از کاربران فهرست باشد
  • کاربر عضو یکی از تیم‌های فهرست باشد
  • نقش کاربر در workspace یکی از نقش‌های فهرست باشد
  • کاربر platform admin باشد

Flag از نوع targeted برای هر کسی که هیچ ruleی با او match نشود خاموش است، پیش‌فرضش هر چه باشد. کار پس‌زمینه مثل اجرای زمان‌بندی‌شدهٔ Loop کاربر ندارد، پس فقط با شرط‌های workspace match می‌شود. pulse_loops را بر اساس workspace هدف بگیرید.

هر تغییر در تاریخچهٔ flag نگه داشته می‌شود. Archive کردن یک flag برگشت‌ناپذیر است: از آن به بعد مقدار پیش‌فرضش را می‌دهد و ویرایش نمی‌شود. برای کپی flagها بین استقرارها، آن‌ها را با GET /api/v1/admin/feature-flags/export export کنید و فایل را با POST /api/v1/admin/feature-flags/import import کنید.

هر سرویس یک تغییر را در حدود یک دقیقه می‌گیرد. هیچ چیز به restart یا config apply نیاز ندارد.

در استقراری که خودتان تنظیم می‌کنید، UNLEASH_OVERRIDES=flag=true,other=false روی pulse-api زیر هر منبعی یک مقدار را تحمیل می‌کند. pulse-ctl آن را نمی‌پذیرد، پس در نصب pulse-ctl به‌جایش flag را در backoffice تغییر دهید.

وقتی منبع در دسترس نیست

خواندن flag هیچ‌وقت شکست نمی‌خورد. وقتی منبع نمی‌تواند پاسخ بدهد، همهٔ اجزا یک‌جور fallback می‌کنند:

وضعیتپاسخ
بدون منبع (none، یا unleash بدون سرور)مقدار پیش‌فرض flag.
هنگام بالا آمدن، پیش از اولین پاسخآخرین مقدار شناخته‌شده اگر باشد، وگرنه پیش‌فرض. pulse_loops اینجا خاموش پاسخ می‌دهد، پس هیچ Loopی پیش از پاسخ منبع اجرا نمی‌شود. اجراهای زمان‌بندی‌شده صبر می‌کنند و دوباره تلاش می‌کنند.
منبع دیگر پاسخ نمی‌دهدآخرین مقدارهای شناخته‌شده، تا وقتی خودش برگردد.
منبع آن flag را تعریف نکردهمقدار پیش‌فرض flag.

صفحهٔ Feature flags در backoffice وقتی store منبع نیست و تغییرها اثری ندارند هشدار می‌دهد. GET /api/v1/admin/feature-flags منبع و آماده یا stale بودنش را در status گزارش می‌کند، و pulse-api همین را با metricهای pulse_feature_flag_source_ready{source} و pulse_feature_flag_source_stale{source} export می‌کند.

آخرین به‌روزرسانی