مهندسی آشوب چیست؟
مهندسی آشوب رویکردی قاعدهمند برای شناسایی خرابیها قبل از وقوع آنهاست. در این روش با اجرای آزمایشهای پیشگیرانه نحوه واکنش سیستم در شرایط بحرانی را شناسایی و مشکلات آن را رفع میکنیم. مهندسی آشوب به ما این امکان را میدهد که تصورمان از رفتار سیستم را با آنچه واقعا اتفاق میافتد مقایسه کنیم و بفهمیم چه مشکلاتی در سیستم ما وجود دارد.
کارشناسان میگویند مهندسی آشوب در واقع فرایند آزمایش یک سیستم محاسباتی است تا مطمئن شویم که سیستم میتواند در برابر اختلالات غیرمنتظره مقاومت کند. مهندسی آشوب را بر مبنای مفاهیم زیربنایی نظریه آشوب طراحی کردهاند. این نظریه بر رفتار تصادفی و اتفاقات غیرقابلپیشبینی تمرکز دارد. هدف مهندسی آشوب شناسایی نقاط ضعف سیستم از طریق آزمایشهای کنترلشده است؛ یعنی با این کار میتوانیم نقاط آسیبپذیر سیستم را پیدا و مشکلاتشان را رفع کنیم.
سیستمها به دلایل مختلف دچار مشکل میشوند. هرچه سیستم بزرگتر و پیچیدهتر باشد، رفتارهای آن پیشبینینشدنیتر و آشفتهتر میشوند. مفهوم اصلی نظریه آشوب خرابکردن عمدی یک سیستم برای جمعآوری اطلاعاتی است که بهکمک آنها میتوانیم سیستم را مقاوم و انعطافپذیر کنیم. یکی از مهمترین کاربردهای مهندسی آشوب یافتن نقاط ضعف امنیتی در فضای دیجیتال است؛ مثلا مهندسان IT با انجام چندین آزمایش مشکلات پنهان، نقاط کور و گلوگاههای عملکردی سیستم را پیدا میکنند تا قبل از حملات هکری آنها را از بین ببرند.
چرا مهندسی آشوب مهم است؟
امروزه زندگی و کسبوکار ما وابسته به سیستمهای کامپیوتری است. با پیشرفت تکنولوژی این سیستمهای پیچیدهتر شدهاند و پیشبینی خطاهای احتمالی آنها دشوار است. مشکلات سیستمهای کامپیوتری تأثیر درخور توجهی بر زندگی ما دارند و ممکن است یک خطای کوچک هزینه سنگینی برای شرکتها داشته باشد. مثلا بهگفته مدیرعامل هواپیمایی بریتانیا، یک خطای سیستمی در سال ۲۰۱۷ باعث شد دهها هزار مسافر این شرکت هواپیمایی در فرودگاه سرگردان شوند و این مشکل ۸۰میلیون پوند به این شرکت ضرر زد. بنابراین شرکتها نیاز دارند مشکلات احتمالی را پیشبینی کنند تا در شرایط بحرانی گرفتار نشوند.
نقش مهندسی آشوب در سیستمهای توزیعشده
سیستمهای توزیعشده پیچیدهتر از سیستمهای یکپارچهاند. این سیستمها متشکل از چندین کامپیوترند که بهواسطه یک شبکه به هم متصلاند. این کامپیوترها با هم تعامل دارند و اجزای خود را با هم به اشتراک میگذارند. هدف سیستمهای توزیعشده همگامسازی و تکمیل وظایف مختلف است، بنابراین دشوار است که همه خطاهای احتمالی آنها را پیشبینی کنیم. ۸ اشتباه در سیستمهای توزیعشده وجود دارد که ممکن است برنامهنویسان تازهکار آنها را در نظر نگیرند. این خطاها عبارتاند از:
• شبکه قابلاعتماد است
• تأخیر در شبکه صفر است
• پهنای باند بینهایت است
• شبکه امن است
• توپولوژی تغییر نمیکند
• یک مدیر وجود دارد
• هزینه حملونقل صفر است
• شبکه همگن است
بسیاری از این خطاها به ما کمک میکنند آزمایشهای مهندسی آشوب را طراحی کنیم؛ مثلا قطعشدن شبکه میتواند طیف وسیعی از خرابیها را ایجاد کند که بر مشتریان اثر میگذارند یا برنامهها ممکن است دائما حافظه را درگیر کنند. هریک از این نمونهها نیاز به آزمایش و آمادهسازی دارند؛ به همین دلیل مهندسی آشوب به ما کمک میکند مشکلات یک سیستم توزیعشده را بشناسیم و برای آنها آماده باشیم.
نحوه عملکرد مهندسی آشوب
مهندسی آشوب شبیه تست استرس است و هدف آن شناسایی و اصلاح مشکلات سیستم یا شبکه. تست استرس یک جزء را در یک زمان آزمایش و تصحیح میکند، اما مهندسی آشوب تمام مشکلاتی را بررسی میکند که بینهایت علت احتمالی دارند؛ یعنی به مسائل دید کلگرا دارد و عملکرد سیستم در برابر مجموعه مشکلاتی را میسنجد که احتمال وقوع کمتری دارند. فرایند مهندسی آشوب شامل چند مرحله است که در ادامه آنها را بررسی میکنیم.
1. برنامهریزی فرایند در حالت ثابت
یکی از مهمترین سؤالات در مهندسی آشوب این است که چه چیزی ممکن است خطا ایجاد کند؟ با پرسیدن این سؤال درباره خدمات و سیستمی که داریم، میتوانیم نقاط ضعف بالقوه را ارزیابی و درباره نتایج احتمالی آن بحث کنیم. در این مرحله نحوه عملکرد صحیح سیستم در حالت عادی را شناسایی میکنیم. سپس الویتهایمان را بررسی میکنیم تا خطاهایی را پیدا کنیم که محتملترند یا آسیب بیشتری میزنند.
2. ایجاد فرضیه
در این مرحله، میخواهیم بدانیم خطا در این نقاط ضعف چه اثری بر عملکرد سیستم، مشتریان و خدمات سازمان میگذارد. بنابراین یک یا چند مورد از نقاط ضعف سیستم را در نظر میگیریم و فرضیهای درباره آنها میسازیم. سناریوهای احتمالی را بهشکل فرضیه تدوین میکنیم تا بدانیم چطور باید در سیستم آشوب ایجاد کنیم؛ مثلا آزمایشکنندگان نرمافزار ممکن است بخواهند عملکرد سیستم را بررسی کنند تا بفهمند در صورت افزایش ترافیک، چه اتفاقی در سیستم میافتد. در این حالت افزایش ترافیک یک نقطه آشوب در سیستم خواهد بود.
3. انجام آزمایش
در مرحله سوم، آزمایشهایی را برای سنجش عواقب انجام میدهیم. آزمایشها ممکن است خطای یک فرایند در شرایط بحرانی را نشان دهند یا یک رابطه علت و معلولی غیرمنتظره را شناسایی کنند. این آزمایشهای کنترلشده خطاهای سیستم در شرایط خاص را مشخص میکنند و به ما فرصت اصلاح آنها را میدهند. مثلا ممکن است شبیهسازی افزایش ترافیک سیستم به ما بگوید که عملکرد ذخیرهسازی اطلاعات دچار مشکل خواهد شد.
4. ارزیابی
برای درک اینکه سیستم در شرایط بحرانی چطور عمل میکند، باید در دسترس بودن و پایداری سیستم را اندازهگیری کنیم، پس نتایج آزمایش را بررسی و نقاط شکست را پیدا میکنیم تا تیم پشتیبانی بتواند آنها را برطرف کند. با این کار مطمئن میشویم سیستم ما در مواقع بحرانی هم عملکرد پایدار و صحیح دارد.
5. رفع مشکل
پس از اجرای آزمایشهای مهندسی آشوب ۲ نتیجه احتمالی وجود دارد؛ در حالت اول آزمایش تأیید میکند که سیستم شما در برابر شکست مقاوم است و در حالت دوم مشکلی را به شما نشان میدهد که باعث خرابی سیستم شده است. کارشناسان میگویند هر دو حالت برای شما مطلوباند. در حالت اول شما اعتماد بیشتری به سیستم خود و رفتار آن خواهید داشت و در حالت دوم قبل از اینکه مشکل جدی ایجاد شود، مشکل را شناسایی کردهاید و در این مرحله میتوانید آن را رفع کنید.
بهترین شیوه برای مهندسی آشوب
مهندسی آشوب فرایندی پیچیده است. برای جلوگیری از ایجاد مشکل بهتر است از شیوههای مطمئن استفاده کنید. ابتدا رفتار معمول سیستم را درک کنید. درک کامل سیستم در شرایط سالم و پایدار به شما کمک میکند مشکلات را بهتر تشخیص دهید. سپس سناریوهای احتمالی را شبیهسازی کنید؛ روی تزریق شکستها و اشکالات احتمالی تمرکز کنید. آشوبی در نقطه ضعف سیستم ایجاد کنید و عملکرد سیستم را بررسی کنید تا مشکلات را پیدا کنید.
مهندسی آشوب ممکن است بسیار مخرب باشد، بنابراین آزمایش خود را کنترلشده و دقیق طراحی کنید. با تیمهای فناوری اطلاعات، توسعهدهندگان و واحدهای دیگر سازمان هماهنگ باشید و مشکلات سیستم را با حداقل آسیب شناسایی کنید.
سخن آخر
امروزه سیستمهای توزیعشده و ریزسرویسها گسترش یافتهاند و سیستمهای وب را پیچیدهتر کردهاند. به همین دلیل پیشبینی خرابیهای سیستم دشوارتر از گذشته است. ما برای جلوگیری از ایجاد خطا در سیستم باید روشهای جدیدی داشته باشیم. مهندسی آشوب یکی از این روشهاست. در مهندسی آشوب، با ایجاد خطاهایی کنترلشده نقاط ضعف و اشکالات سیستم را شناسایی و مشکلات احتمالی را قبل از رخدادن حل میکنیم.
دیدگاه