مقدمه
شاید تابحال اصطلاحات نظامی نظیر "مانور جنگی" یا "خشم شب" به گوشتان خورده باشد. این اصطلاحات در واقع نمونه سازیهایی از شرایط جنگی است تا بتوان آمادگی نیروها، تجهیزات و تسلیحات و فرایندهای دفاعی و هجومی را برآورد کرد. از آنجا که نیروها و تجهیزات نظامی در زمان صلح کاربری چندانی ندارند ستادهای نظامی، مانورهایی زمانبندی شده را برگزار میکنند تا در زمان وقوع حملات احتمالی افراد دچار سردرگمی و غافلگیری نشوند. در دنیای کامپیوتر و سیستمهای نرم افزاری نیز همین شرایط حاکم است. همانطور که میدانید خطاها و قطعی ها قابل اغماض نیستند بنابراین اکوسیستمهای نرم افزاری نیز لازم است همواره آماده خشم شب باشند! افراد، ابزارها و فرایندها همواره باید آماده به حداقل رساندن اثرات خطاها و قطعیها باشند. بنابراین باید شرایطی را بوجود آورد تا هر از چندگاهی تمامی پتانسیلها و نقاط ضعف و قوت شناسایی شوند.
مهندسی آشوب[1]
این روزها ممکن است آنقدر چیزهای متضاد و پارادکس گونه ببینیم و بشنویم که دیگر از شنیدن واژه "مهندسی آشوب" چندان شگفت زده نشویم؛ اما باید گفت که مهندسی آشوب ترکیب جالب و مناسبی است. سوالی که مطرح میشود این است که آیا میتوان آشوب را مهندسی کرد؟ با توجه به اینکه ماهیت و اصالت آشوب بدون چارچوب، غیرقطعی و غیرخطی بودن است چگونه میتوان آشوبی مهندسی شده داشت؟!
این ترکیب اولین بار در شرکت نت فلیکس بکار گرفته شد[2]بدین صورت که بطور عمدی نقصی در یکی از مولفه های مشخص سیستم عملیاتی ایجاد میشود و اثرات آن و حالتهای قابل بازیابی را مورد سنجش و بررسی قرار میدهند. در واقع هدف اصلی مهندسی آشوب این است که قبل از آنکه خرابی و قطعی سراغ یک سیستم بیاید، پیش بینیها و تدابیر لازم جهت کاهش وقوع و به حداقل رساندن اثرات آن اتخاذ گردد.
همانطور که میدانید جلوگیری کامل از وقوع حوادث در محیطهای توزیع شده و در کل محیطهایی که مولفه های آن به یکدیگر وابسته هستند(نظیر معماریهای مایکروسرویس) تقریبا غیر ممکن است. هر چقدر در طراحی مولفه ها دقت لازم را بخرج دهید در نهایت ممکن است از یک مولفه شخص ثالث دچار خطا و قطعی شوید. با مراحلی که مهندسی آشوب پیشنهاد میکند اولا افراد قبل و حین خرابی آمادگیهای لازم را کسب میکنند و همچنین مهمترین مولفه های کیفیت سرویس -که [3]SLA و SLO [4]هستند- بطور کامل در بوته آزمایش قرار میگیرند.
مراحل اجرای مانورهای مهندسی آشوب
برای داشتن یک تجربه خوب از آشوب اثربخش لازم است 3 گام زیر به ترتیب اجرا شود:
گام نخست: آماده سازی
در مهندسی آشوب، تیمهای SRE[5] و تیمهای عملیات لازم است فعالیتهای زیر را انجام دهند:
گام دوم: تشکیل اتاق جنگ و برگزاری مانورهای تمرینی
یکی از فعالیتهایی که لازم است در مهندسی آشوب پیاده سازی کنید ایجاد یک محیط عملیاتی مضاعف و اضافی است -که ما آن را محیط ثانوی نامگذاری میکنیم- تا بتوانید تمامی مانورهای خرابی را در آن هدایت کنید. این محیط نه تنها باید از نظر پیکربندی زیرساخت همانند محیط عملیاتی واقعی باشد بلکه ویژگیهایی نظیر ترافیک ورودی و بارعملیاتی آن نیز باید مشابه باشد. برای آنکه مانورهای موفقی داشته باشید لازم است تا حد ممکن فرایندهای خود را بطور خودکار انجام دهید.
اهداف زیر باید در مانور آشوب محیط ثانوی محقق گردد:
گام سوم: مانور آشوب در محیط اصلی
در این مرحله باید با استفاده از ابزارهای خودکار سازی مانور آشوب را در محیط عملیاتی اصلی هدایت کنید. همواره در نظر داشته باشید که این اختلالها نباید از آستانه مجاز SLOتعدی کند و همواره باید مراقب SLA خود باشید.
در هنگام مانور موارد زیر را در نظر بگیرید:
نکات پایانی
در نهایت مهندسی آشوب وظیفه دارد پارامترهای کیفیت سرویسدهی را به چالش بکشد تا در نهایت سرویسی مطمئن و با کیفیت تحویل کاربران نهایی شود. همواره باید سعی کنید از نتایج آن برای بهبود SLI[6]ها و ROI[7]ها بهره برداری کنید.
[1] این واژه ترجمه عبارت Chaos engineering است.
[2] البته منظور از اولین بار در دنیای فناوری اطلاعات است چرا که پیشتر در علم ریاضیات شاخه ای تحت عنوان نظریه آشوب وجود دارد که به بررسی سیستمهای پیچیدهای میپردازد که در خروجی آنها با اعمال تغییرات کوچک (و ظاهراً قابل اغماض) تغییراتِ بزرگی حاصل میشود.
[3] Service Level Agreement
[4] Service Level Objectives
[5] Site Reliability Engineering
[6] Service Level Indicators
[7] Return Of Investments