LaunchDarkly یک پلتفرم مدیریت پرچمهای عملکردی است که به توسعهدهندگان برنامههای موبایل امکان میدهد بدون استقرار مجدد، قابلیتها را فعال و غیرفعال کنند. به گزارش LaunchDarkly، 2024، بیش از 4000 شرکت از این سرویس برای انتشار ایمن ویژگیهای جدید، تست A/B و استقرار مرحلهای در زمان واقعی استفاده میکنند.
نکات مهم
LaunchDarkly یک پلتفرم مدیریت پرچمهای عملکردی است که در سال 2014 توسط شرکت Catamorphic Corp تأسیس شد. وظیفه اصلی سرویس این است که به تیمهای توسعه امکان دهد ویژگیهای برنامه را در زمان واقعی بدون استقرار کد جدید فعال، غیرفعال و پیکربندی کنند.
برخلاف رویکرد سنتی که انتشار قابلیت جدید نیاز به انتشار نسخه در فروشگاه برنامه دارد، LaunchDarkly امکان تغییر رفتار از راه دور را فراهم میکند. برای توسعه موبایل این بسیار مهم است — بررسی در App Store و Google Play از چند ساعت تا چند روز طول میکشد، در حالی که یک پرچم در چند ثانیه تغییر میکند.
معماری LaunchDarkly بر سه مؤلفه ساخته شده است: سرور پرچم، SDKهای مشتری و پنل مدیریت. سرور پیکربندی پرچمها، قوانین فعالسازی و بخشهای کاربران را ذخیره میکند. SDK یک اتصال SSE دائمی با سرور برای دریافت بهروزرسانیها در زمان واقعی حفظ میکند.
هنگام تغییر پرچم در پنل، سرور بهروزرسانی را به همه SDKهای متصل ارسال میکند. تأخیر 200–500 میلیثانیه است. در صورت قطع اتصال، SDK از آخرین وضعیت کش شده تا زمان بازیابی کانال استفاده میکند. این تضمین میکند که برنامه با تنظیمات بهروز در لحظه قطع ارتباط به کار خود ادامه دهد.
پنل مدیریت LaunchDarkly یک رابط بصری برای ایجاد و مدیریت پرچمها فراهم میکند. پنل نشان میدهد وضعیت فعلی هر پرچم، تاریخچه تغییرات با حسابرسی از اینکه چه کسی و چه زمانی پیکربندی را تغییر داده و همچنین معیارهای استفاده. برای هر محیط میتوان قوانین جداگانه تنظیم کرد — یک پرچم در staging میتواند 100% فعال و در production 5% فعال باشد.
Feature flag یک کلید نامگذاری شده با قوانین و اهداف است. پرچمها میتوانند از نوع boolean، multivariate و JSON باشند. Rules شرایط فعالسازی را تعیین میکنند: به عنوان مثال «فعال برای 10% کاربران Android 12 از آلمان». Segments کاربران را بر اساس نسخه OS، منطقه، مدل دستگاه و ویژگیهای دلخواه گروهبندی میکند.
هر پرچم دارای محیطهایی است: development، staging و production. این امکان آزمایش یک ویژگی جدید در یک محیط ایزوله قبل از فعالسازی برای کاربران واقعی را فراهم میکند. قوانین محیطها به طور مستقل پیکربندی میشوند — یک پرچم میتواند در staging فعال و در production غیرفعال باشد.
LaunchDarkly SDKهای بومی برای Android، iOS، React Native و Flutter ارائه میدهد. هر SDK به حداقل پیکربندی نیاز دارد: کلید SDK و شناسه کاربر. کتابخانه به طور خودکار اتصال، کش و مدیریت خطاها را انجام میدهد.
برای اتصال، یک نمونه LDClient در Application.onCreate ایجاد میشود. مشتری پیکربندی را با کلید موبایل و زمینه کاربر دریافت میکند. پس از راهاندازی، برنامه در هر جایی از کد با روش boolVariation تغییرات پرچم را فراخوانی میکند.
class MyApplication : Application() {
private lateinit var ldClient: LDClient
override fun onCreate() {
super.onCreate()
val config = LDConfig.Builder("mobile-key-abc123")
.build()
val user = LDUser.Builder("user-unique-id")
.build()
ldClient = LDClient.init(this, config, user)
}
}
پس از راهاندازی، بررسی پرچم با یک روش انجام میشود. BoolVariation مقدار را مطابق با قوانین پرچم برمیگرداند. اگر SDK نتواند پیکربندی را دریافت کند، از مقدار پیشفرض استفاده میشود. روش boolVariationDetail همچنین دلیل پذیرش این مقدار توسط پرچم را برمیگرداند.
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
"new-checkout-flow",
false
)
if (showNewFeature) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
تست A/B در LaunchDarkly از طریق پرچمهای multivariate پیادهسازی میشود. به هر گزینه درصدی از ترافیک اختصاص داده میشود — مثلاً 50% کاربران صفحه قدیمی (گزینه A) و 50% صفحه جدید (گزینه B) را میبینند. پلتفرم کاربر را ثبت کرده و تضمین میکند که همیشه در یک گروه قرار میگیرد.
استقرار مرحلهای درصد کاربرانی که به ویژگی دسترسی دارند را به تدریج افزایش میدهد. برنامه معمول: 1% — روز اول، 5% — روز دوم، 25% — روز سوم، 100% — بعد از یک هفته. در صورت کشف خطا، پرچم فوراً برای همه غیرفعال میشود. LaunchDarkly با Amplitude، Mixpanel و Google Analytics برای ردیابی معیارهای هر تغییر ادغام میشود.
پلتفرم یک سیستم آزمایش داخلی ارائه میدهد که به طور خودکار اهمیت آماری تفاوتهای بین گزینهها را محاسبه میکند. معیارهای موجود: تبدیل، retention، تعداد جلسات، خطاها و رویدادهای سفارشی. نتایج در پنل با تجسم فواصل اطمینان نمایش داده میشوند. آزمایشها را میتوان هم روی ترافیک production و هم روی بخشهای جداگانه کاربران اجرا کرد.
ادغام LaunchDarkly با پلتفرمهای تحلیلی یک مزیت دیگر است. دادههای پرچمها به طور خودکار به Amplitude، Mixpanel، Google Analytics یا خط لوله داده شخصی از طریق Data Export API ارسال میشوند. این امکان ایجاد گزارشهایی درباره تأثیر هر ویژگی بر معیارهای کلیدی برنامه را فراهم میکند. LaunchDarkly همچنین از webhookها برای اطلاعرسانی به سیستمهای خارجی درباره تغییر وضعیت پرچمها پشتیبانی میکند.
بیایید چرخه کامل را بررسی کنیم: افزودن وابستگی، راهاندازی و بررسی پرچم برای تلهمتری خرابیها. ویژگی باید فقط برای تستکنندگان فعال باشد، نه برای کاربران واقعی. LaunchDarkly SDK برای Android از طریق Maven Central در دسترس است. نسخه 5.x از Kotlin Coroutines و Jetpack Compose برای دریافت واکنشی بهروزرسانیهای پرچم پشتیبانی میکند.
برای برنامههای iOS، LaunchDarkly پشتیبانی از Swift Package Manager و CocoaPods را ارائه میدهد. Swift SDK از async/await برای راهاندازی ناهمگام و Combine framework برای اشتراک تغییرات استفاده میکند. هر دو SDK (Android و iOS) از همگامسازی پسزمینه و کش در حافظه محلی برای کار در حالت آفلاین پشتیبانی میکنند.
// app/build.gradle
dependencies {
implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}
در کلاس CrashReporter پرچم crash-reporting-enabled را بررسی میکنیم. اگر پرچم فعال است برای کاربر فعلی — ارسال گزارشهای خرابی را شروع میکنیم. SDK به طور خودکار وضعیت جدید را هنگام تغییر در سرور دریافت میکند، اما برای راهاندازی یک بررسی یکباره کافی است.
class CrashReporter {
fun init() {
val client = LDClient.get()
if (client.boolVariation("crash-reporting-enabled", false)) {
Crashlytics.start()
}
}
}
سناریوهای موفق: مدیریت جریان پرداخت با غیرفعالسازی فوری در صورت خرابی ارائهدهنده، استقرار مرحلهای تغییرات UI با نظارت بر معیارها، شخصیسازی محتوا بر اساس بخشها. طبق وبلاگ رسمی LaunchDarkly، تیمها زمان بازیابی پس از خطاها را از ساعت به دقیقه کاهش میدهند.
ضدالگوها: استفاده از پرچمها برای منطق شرطی دائمی (پرچمها موقتی هستند)، ذخیره اسرار در ویژگیهای پرچم، ایجاد قوانین همپوشان. توصیه: پس از اتمام استقرار، پرچم را از کد حذف کنید — این کار از بدهی فنی و پیچیدگی پایگاه کد جلوگیری میکند. یک اشتباه رایج دیگر استفاده از پرچمها به عنوان کلیدهای طولانیمدت است که پس از تثبیت ویژگی هرگز از کد حذف نمیشوند.
استراتژی صحیح مدیریت پرچمها شامل برنامه حذف برای هر پرچم جدید است. LaunchDarkly ارائه میدهد ابزارهای داخلی برای تشخیص پرچمهای استفادهنشده — اگر SDK بیش از 30 روز مقدار پرچم را بررسی نکرده باشد، پرچم استفادهنشده در نظر گرفته میشود. چنین پرچمهایی در پنل علامتگذاری میشوند و میتوان آنها را با خیال راحت از کد حذف کرد.
برای پروژههای کوچک با یک تیم، LaunchDarkly ممکن است بیش از حد باشد — یک conditional ساده در کد یا Firebase Remote Config کافی است. پلتفرم را انتخاب کنید زمانی که بخشبندی پیچیده، حسابرسی تغییرات، آزمایشهای A/B یا مدیریت چندتیمی پرچمها مورد نیاز است. برای استارتاپها و پروژههای MVP، LaunchDarkly یک طرح رایگان Starter با محدودیت در تعداد پرچمها و MAU ارائه میدهد.
سازگاری LaunchDarkly با ابزارهای موجود یک معیار مهم انتخاب است. پلتفرم ادغام میشود با Jira، Slack، PagerDuty، Datadog و سایر سرویسها از طریق webhookها و API. تیمهایی که قبلاً از این ابزارها استفاده میکنند، بدون زیرساخت اضافی برای نظارت و اعلانها در هنگام تغییر وضعیت پرچمها، یکپارچگی یکپارچه دریافت میکنند. LaunchDarkly همچنین از ارائهدهنده Terraform برای مدیریت پرچمها به عنوان کد (Flags as Code) پشتیبانی میکند — این امکان ذخیره پیکربندی پرچم در Git و انجام code review قبل از اعمال را فراهم میکند.
سوالات متداول
LaunchDarkly یک طرح Freemium با محدودیت در تعداد پرچمها و MAU ارائه میدهد. طرحهای تجاری برای تیمها از 150 دلار در ماه شروع میشود و شامل پرچمهای نامحدود، حسابرسی تغییرات و ادغام با Jira و Slack است.
پلتفرم از بیش از 40 SDK پشتیبانی میکند، از جمله Android بومی (Kotlin/Java)، iOS (Swift/Objective-C)، React Native و Flutter. همه SDKهای موبایل از طریق Streaming API با ذخیره در حافظه محلی کار میکنند.
بله، LaunchDarkly دارای سیستم آزمایش داخلی با پرچمهای multivariate، توزیع ترافیک و محاسبه خودکار اهمیت آماری است. ادغام با Amplitude، Mixpanel و Google Analytics پشتیبانی میشود.
در صورت قطع اتصال، SDK از مقادیر کش شده پرچمها از حافظه محلی استفاده میکند. پس از بازیابی اتصال، SDK با سرور همگامسازی میشود و وضعیت فعلی پرچمها را اعمال میکند.
LaunchDarkly تست A/B، پرچمهای چند متغیره، بخشبندی پیچیده، حسابرسی تغییرات و SDK برای زبانهای سرور را ارائه میدهد. Firebase Remote Config سادهتر و رایگان است، اما از آزمایشهای چندمتغیره و حسابرسی دقیق پشتیبانی نمیکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید