مهندسی آشوب

مهندسی آشوب چیست؟

مهندسی آشوب چیست؟

یافتن خطاها در یک سیستم توزیع شده فراتر از قابلیت تست استاندارد برنامه است. شرکت ها برای آزمایش مداوم میکرو سرویس ها به روش های دقیق تری نیاز دارند. یکی از این استراتژی هایی که در حال کسب محبوبیت است مهندسی آشوب است.

با استفاده از این روش، یک سازمان می تواند قبل از بروز خرابی پرهزینه، موارد مشکل دار را پیدا  کرده و آنها را برطرف کند. در ادامه بررسی خواهیم کرد که چگونه مهندسی آشوب اطمینان از سیستم های توزیع شده در مقیاس بزرگ را افزایش می دهد.

 

منظور از مهندسی آشوب چیست؟

 

مهندسی آشوب یک استراتژی برای کشف آسیب پذیری ها در یک سیستم توزیع شده است. این عمل مستلزم تزریق خرابی ها و خطاها به نرم افزار در زمان تولید آن است. هنگامی که عمداً باعث ایجاد اشکال می شوید، می توانید اثرات آن را مشاهده و ارزیابی کنید تا متوجه شوید که نرم افزار شما چگونه در برابر استرس واکنش نشان می دهد.

با خراب کردن چیزها به صورت عمدی، نکات جدید را کشف می کنید که می تواند بر اجزاء و کاربران نهایی تاثیر بگذارد. نقاط ضعف شناسایی شده را قبلا از اینکه باعث از دست رفتن محصولیا سرویس شوند را برطرف کنید.

 

مهندسی آشوب به مدیر اجازه می دهد که :

نقاط ضعف یک سیستم را شناسایی کند.
– نحوه واکنش سیستم به استرس در زمان واقعی را نظارت کنید
– تیم را برای شکست های واقعی آماده کنید.
– اشکالاتی که هنوز مشکلی در سیستم ایجاد نکرده‌اند را شناسایی کنید

 

نتفلیکس، اولی سازمانی بود که مهندسی آشوب را معرفی کرد. در سال ، این شرکت ابزاری به نام Chaos Monkey را منتشر کرد. با استفاده از این ابزار، مدیران قادر به ایجاد خرابی در مکان های تصادفی در فواصل زمانی مختلف بودند. چنین رویکردی در آزمایش باعث شده است که سیستم مبتنی بر ابر نتفلیکس بسیار مقاوم در برابر خطاها باشد.

 

چه کسی از مهندسی آشوب استفاده می کند؟

 

بسیاری از شرکتهای فناوری، مهندسی آشوب را برای بهبود انعطاف پذیری سیستم های توزیع شده انجام میدهند. و نتفلیکس نیز همچنان در این عمل پیشگام است، اما شرکت هایی مانند فیس بوک، گوگل، مایکروسافت و آمازون مدل های آزمایشی مشابهی دارند.

سازمان های سنتی بیشتر به استفاده از آزمایش آشوب روی آورده‌اند. به عنوان مثال، بانک ملی استرالیا از آشوب برای بستن سرورها به طور تصادفی و ایجاد انعطاف پذیری در سیستم استفاده کرد.

 

نیاز به مهندسی آشوب

 

شرکت Sun Microsystem هشت فرض نادرست را که برنامه نویسان معمولاً در مورد سیستم های توزیع شده ذکر کردند، عبارتند از:

 

– شبکه قابل اعتماد است.

– هیچ تاخیری وجود ندارد

– پهنای باند بی نهایت است

– شبکه امن است.

– توپولوژی هرگز تغییر نمی کند.

– یک ادمین وجود دارد

– هزینه حمل و نقل صفر است.

– شبکه یکدست است.

 

این مغالطه ها، پویایی یک برنامه توزیع شده که با معماری میکروسرویس ها طراحی شده است را نشان می دهد. این نوع سیستم، دارای متحرک های زیادی است و مدیران کنترل کمی بر زیرساخت ابر دارند.

تغییرات مداوم در راه اندازی باعث رفتار غیرمنتظره سیستم می شود. پیش بینی این رفتارها غیرممکن است، اما می توان آنها را با مهندسی آشوب بازتولید و آزمایش کرد.

 

تفاوت بین مهندسی آشوب و آزمایش شکست

 

یک آزمون شکست یک شرط را بررسی می کند و درست یا نادرست بودن یک ویژگی را تعیین می کند. چنین آزمایشی یک سیستم را قبل از تولید خراب می کند. نتایج معمولاً دوتایی هستند و اطلاعات جدیدی در مورد برنامه کشف نمی کنند.

