استقرار زمانی است که کد وارد تولید می شود. انتشار زمانی است که شخصی بتواند واقعاً از آن استفاده کند. گیج کردن این دو یکی از سریع ترین راه ها برای ایجاد هر لحظه کمی پرتنش است.
feature flag برای ایجاد فاصله بین این دو لحظه خدمت می کند. شما می توانید امروز را مستقر کنید، فردا برای تیم داخلی، سپس برای یک مشتری آزمایشی، سپس برای 10٪ از کاربران فعال شوید. اگر مشکلی پیش آمد، پرچم را خاموش کنید. لزوماً لازم نیست کل نسخه را به عقب برگردانید.
پرچم فقط یک اگر نیست
از نظر فنی اغلب یک if است. از نظر فرهنگی خیلی بیشتر است.
if (await flags.isEnabled('checkout.v2.enabled', context)) { return newCheckout(input); } return oldCheckout(input);
آن if کوچک میتواند نشان دهنده یک عرضه تدریجی، یک آزمایش، یک مهاجرت، یک مجوز سازمانی یا یک kill switch عملیاتی باشد. مشکل این است که اگر آن را خوب مدیریت نکنید، می تواند به بدهی فنی نیز تبدیل شود که دو سال در کد می ماند.
OpenFeature از کجا وارد می شود
OpenFeature یک مشخصات باز برای ارزیابی feature flag با یک API مشترک است. ایده ساده است: کد برنامه شما نباید مستقیماً به فروشنده یا سیستم داخلی که برای پرچم استفاده می کنید بستگی داشته باشد.
برنامه می پرسد:
const enabled = await client.getBooleanValue('checkout.v2.enabled', false, { targetingKey: user.id, plan: user.plan, country: user.country, });
ارائه دهنده تصمیم می گیرد که قوانین از کجا آمده باشند: SaaS، فایل، سرویس داخلی، پرچم، پیکربندی GitOps. اگر روزی ویژگی پرچمگذاری باطن را تغییر دهید، لازم نیست برنامه در همه جا بازنویسی شود.
این جدایی مانند یک جزئیات معماری به نظر می رسد، اما با رشد پروژه احساس می شود.
زمینه نیمی از نبرد است
یک پرچم روشن یا خاموش برای همه مفید است، اما محدود است. تحویل پیشرونده در زمینه زندگی می کند:
- کاربر داخلی یا خارجی؛
- طرح رایگان یا سازمانی؛
- روستا؛
- سازمان؛
- نسخه برنامه؛
- درصد ثابت ترافیک
کلید مهم targetingKey است: باید پایدار باشد. اگر با هر درخواست تغییر کند، یک کاربر میتواند یک بار در نوع A و یک بار در نوع B باشد. برای یک آزمایش وحشتناک است، برای پرداخت میتواند فاجعهبار باشد.
عرضه معقول
جریانی که من دوست دارم این است:
- استقرار با پرچم خاموش.
- احتراق برای توسعه دهندگان و QA.
- روشن شدن برای مشتری یا مستاجر خلبان.
- 5% عرضه؛
- عرضه در 25%;
- عرضه 100%؛
- حذف کد و پرچم قدیمی.
نکته ای که اغلب فراموش می شود آخرین مورد است. یک پرچم موقت باید تاریخ مرگ داشته باشد. اگر برای همیشه باقی بماند، هر بازساز آینده باید بپرسد: "اما آیا این شاخه هنوز مفید است؟".
Kill switch: ابتدا آنها را آماده کنید
kill switch پرچمی است که زمانی که یک وابستگی خارجی شروع به مزاحمت میکند، یک شغل منابع زیادی را مصرف میکند یا منطق جدید خطاهای عجیبی ایجاد میکند، شما را نجات میدهد.
یک kill switch خوب باید باشد:
- پیدا کردن آسان؛
- مستند در runbook.
- گاهی اوقات آزمایش می شود.
- هنگام فعال شدن قابل مشاهده است.
- مستقل، تا آنجا که ممکن است، از بخشی که ممکن است شکسته شود.
بدترین چیز این است که در طول تصادف کشف کنید که پرچم وجود دارد، اما هیچ کس نمی داند که آیا هنوز کار می کند یا خیر.
قابلیت مشاهده یا عدم تحویل پیشرونده
روشن کردن یک ویژگی با 10٪ بدون بررسی معیارها فقط خوش بینی با چند مرحله است.
هر عرضه باید به سوالات ساده پاسخ دهد:
- آیا خطاها افزایش یافته است؟
- آیا تاخیر تغییر کرده است؟
- آیا کاربران جریان را کامل می کنند؟
- آیا بلیط های بیشتری وجود دارد یا تلاش مجدد؟
- آیا یک نوع تنها بر یک بخش تأثیر می گذارد؟
OpenFeature از قلابها در اطراف ارزیابی پرچم پشتیبانی میکند. آنها برای ثبت خطاها، افزودن معیارها یا پیوند دادن رتبه به trace مفید هستند.
نامگذاری و مالکیت
نام ها مهم است new_ui چیزی نمی گوید. checkout.v2.enabled خیلی بیشتر می گوید.
برای هر پرچم حداقل علامت گذاری می کنم:
- نام؛
- شرح؛
- مالک؛
- پیش فرض ایمن؛
- دلیل وجود آن؛
- تاریخ یا شرایط حذف
پرچم بدون صاحب تقریباً همیشه پرچمی است که هیچ کس آن را پاک نمی کند.
کجا آنها را ارزیابی کنیم
Frontend، Backend یا Edge؟ بستگی دارد.
اگر پرچم برای چیدمان، کپی یا نصب است، قسمت جلویی مناسب است. اگر مربوط به مجوزها، صورتحساب، محدودیتها یا دادههای حساس است، باید در باطن باشد. اگر شامل مسیریابی یا آزمایشهایی با ترافیک بالا باشد، ممکن است لبه منطقی باشد.
قانون ساده: فرانت اند می تواند تجربه را بهبود بخشد، اما نباید تنها مانع امنیتی باشد.
نتیجه گیری
feature flag به خوبی انجام شده رابطه با تولید را تغییر می دهد. آنها خطر را از بین نمی برند، اما آن را کوچکتر و قابل کنترل تر می کنند. می توانید تکه تکه رها کنید، مشاهده کنید، توقف کنید، به عقب برگردید، یاد بگیرید.
OpenFeature یک پایه تمیز اضافه می کند: یک API رایج، ارائه دهندگان قابل تعویض، و یک روش مرتب تر برای رشد سیستم. اما نظم و انضباط از آن شماست: پیشفرضهای ایمن، نامهای روشن، معیارها، مالکان و پاکیزگی.
بهترین پرچم پرچمی است که به شما کمک می کند با آرامش رها کنید و سپس زمانی که دیگر به آن نیاز ندارید ناپدید می شود.