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

مصرف‌کنندگان امروزی  انتظار سرویس بدون قطعی (zero-downtime) از محصولات دیجیتال و راه‌حل‌هایی که استفاده می‌کنند، دارند. کسب‌وکارهایی که به عنوان سرویس‌دهنده رقابت می‌کنند، به‌طور فزاینده‌ای از مهندسی آشوب، به‌ویژه در DevOps استفاده می‌کنند تا در برابر نقص‌های احتمالی آماده شوند.


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

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

مهندسی آشوب (Chaos Engineering)، تمرین تست استرس یک سیستم نرم افزاری در حال توسعه است. شما چندین رویداد مخرب مانند خرابی سرور، نقص های امنیتی، API throttling و اضافه بار (overload ) سیستم را شبیه سازی و استحکام نرم افزار را ارزیابی می‌کنید که به شناسایی ناکارآمدی‌های کشف نشده، رفع تنگناهای فرآیند و بهبود عملکرد کمک می‌کند. شما می‌توانید رویدادهای احتمالی را قبل از وقوع پیدا کنید و برای جلوگیری از آنها روند را بهبود ببخشید.

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

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

  • افزایش شدید ترافیک، لود بالای CPU و overload سرور، مانند شب سال نو که مردم در سراسر جهان در WhatsApp پیام ارسال می‌کنند.
  • صفحات وب‌سایت به دلیل ترافیک بالا و داده‌های بسیار زیاد، مانند زمان فروش جشنواره ویژه، بارگذاری طولانی و خرابی را تجربه می‌کنند.
  • شکست در مناطق وابستگی، مولفه های کوچک و در دسترس بودن
  • خرابی هاست و حافظه ابری به دلیل تخصیص نامناسب و همپوشانی عمده استفاده از بین رفته است.
  • استفاده از لود بالانسر به جای گروه‌های امنیتی که از منابع محافظت و ترافیک را فیلتر می‌کنند
  • حذف تصادفی کانتینر ECS
  • حذف ناگهانی چندین گره Kubernetes

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

  • هر سال، گوگل تست بازیابی فاجعه (DiRT) را انجام می دهد، آزمایش‌هایی مانند قطع ناگهانی به دلیل بلایای طبیعی، از دست دادن گسترده داده‌ها یا تغییرات ناگهانی الگوریتم را انجام می‌دهد. آنها خطاهای سیستمی را تزریق می‌کنند که بدترین سناریوها را شبیه سازی و عملکرد سیستم آنها را ارزیابی می‌نماید.
  • نتفلیکس مجموعه‌ای از ابزارها به نام Simian Army را توسعه داده است. هر ابزار، مانند Chaos Monkey، به گونه‌ای برنامه ریزی شده است که در طول ساعات کاری، خرابی خاصی را به طور تصادفی تحمیل کند. پاسخ به شکست توانایی و کاستی‌های آن را نشان می‌دهد که بر اساس آن نت‌فلیکس می‌تواند دوباره آن‌ها را بررسی، اصلاح و از آن جلوگیری کند.
  • آمازون رویدادهایی به نام GameDay را برنامه‌ریزی می‌کند که طی آن توسعه‌دهندگان نرم‌افزار خود را در معرض مشکلات مختلف احتمالی، مانند شکست‌های پرداخت، از دست دادن اطلاعات و تاخیر در بارگذاری صفحات قرار می‌دهند. این سیستم برای قابلیت اطمینان و پاسخ به تخریب سرویس آزمایش شده است. ایرادات شناسایی شده مورد توجه قرار می‌گیرد و اقدامات لازم برای جلوگیری از آنها انجام می‌شود.

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

اصول کار مهندسی آشوب شامل توسعه سناریوها و رویه هایی برای آزمایش جنبه خاصی از سیستم‌ها است. در اینجا مراحل اصلی درگیر هستند:

  1. پارامترها را انتخاب و baseline را تعیین کنید. این برای درک انحراف سیستم از حالت پایدار حیاتی است. از این رو، شما باید پارامترهای مورد آزمایش را تعریف و معیارهای steady-state را تعیین کنید.
  2. فرضیه‌ای را در مورد تاثیر اختلال بر وضعیت پایدار ایجاد کنید. فرضیه باید قابلیت اطمینان و انعطاف پذیری حالت پایدار را بررسی کند و انحرافات احتمالی را نشان دهد.
  3. چندین متغیر را اعمال و پارامترهای سیستم را آزمایش کنید. برای درک بهتر شکست‌های مقیاس بزرگ، تاثیر متغیرها را بر سیستم در سراسر سازمان ارزیابی کنید. اختلالات را خودکار نموده و تست را در پروداکشن اجرا کنید.
  4. علت اصلی را شناسایی و اقداماتی را برای جلوگیری از مشکلات ایجاد کنید. اقدامات را در سیستم یکپارچه و آن را دوباره آزمایش نمائید تا عملکرد آن را بررسی شود.

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

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

چنین روش ارزیابی بی‌اشتباهی ضروری است، به ویژه برای یک فرآیند سیال مانند DevOps، که در آن چندین فرآیند به طور همزمان اجرا می‌شوند. طبیعی است که تا سال 2023، تقریبا 40 درصد از کسب و کارها قصد داشتند مهندسی آشوب را در عملیات DevOps ادغام کنند.

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

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

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

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

یک برنامه DevOps خوب به شما آموزش می‌دهد تا فرصت‌هایی را برای پیاده‌سازی مهندسی آشوب شناسایی کنید و شما را در مسیری قرار دهد تا در آن مهارت پیدا کنید.


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

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

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

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

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

به عنوان یک متخصص DevOps، از شما انتظار می‌رود که روش مناسبی را برای اعمال مهندسی آشوب در سیستم سازمان خود انتخاب کنید. دانستن مزایا و معایب این روش برای اتخاذ تصمیمات مطلوب ضروری است.

در اینجا نگاهی گذرا به مزایا و معایب مهندسی آشوب داریم.

مزایا

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


معایب

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