هدف از آزمایش آشوب، ایجاد دانش جدید در مورد سیستم است. دامنه وسیع تر و نتایج غیرقابل پیش بینی شما را قادر می سازد تا با رفتارها، ویژگی ها و عملکرد سیستم آشنا شوید. شما راه های جدیدی را برای اکتشاف باز می کنید و می بینید که چگونه می توانید سیستم را بهبود بخشید.

هرچند آزمایش های مختلف آشوب و شکست در نگرانی ها و ابزارهای مورد استفاده همپوشانی دارند. وقتی از هر دو رشته برای آزمایش استفاده می کنید، بهترین نتایج را به دست می آورید.

 

نیاز به مهندسی آشوب


مهندسی آشوب چگونه کار می کند؟

 

تمام آزمایشات در مهندسی آشوب از طریق آزمایشاتی به اصطلاح آشوب انجام می شود. هر آزمایش با تزریق یک خطای خاص به یک سیستم مانند تاخیر، خرابی CPU یا سیاهچاله شبکه شروع می شود. سپس مدیران آنچه که فکر می کنند رخ می دهد را مشاهده می کنند و با آنچه واقعاً اتفاق می افتد مقایسه می کنند.

یک آزمایش به طور معمول شامل دو گروه از مهندسان است. گروه اول تزریق شکست را کنترل می کند و گروه دوم به اثرات آن می پردازد.

در ادامه جریان گام به گام آزمایش آشوب را مشاهده می کنید:

 

مرحله 1 : ایجاد فرضیه

 

مهندسان، سیستم را ارزیابی کرده و انتخاب می کنند که چه چیزی باعث خرابی می شود. گام اصلی مهندسی آشوب این است که پیش بینی کند سیستم چگونه با یک اشکال خاص مواجه می شود.

همچنین، مهندسان باید قبل از شروع آزمایش، آستانه های متریک بحرانی را تعیین کنند.

معیارها معمولا در دو مجموعه ارائه می شوند:

 

معیارهای کلیدی:

 

این ها معیارهای اصلی آزمایش هستند. به عنوان مثال، می توانید تاثیر بر تاخیر، درخواست در ثانیه یا منابع سیستم را اندازه گیری کنید.

 

معیارهای مشتری:

 

این معیارهای احتیاطی هستند که به شما می گویند آیا آزمون بیش از حد پیش رفته است یا خیر. نمونه هایی از معیارهای مشتری، میزان درخواست ها در دقیقه یا شروع جریان در ثانیه است.

اگر آزمایشی بر معیارهای مشتری تاثیر بگذارد، این نشانه‌ای است که مدیران، آزمایش خود را متوقف کنند.

در برخی آزمایش ها، این دو معیار می توانند یکدیگر را همپوشانی داشته باشند.

 

مرحله2: تزریق خطا

 

مهندسان، خرابی خاصی را به سیستم اضافه می کنند. از آنجا که هیچ راهی برای اطمینان از نحوه عملکرد برنامه وجود ندارد، همیشه یک برنامه پشتیبان وجود دارد.

اکثر ابزارهای مهندسی آشوب یک گزینه معکوس دارند. به این ترتیب، اگر شکلی پیش آید، می توانید با خیال راحت آزمایش را لغو کرده و به حالت ثابت برنامه بازگردید.

 

مرحله3 : اندازه گیری تاثیر

 

مهندسان بر سیستم نظارت می کنند در حالی که این اشکالات، ایرادات قابل توجهی را ایجاد می کند. نگرانی اصلی، معیارهای کلیدی سیستم هستند. اما همیشه بر کل سیستم نظارت می کنند.

اگر یک آزمایش، یک خاموشی شبیه سازی شده را شروع کند؛ تیم به دنبال بهترین راه برای رفع آن است.

 

مرحله4 : فرضیه خود را تایید(یا رد کنید)

 

یک آزمون آشوب موفق، یکی از دو نتیجه را دارد. شما یا انعطاف پذیری سیستم را تایید می کنید، یا مشکلی پیدا می کنید که باید آن را بر طرف کنید. هردو، نتایج خوبی هستند.

 

مهندسی آشوب چگونه کار می کند

 


اصول مهندسی آشوب

 

برخلاف نام آن، در مهندسی آشوب هیچ چیز تصادفی وجود ندارد.

این روش آزمایش از اصول دقیقی پیروی می کند که شامل موارد زیر است.

 

حالت عادی سیستم خود را بشناسید:

 

وضعیت پایداری را برای سیستم خود تعریف کنید. رفتار معمول یک سیستم، یک نقطه مرجع برای هرگونه آزمایش آشوب است. با درک سیستم، زمانی که سیستم سالم است، تاثیر اشکالات و خرابی ها را بهتر درک می کنید.

 

