مهندسی هرج و مرج
1) اصول اساسی
حالت پایدار به عنوان فرضیه اصلی. به وضوح هنجار را تعریف کنید (به عنوان مثال: p95 <200 ms، نرخ خطا <0. 3٪، موفقیت جریان بحرانی> 99. 5%).
متغيرهاي جدا شده تغییر تا آنجا که ممکن است یک عامل در یک زمان به علت اثر لینک و بهبود.
درجه. ما با دامنه های کوچک در یک محیط امن شروع می کنیم و پوشش و شدت را گسترش می دهیم.
گاردریل ها شرایط توقف صریح در بودجه SLO/هشدار/خطا.
تکرارپذیری. آزمایش باید به طور قطعی قابل تکرار باشد (اسکریپت/مانیفست/IaC).
اخلاق و امنیت بدون اطلاعات شخصی واقعی و معاملات مالی در آزمایش های خطرناک.
2) «حالت پایدار» چیست ؟
حالت پایدار مجموعه ای از معیارهای قابل مشاهده است که ارزش کاربر و متغیرهای تجاری را توصیف می کند:- P50/P95/P99 تاخیر از نقاط پایانی کلیدی.
- نرخ موفقیت و تبدیل مسیر بحرانی.
- نرخ خطا، زمانبندی، درصد درخواستهای «shed» (کوتاه شده در اشباع).
- میزان خود بهبودی (MTTR)، مقاومت در برابر عقب نشینی (بدون طوفان).
- ناورداهای دامنه: فقدان «منفی در تعادل»، پرداخت های یک بار اجرا شده، سازگاری روزهای گزارش و غیره
3) کاتالوگ تزریق (آنچه ما شکستن)
شبکه: تاخیر، لرزش، از دست دادن/تکراری، محدودیت پهنای باند، TLS breaks، DNS flapping.
محاسبات: اضافه بار CPU، حافظه/فشار GC، خستگی توصیف کننده، انحراف ساعت.
ذخیره سازی: بالا P95 I/O، ENOSPC، رهبر/شکست ماکت، تقسیم مغز، طولانی fsync.
وابستگی: 5xx/429، «موفقیت آهسته»، تخریب API های خارجی، محدودیت نرخ.
داده ها: تکراری/از دست رفته از پیام ها، خارج از ترتیب، پرونده های کثیف، درگیری نسخه.
عملیات: انتشار ناموفق/پیکربندی، پرچم ویژگی با اشکال، گواهی منقضی شده، چرخش کلید.
افراد و فرآیندها: در دسترس نبودن افراد مسئول، تاخیر در به روز رسانی دستی، runbook نادرست.
4) طراحی آزمایش (قالب)
1. فرضیه: «در + 300 ms به سرویس ارز p99 از API اصلی <450 ms، یک شکن باز می شود، پاسخ دائمی ≤ 15 دقیقه پیش داده می شود».
2. تزریق: مشخصات شکست (نوع/دامنه/مدت زمان) و کانتور هدف.
3. برچسب های متریک/ورود به سیستم: marking 'chaos. experiment_id' 'phase = inject' recover 'را انتخاب کنید.
4. Guardrails: لغو در 'error _ rate> 2٪' یا p99> SLA × 2 برای بیش از 1 دقیقه.
5. نتایج/خروجی: لیستی از مشاهدات، اشکالات، بهبود، برنامه کاری و اجرای مجدد.
5) قابلیت مشاهده: آنچه اجباری است
ردیابی: درخواست مسیر از طریق وابستگی ؛ بخش هایی با تخریب مشخص شده اند.
معیارهای منابع: CPU, هیپ/GC, FD, دیسک IOPS/لات, پهنای باند شبکه, عمق صف.
معیارهای کسب و کار: تبدیل/موفقیت عملیات، سهم معاملات جبران شده.
سیاهههای مربوط به رویداد: باز کردن/بستن قطع کننده, retrays و بودجه خود را, تعویض رهبر پایگاه داده.
پانل آزمایش: داشبورد زنده با آستانه guardrails و سقط جنین «دکمه قرمز».
6) گارد محافظ و امنیت
فنی: محدودیت های بالای نرخ خطا/تاخیر، کاهش سهم عملیات موفق، رشد DLQ.
سازمانی: پنجره زمان، در تماس درگیر، اصل «یک منطقه - یک آزمایش».
داده ها/انطباق: فقط کیت های مصنوعی یا غیر شخصی ؛ ممنوعیت تست هایی که منجر به نقض قوانین می شوند.
برگشت: آماده برگشت/غیر فعال کردن روش پرچم/نرم ترافیک تخلیه.
7) الگوهای انعطاف پذیری که باید نشان دهند
بودجه اتمام وقت و عقب نشینی jitter (بدون طوفان).
قطع کننده مدار با بازیابی نیمه باز و نمایشی.
Bulkheads: انزوا از استخر بحرانی (پرداخت در مقابل تحلیلگر).
فشار پشتی و محدودیت نرخ: قطع اولویت پایین قابل پیش بینی.
کش با coalescing، حفاظت در برابر «طوفان گرم کردن».
Idempotence عوارض جانبی و sagas با اقدامات جبرانی.
Quorums، feilover، و ضد آنتروپی برای بازیابی اطلاعات.
8) سناریوهای نمونه (طرح)
8. 1 وابستگی آهسته (YAML)
yaml experiment: slow-downstream target: svc:api inject:
dependency:
name: currency mode: add_latency p95_ms: 300 duration: 10m guardrails:
error_rate: "< 1. 5%"
p99_latency: "< 450ms"
expectations:
breaker_open: true stale_data_served: "<= 15m"
8. 2 از دست دادن رهبر DB
تزریق: توقف رهبر/انتخاب مجدد اجباری.
انتظار: موقت نوشتن مهار، خواندن quorum، WAL/Outbox امن، خودکار بازگرداندن تکرار، بدون نوشتن دو.
8. 3 ENOSPC در دیسک ورودی
تزریق: دیسک را تا 95-100٪ پر کنید.
انتظار: چرخش اضطراری سیاهههای مربوط، ایمنی سیاهههای مربوط به بحرانی، غیر فعال کردن ویژگی های غیر بحرانی، هشدار و خودکار اصلاح.
8. 4 ترافیک پشت سر هم + سایه
تزریق: × 3 RPS به مدت 5 دقیقه در یک نقطه پایانی داغ.
انتظار: کاهش اولویت پایین، پایدار p95 «هسته»، بدون آبشار retray.
9) اتوماسیون در CI/CD
هرج و مرج دود در مرحله برای هر انتشار (تزریق کوتاه در دامنه امن).
شبانه اجرا می شود با توجه به کاتالوگ آزمایش (خدمات ماتریس × انواع شکست).
گیتس: انتشار مسدود شده است اگر «پایداری زیر آستانه است» (به عنوان مثال، درصد سقوط موفقیت آمیز <95٪).
مصنوعات: گزارش، مسیرهای پیاده روی، CPU/هیپ flameshraphs، عکس های فوری از معیارها و تنظیمات.
10) روزهای بازی (روزهای بازی)
تمرینات منظم تیم با سناریوهای «زنده»:- نقش ها: رهبر آزمایش، ناظر متریک، اپراتور عقبگرد، نماینده تجاری.
- سناریوها: تخریب حافظه پنهان، شکست جزئی AZ/region-feilover، «انتشار بد»، عدم دسترسی یک ارائه دهنده خارجی.
- نتایج: شکاف های موجود در کتاب اجرا، بهبود هشدارها، تعدیل SLO ها و بودجه های بازپرداخت.
11) هرج و مرج برای داده ها، رویدادها و ML
جریان داده ها: تست برای تکراری، شکاف، خارج از سفارش، تاخیر ؛ اعتبار سنجی مصرف کنندگان idemotent و استراتژی DLQ.
مخازن: شاخص تخریب، داغ پارتیشن، درگیری قفل، تکرار تحت تاخیر.
ML: تاخیر ویژگی، بازگشت به مدل پایه، کاهش کیفیت داده های ورودی (رانش) - سیستم باید «آرام آرام» و نه سقوط.
12) ضد الگوهای
هرج و مرج بدون مشاهده: شما «کور» هستید، نتیجه گیری ها نظری هستند.
تزریق بلافاصله در تولید بدون ریل مرحله و گارد.
«یک آزمایش بزرگ» در همه چیز در یک بار - مشخص نیست که دقیقا چه کار کرد.
اقدامات هرج و مرج اتفاقی بدون فرضیه و پس از رفع مجدد.
تمرکز تنها بر زیرساخت - کسب و کار ثابت فراموش شده است.
نادیده گرفتن افراد/فرایندها: هشدار، تماس، runbook - بخشی از سیستم.
13) بلوغ عمل (مدل)
1. Ad-hoc: تزریق تنها به صورت محلی.
2. هرج و مرج مرحله: کاتالوگ سناریوها، اجرای مکرر، داشبورد.
3. انتشار هرج و مرج: دود هرج و مرج در هر آزادی، دروازه، گزارش.
4. هرج و مرج مواد غذایی با محدودیت: ترافیک کم، گارد محافظ سخت، عقب نشینی آماده است.
5. ثبات مداوم: آزمایش خودکار، مدیریت SLO، بهبود به عنوان یک جریان کار.
14) ادغام با شیوه های معماری
تست مقاومت: آزمایش های هرج و مرج، تزریق گسل و سناریوهای تخریب را تکمیل می کنند.
تست بار: آزمایش ترکیبی بار + شکست نشان می دهد آبشار و طوفان از retraces.
سیاست به عنوان کد/RBAC/ABAC: گاردریل ها، مراحل برگشت و محدودیت ها به عنوان سیاست ها طراحی شده اند.
رضایت/مدیریت حریم خصوصی: اجازه نمی دهد آزمایش هایی که حالت پردازش داده ها را نقض می کنند.
Geo-architecture: هرج و مرج از شکست مناطق و اتصال داده ها به حوزه های قضایی.
15) دستور العمل های کوچک (شبه کد)
قطع کننده + تخریب
if breaker. open():
return serve_stale(cache. max_age=15m)
try:
res = call(dep, timeout=250ms)
return res except Timeout:
breaker. trip()
return serve_stale()
محدود کننده + سایه
if cpu. load() > 0. 85 or queue. depth() > HIGH:
if req. priority < HIGH: return 503_SHED limiter. acquire()
اثر جانبی بی نظیر
key = "payout:"+external_id if kv. exists(key): return kv. get(key)
res = side_effect()
kv. put(key, res, ttl=30d)
return res
16) چک لیست معمار
1. حالت ثابت و گاردریل تعریف شده ؟
2. آیا یک دایرکتوری اسکریپت (شبکه/CPU/ذخیره سازی/وابستگی ها/داده ها/عملیات) وجود دارد ؟
3. آیا مشاهدهپذیری منابع، دمهای تأخیر، ناورداهای تجاری را پوشش میدهد ؟
4. زمانبندی/عقب نشینی/قطع کننده/محدود کننده/bulkheads فعال و پارامتری ؟
5. کتاب اجرا آماده و «دکمه قرمز» ؟
6. آیا در صحنه و آزمایش های شبانه دود هرج و مرج وجود دارد ؟
7. آیا پنجره ها و نقش های «امن» برای روزهای بازی وجود دارد ؟
8. آزمایش تجدید پذیر هستند (IaC/اسکریپت)، نتایج versioned ؟
9. پیشرفت ها توسط وظایف ثابت می شوند، تست مجدد انجام می شود ؟
10. داده ها و خطوط لوله ML تحت پوشش، نه تنها HTTP ؟
نتیجه گیری
مهندسی هرج و مرج «حوادث پیش بینی نشده» را به سناریوهای قابل پیش بینی تبدیل می کند. فرضیه مقاومت، تزریق کنترل شده، گارد محافظ سفت و سخت، مشاهده پذیری غنی و نظم و انضباط مجدد ابزارهایی هستند که خطر انتشار را کاهش می دهند و اعتماد به سیستم عامل را افزایش می دهند. در نتیجه، تیم مرزهای سیستم را درک می کند، قادر است به زیبایی کاهش یابد و به سرعت خدمات را به کاربر بازگرداند، حتی در شرایط شکست.