چرخه های آزمایش میکروسرویس خیلی کند است

در اصل در پشته جدید ، توسط ارژون آیر ارسال شده است.
چرخه های آزمایش آهسته برای توسعه دهندگان خدمات میکروسرویس بسیار رایج است. بیاموزید که چگونه همه چیز را سرعت بخشید.
خدمات میکروسرویس بدون شک در نحوه ساخت و مقیاس برنامه ها متحول شده اند ، اما آنها پیچیدگی قابل توجهی را با گردش کار آزمایش ما معرفی کرده اند. این پیچیدگی در حال کند شدن تیم های توسعه به روش هایی است که بلافاصله آشکار نبودند که تیم ها برای اولین بار معماری میکروسرویس را به تصویب رساندند.
درک گردش کار توسعه مدرن
بیایید ببینیم که چگونه یک تیم مهندسی معمولی امروزه میکروسرویس را ایجاد و آزمایش می کند. توسعه دهندگان کد نوشتن روز خود را در محیط محلی خود شروع می کنند و آزمایش های اساسی را انجام می دهند تا تأیید کنند که تغییرات آنها مطابق آنچه در نظر گرفته شده است ، کار می کنند. از آنجا که آنها در انزوا کار می کنند ، این تست های محلی ، در حالی که سریع است ، می توانند فقط یک زیر مجموعه کوچک از عملکرد را تأیید کنند.
هنگامی که توسعه دهندگان آماده به اشتراک گذاشتن تغییرات خود هستند ، درخواست های کشش ایجاد می کنند. این باعث می شود چک های خودکار – به طور معمول تست های واحد و شاید برخی از تست های ادغام اساسی با وابستگی های مسخره. در حالی که این تست ها بازخورد سریع را ارائه می دهند ، آنها داستان کاملی راجع به نحوه عملکرد تغییرات در یک محیط واقعی با وابستگی های خدمات واقعی بیان نمی کنند.
تست واقعی عملکرد پس از ادغام کد ، هنگامی که خطوط لوله CI/CD تغییر در یک محیط ادغام یا مرحله بندی مشترک ایجاد می کنند ، انجام می شود. این محیط میزبان چندین سرویس است و اولین فرصت را برای توسعه دهندگان فراهم می کند تا ببینند که چگونه تغییرات آنها با سایر خدمات در یک محیط تولید مانند تعامل دارد. همچنین جایی است که تست های رگرسیون جامع ، اغلب در یک برنامه ثابت انجام می شود – شاید هر چند ساعت ، روزانه یا در برخی موارد هفتگی.
هزینه های پنهان محیط های مشترک
این گردش کار ممکن است روی کاغذ منطقی به نظر برسد ، اما واقعیت بسیار چالش برانگیز است. از آنجا که در کل سازمان مهندسی به اشتراک گذاشته شده است ، محیط مرحله بندی به یک تنگنا مهم تبدیل می شود. هنگامی که ده ها توسعه دهنده در طول روز تغییراتی را تحت فشار قرار می دهند ، محیط به یک منبع مورد بحث تبدیل می شود. هر تکرار در مرحله بندی می تواند 20 تا 30 دقیقه طول بکشد ، و توسعه دهندگان اغلب روزانه به چندین تکرار نیاز دارند تا تغییرات خود را به درستی کار کنند.
وقتی چیزی شکسته می شود ، اوضاع پیچیده تر می شود. مشکلات عیب یابی در یک محیط مشترک که در آن تغییرات متعدد اتفاق می افتد به طور همزمان می تواند ساعت ها یا حتی روزها طول بکشد. شناسایی اینکه آیا یک شکست ناشی از تغییرات شما ایجاد می شود ، تغییرات شخص دیگری یا یک مسئله زیست محیطی کارآگاه وقت گیر می شود.
اثرات موج دار
این چرخه بازخورد آهسته عواقب گسترده ای دارد. در مواجهه با زمان انتظار طولانی ، محیط های غیرقابل اعتماد و فشار برای ارسال سریعتر ، توسعه دهندگان اغلب به میانبرها متوسل می شوند. برخی ممکن است با حداقل آزمایش ، کد را به سمت تولید سوق دهند. برخی دیگر ممکن است انواع خاصی از آزمایشات را کنار بگذارند و منجر به کشف مسائل احتمالی فقط در تولید شود.
این چالش ها در تست خودکار نیز گسترش می یابد. نوشتن و حفظ تست های ادغام برای میکروسرویس نیاز به تلاش قابل توجهی دارد. هر تیم خدماتی نیاز به تنظیم محیط زیست ، وابستگی به زمان را مسخره کرده و با سیستم های CI/CD ادغام می شود. با تغییر خدمات و API ها ، حفظ این آزمایشات و تمسخر آنها به طور فزاینده ای سنگین می شود.
این مشکلات باعث می شود بسیاری از تیم ها به جای تست های ادغام سطح خدمات ، به تست های انتهایی به انتهای مبتنی بر رابط کاربری (UI) متکی باشند. اگرچه ممکن است این رویکرد در ابتدا ساده تر به نظر برسد ، اما مجموعه مشکلات خاص خود را ایجاد می کند. آزمایش های UI بسیار پوسته پوسته پوسته پوسته و حفظ آن دشوار است زیرا به طور مکرر پیشکسوت تغییر می کند. علاوه بر این ، توسعه دهندگان پس زمینه به ندرت این تست ها را می نویسند ، و بار خود را بر روی توسعه دهندگان جبهه یا تیم های تضمین کیفیت (QA) سوق می دهند. این رویکرد آزمایش متمرکز با رشد تیم های مهندسی به یک تنگنا تبدیل می شود ، زیرا تیم های QA به طور معمول با همان نرخ تیم های توسعه مقیاس نمی کنند.
راه حل های مشترک و محدودیت های آنها
بسیاری از تیم ها با ایجاد چندین نسخه از محیط صحنه خود سعی می کنند این چالش ها را برطرف کنند. ایده ساده است: محیط های بیشتر به معنای مشاجره کمتر است. با این حال ، همانطور که با تکثیر محیط اتفاق می افتد ، این رویکرد اغلب آتش سوزی می کند. حفظ چندین محیط تولید مانند گران است ، به سربار عملیاتی قابل توجهی نیاز دارد و مجموعه ای از چالش های سازگاری خود را معرفی می کند.
در جبهه اتوماسیون ، تیم ها اغلب به تست قرارداد می روند و تست های ادغام را مسخره می کنند. در حالی که این رویکردها می توانند مقداری ارزش داشته باشند ، آنها هزینه های نگهداری بالایی را ارائه می دهند و به طور دقیق شرایط تولید را نشان نمی دهند. در یک محیط میکروسرویس پویا که API ها به سرعت تکامل می یابند ، و به روز نگه داشتن مسخره ها به یک نبرد ثابت با کاهش بازده تبدیل می شوند.
یک رویکرد جدید برای آزمایش میکروسرویس
این چالش ها – چرخه بازخورد آهسته ، بار نگهداری مسخره ها و مشکل در مقیاس بندی تنگناها – همه ناشی از تلاش برای تطبیق رویکردهای آزمایش سنتی با خدمات مدرن است. ما به یک روش اساسی متفاوت برای تفکر در مورد محیط های آزمایش نیاز داریم.
اولین بینش کلیدی این است که شما می توانید بدون کپی کردن کل محیط ها به انزوا برسید. با جداسازی درخواست ها به جای زیرساخت ها ، می توانید محیط های آزمایشی سبک را ایجاد کنید که در حالی که اجازه می دهد بیش از حد انتخابی داشته باشد ، یک پایه مشترک را به اشتراک می گذارد. این رویکرد معماری تجارت سنتی بین استقلال محیط زیست و کارآیی منابع را از بین می برد.
پیشرفت دوم این است که این رویکرد جدید تیم ها را قادر می سازد تا در برابر داده های با کیفیت تولید خیلی زودتر در چرخه توسعه آزمایش کنند-قبل از ادغام کد ، هنگامی که تغییرات ساده ترین تغییر است. توسعه دهندگان به جای انتظار تا زمان صحنه یا محیط های ادغام برای تأیید رفتار با داده های واقع گرایانه ، می توانند مسائل مربوط به داده ها را در حین توسعه بدست آورند. این به معنای پیدا کردن اشکالات ظریف است که فقط با حجم داده های واقعی ، الگوهای استفاده و موارد لبه ظاهر می شوند ، به جای کشف آنها در اواخر چرخه هنگام رفع مشکل ، هزینه بیشتری دارند.
این تغییر در معماری تیم ها را قادر می سازد:
- بدون انتظار برای در دسترس بودن محیط زیست مشترک ، بازخورد فوری دریافت کنید.
- به جای حفظ مسخره های شکننده ، در برابر وابستگی های خدمات واقعی آزمون کنید.
- تأیید تغییرات در برابر داده های با کیفیت تولید در اوایل توسعه.
- تلاش های تست مقیاس در بین تیم ها بدون تنگناهای متمرکز.
این رویکردی است که ما در SignAdot اتخاذ کرده ایم ، جایی که ما تیم ها را قادر می سازیم تا جعبه های سبک وزن ایجاد کنند که ضمن به اشتراک گذاشتن یک محیط پایه مشترک ، انزوا در سطح درخواست را فراهم می کنند.
نتیجه یک رویکرد آزمایش است که واقعاً با میکروسرویس مقیاس می شود: توسعه دهندگان بازخورد فوری دریافت می کنند. آزمایشات منعکس کننده رفتار تولید واقعی است. و تیم ها می توانند به طور موازی کار کنند.
نگاه کردن
رویکرد Sandbox پایه ای را برای “تغییر چپ” طیف گسترده ای از سناریوهای آزمایش فراهم می کند که به طور سنتی در اواخر چرخه توسعه اتفاق می افتد. با دسترسی فوری به محیط های منزوی و داده های با کیفیت تولید ، تیم ها هم اکنون می توانند آزمایش عملکرد ، آزمایش های هرج و مرج ، اعتبار سنجی مهاجرت داده ها و حتی آزمایش ارتقاء چند سرویس پیچیده را انجام دهند-همه قبل از ادغام کد. این توانایی برای دستیابی به مسائل زودهنگام برای شرکت هایی مانند Doordash تحول یافته است که با از بین بردن تنگناها ، زمان چرخه انتشار آن را 30 برابر کاهش می دهد. تیم پلتفرم Brex ضمن بهبود پوشش تست ، 90 ٪ در سربار نگهداری محیط زیست را به دست آورد و با جدیت ، تیم های مهندسی اکنون تست های ادغام Premerge را با داده های با کیفیت تولید انجام می دهند.
با تکیه بر این بنیاد ، اکنون ما با آزمایش خودکار مرزهای آنچه ممکن است را تحت فشار قرار می دهیم. قابلیت SmartTests که اخیراً راه اندازی شده است ، از هوش مصنوعی برای تجزیه و تحلیل خودکار رفتار خدمات استفاده می کند ، و نسخه های پایه را در برابر تغییرات جدید برای تشخیص رگرسیون بالقوه مقایسه می کند. SmartTests با انجام “تفاوتهای” هوشمندانه از رفتار خدمات ، می توانند مسائل ظریف را که رویکردهای آزمایش سنتی از دست می دهند ، شناسایی کنند ، از تخریب عملکرد غیر منتظره گرفته تا تغییرات در الگوهای خطا.
این نتایج نشان می دهد که وقتی فراتر از رویکردهای آزمایش سنتی حرکت می کنید چه چیزی ممکن است. شما می توانید در کانال Slack ما ، که در آن تیم ها تجربیات و بهترین شیوه های خود را برای آزمایش میکروسرویس ها به اشتراک می گذارند ، به جامعه رو به رشد ما بپیوندید.