اشکالات واقعی و شکست ها را تزریق کنید.

 

همه آزمایش ها باید سناریوهای واقعی و محتمل را منعکس کنند. هنگامی که یک شکست واقعی را تزریق می کنید، به خوبی درک می کنید که چه فرایندها و فناوری هایی نیاز به ارتقاء دارند.

 

آزمایش در تولید

 

تنها در صورتی که آزمایش را محیط تولید اعمال کنید، میبینید که چگونه خاموشیها بر سیستم تاثیر می گذارد.

اگر تیم شما تجربه کمی در آزمایش آشوب دارد، اجازه دهید آزمایش خود را در محیط توسعه شروع کنند. پس از آماده شدن، محیط تولید را آزمایش کنید.

 

میزان خرابی را بررسی و کنترل کنید

 

همیشه میزان خرابی یک آزمایش آشوب را به حداقل برسانید. از آنجا که این آزمایشات در یک محیط تولید می افتد، این احتمال وجود دارد که این آزمایش بر کاربران نهایی تاثیر بگذارد.

یکی دیگر از اقدامات احتیاطی استاندارد این است که در صورت نیاز، تیمی برای واکنش واقعی به حادثه آماده باشد.

آشوب مداوم

 

می توانید آزمایشات آشوب را در همان سطح خط CI/CD خودکار کنید. آشوب مداوم به تیم شکا اجازه می دهد تا هر دو سیستم فعلی و آینده را به طور مداوم بهبود بخشند.

 

مزایای مهندسی آشوب

 

مهندسی آشوب، مزایای گسترده‌ای در چندین زمینه تجاری دارد:

 

مزایای کسب و کار

 

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

 

مزایای فنی

 

بینش از آزمایشات آشوب باعث کاهش حوادث می شود. اما مزایای فنی به اینجا ختم نمی شود. تیم درک بیشتری از حالت ها و وابستگی های سیستم پیدا می کند و به آنها امکان طراحی و ایجاد سیستمی قوی تر را می دهد.

همچنین، یک آزمون آشوب یک تمرین عالی برای تیم مهندسی است.

 

نمونه های مهندسی آشوب

 

هیچ محدودیتی برای آزمایش آشوب وجود ندارد. نوع آزمایش هایی که اجرا می کنید بستگی به معماری سیستم توزیع شده و اهداف تجاری شما دارد.

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

 

شبیه سازی خرابی یک جزء کوچک
– خاموش کردن ماشین مجازی جهت مشاهده واکنش وابستگی ها
– شبیه سازی بار بالا در CPU
– قطع سیستم از دیتابیس
– تزریق تاخیر بین سرویس ها
– به طور تصادفی باعث استثنا برای توابع می شود( همچنین به عنوان آشوب مبتنی بر عملکرد نیز شناخته می شود).
– افزودن دستورالعمل به برنامه و اجازه تزریق خطا( همچنین به عنوان درج کد نیز شناخته می شود)
اختلال در همگام سازی بین ساعت سیستم
– تقلید از خطاهای ورودی / خروجی
– ترافیک را به صورت ناگهانی افزایش می دهد
– تزریق شکست های byzantine

 

اصول مهندسی آشوب

 

مهندسی آشوب و DevOps :

 

مهندسی آشوب یک عمل رایج در فرهنگ DevOps است. چنین آزمایشاتی به DevOps اجازه می دهد تا برنامه را همزمان با سرعت توسعه کاملا ارزیابی کند.

تیم های DevOps معمولاً از آزمایش آشوب برای تعیین خط پایه عملکردی و تحمل زیرساخت ها استفاده می کنند. همچنین، آزمایشات با روشن کردن خروجی های حالت پایدار و آشفته، به ایجاد سیاست ها و فرایندهای بهتر کمک می کند.

برخی از شرکت ها ترجیح می دهند مهندسی آشوب را در چرخه عمر توسعه نرم افزار خود ادغام کنند. آشوب یکپارچه به شرکت ها اجازه می دهد تا بتوانند از قابلیت هر ویژگی جدیدی اطمینان حاصل کنند.

 

آزمایش آشوب برای هر سیستم توزیع شده در مقیاس بزرگ ضروری است.

 

بررسی مداوم نرم افزار هم برای امنیت و هم برای عملکرد آن حیاتی است. با بررسی پیشگیرانه یک سیستم، می توانید بار عملیاتی را کاهش دهید، در دسترس بودن سیستم و انعطاف پذیری را افزایش دهید.

 

مطالب مرتبط :

مهندسین DevOps

وظایف و مسئولیت های اسکرام مستر

نشت داده(Data Leakage) چیست و چطور می توان از آن جلوگیری کرد؟

بستن