تست بار و پروفایل استرس
خلاصه ای کوتاه
تست بار تست سیستم عملکرد و انعطاف پذیری در سناریوهای واقع بینانه و شدید است. اساس موفقیت: مدل ترافیک صحیح (باز در مقابل بسته)، SLO ثابت، متریک خالص (تاخیر/توان/خطاها/اشباع)، داده های نماینده، اتوماسیون و تکرارپذیری. نتیجه یک «رقم RPS» نیست، بلکه یک راه حل است: تنگناها کجا هستند، هزینه عملکرد چقدر است، آستانه شکست کجاست و چگونه می توان آن را حرکت داد.
SLO/SLI و معیارهای هدف
SLO (مثال): p95 API ≤ 250 میلی ثانیه، p99 ≤ 600 میلی ثانیه ؛ خطا ≤ 0 3 %/30 روز
SLI: تاخیر (p50/p95/p99)، توان (RPS/CPS/QPS)، اشباع (CPU/heap/GC/FD/conn)، ошибки (5xx، زمان)، очереди (عمق/تاخیر)، DB (قفل، پرس و جو آهسته)، кэш (نسبت ضربه).
خطا و اشباع باعث می شود (به عنوان مثال، CPU> 75٪ یا عمق صف> X → تخریب).
انواع تست ها
1. پایه/معیار - تک سرویس/نقطه پایانی، شرایط «ایده آل».
2. بار - واقع بینانه «روز کاری» + رمپ بالا/رمپ پایین.
3. استرس - افزایش بار به تخریب و تثبیت نقطه انفصال.
4. اسپایک - پرش تیز (x2-x10 در ثانیه/دقیقه).
5. خیس خوردن/استقامت - دراز مدت (8-72 ساعت): نشت حافظه، رانش تاخیر.
6. ظرفیت - بار گام برای منحنی عملکرد و برنامه ریزی ظرفیت.
7. تخریب/هرج و مرج مخلوط - بار + شکست جزئی (پایگاه داده آهسته، افت حافظه پنهان، «سقوط» applink).
مدل های ترافیک: باز در مقابل بسته
مدل باز (واقعی تر برای اینترنت): کاربران با شدت λ (جریان پواسون مانند) می آیند. اگر سیستم کند شود، درخواست ها انباشته می شوند، نه «یخ زده».
مدل بسته - تعداد ثابت کاربران مجازی (VUs) با زمان فکر کردن. هنگامی که تاخیر افزایش می یابد، RPS مصنوعی می افتد - با دقت با نتیجه گیری.
توصیه: برای API های جلویی استفاده از مدل باز (k6 'arrival-rate')، برای اسکریپت های همزمان داخلی - ترکیب با بسته.
پروفایل های بار (قالب ها)
«روز عادی»: پس زمینه پایه + نوسانات روزانه.
«رویداد اوج»: 10-30 دقیقه قبل از شروع (گرم کردن)، سنبله تیز در شروع، فلات، دم.
«مسابقات/جریان»: پله های نردبان، قله های تکراری در فواصل.
«تخریب زیرساخت»: نیمی از حافظه پنهان خالی است، یک منطقه خاموش است، تاخیر PSP افزایش می یابد.
«Failover»: جریان ترافیک به حفاظت در 1-5 دقیقه ؛ چک کردن مقیاس خودکار/HPA/سعی کنید طوفان.
داده های محیط زیست و آماده سازی
داده های تست: کاردینالیتی واقع بینانه (ارائه دهندگان، ارزها، کشورها)، زمینه های کثیف، توزیع پرس و جو (Pareto/Zipf).
اسرار/PII: ناشناس ؛ کلید/PSP - ماسهبازی.
محیط: غرفه اختصاصی perf، انزوا از ادغام (ساختگی/چاقو)، نسخه های ثابت.
قابلیت مشاهده: معیارها (Prometheus)، سیاهههای مربوط (Loki/ELK)، ردیابی (OTel). ایجاد شناسه در پاسخ ها.
ضد طوفان Retrays و Idempotence
Retrai فقط برای عملیات idempotent ؛ تنظیم مجدد بودجه (به عنوان مثال ≤ 10٪ از ترافیک).
عقب نشینی نمایشی + لرزش ؛ «سقوط» GETs یکسان.
برای پرداخت - کلید idemotent و statuses صریح.
حفاظت در برابر گله رعد و برق: قفل کش، SWR، سمافور محلی.
ابزارها و الگوها
K6 (اسکریپت، مدل باز، گزارش خوب)، Locust (اسکریپت های پایتون)، Gatling (Scala)، JMeter (طیف گسترده ای از پروتکل ها).
پروتکل ها: HTTP/1 1/2/3, gRPC, WebSocket, TCP/UDP; فشار سرور تست نمی کند «به عنوان GET».
تولید ترافیک: مقیاس افقی ژنراتورها، کنترل تنگنای شبکه.
حذف پروفیل: pprof/async-profiler/ebpf تحت بار، مسیرهای OTel.
javascript import http from 'k6/http';
import {check, sleep} from 'k6';
export const options = {
scenarios: {
warmup: { executor: 'ramping-arrival-rate', startRate: 50, timeUnit: '1s',
preAllocatedVUs: 200, stages: [ { target: 200, duration: '5m' } ] },
spike: { executor: 'constant-arrival-rate', rate: 1200, timeUnit: '1s',
preAllocatedVUs: 2000, startTime: '6m', duration: '3m' }
},
thresholds: {
http_req_failed: ['rate<0. 3%'],
http_req_duration: ['p(95)<250', 'p(99)<600']
}
};
export default function () {
const res = http. get(`${__ENV. BASE_URL}/api/v1/catalog? c=${Math. floor(Math. random()1000)}`);
check(res, { 'status is 200': (r) => r. status === 200 });
sleep(Math. random()0. 9) ;//think time (for closed parts of the script)
}
روش
1. فرضیه → که تنگناها به احتمال زیاد (CPU، DB، کش، شبکه، TLS، GC).
2. مشخصات → سناریوها/مسیرها، سهام ترافیک، مدل ها (باز/بسته)، داده ها.
3. گرم کردن → کش/اتصالات/TLS/مفسران.
4. افزایش مرحله → به شدت هدف.
5. Plateau → مجموعه ای از معیارهای پایدار و ردیابی.
6. استرس/کاهش → پیدا کردن یک نقطه شکست، رعایت مقیاس خودکار.
7. Analyze → معیارهای همبستگی، فلامگراف، گزارش و برنامه تغییر.
8. Repruf → تکرار از طریق خط لوله CI (منطقه Perf).
تجزیه و تحلیل نتایج
بار → منحنی تاخیر/خطا: به دنبال آرنج (ظرفیت).
زمان تاخیر شکست: شبکه (DNS/TLS/connect)، پروکسی، برنامه، پایگاه داده، تماس های خارجی.
اشباع: CPU> 75-85٪، GC مکث> p95، I/O انتظار، صف کار.
انعطاف پذیری: زمان واکنش خودکار (HPA/KEDA)، شروع سرد، گرم کردن کش.
هزینه: $/1000 RPS در SLO هدف، پیش بینی بودجه اوج.
روش های مهندسی
شاخص های تخریب: p99 «دم»، رشد صف، افت نسبت ضربه، رشد تلاش های بازپرداخت.
حذف confounder ها: محدودیت های توصیف فایل، sysctl، conn-pool، 'reuseport'، زنجیره های TLS، OCSP.
DB: شاخص/برنامه/حافظه پنهان پرس و جو، استخر اتصال، عملیات دسته ای، فشار پشتی در تولید کنندگان.
Caches: اندازه/سیاست اخراج، کلید های داغ، تکرار.
شبکه/لبه: HTTP/2/3، resumption≥70٪، Brotli، کلید حافظه پنهان CDN، لایه لایه.
قابلیت مشاهده تحت بار
معیارها: سیستم (CPU/mem/IO)، زمان اجرا (GC/heap)، شبکه (RTT/loss/ECN)، L7 (p95/99، 5xx/429)، صف ها، خوشه های پایگاه داده/حافظه پنهان.
مسیرهای پیاده روی: شامل نمونه برداری بر روی «دم» (مبتنی بر دم)، build-id/canary marks.
سیاهههای مربوط: جمع آوری خطاها با محدودیت حجم (به عنوان «forDOSor» log-pipeline).
آزمایشات: پرچم های ویژگی و پیکربندی ها باید در گزارش ثبت شوند.
اتوماسیون و CI/CD
مشاغل Perf در CI (دود 3-5 دقیقه، شبانه 30-60 دقیقه، خیس خوردن هفتگی).
محدودیت تحمل: تاخیر/خطا/منابع → «شکستن ساخت» در رگرسیون.
مصنوعات: نمودارها، شعله ها، پروفایل ها، گزارش های JSON (k6/jtl).
نسخه از داده ها و اسکریپت, PR-بررسی از اسکریپت PERF.
iGaming/fintech خاص
مسابقات/مسابقات: اسپایک + فلات ؛ TLS/DNS/CDN گرم شدن، افزایش محدودیت استخر، مسیرهای خاکستری برای رباتها.
پرداخت/PSP: محدودیت ماسهبازی، idempointency، timeouts سخت ؛ چک کردن کاهش حالت (کش دایرکتوری, صف).
جکپات/حوادث: اتمی و ثبات، بدون طول می کشد، بار در RNGs/تابلوهای.
ضد تقلب/AML: بار در قوانین/ML به ثمر رساند، فشار پشتی، deduplication رویداد.
تنظیم مقررات: ورود به سیستم معیارها و نسخه ها در قله، گزارش برای ممیزی.
چک لیست راه اندازی
- ثابت SLO/SLI و خطوط قرمز (خطا/تاخیر/اشباع).
- سناریوهای بار و پروفایل ها تایید شده اند (باز/بسته، سنبله/خیس/استرس).
- داده های واقع گرایانه، PII ماسک، ادغام sandbox/ساختگی.
- قابلیت مشاهده آماده: متریک/مسیرهای پیاده روی/سیاهههای مربوط، برچسب انتشار.
- پیکربندی سیستم (ulimit/sysctl/pools) مستند شده است.
- مقیاس خودکار/کش برنامه گرم کردن و بازگشت معیارهای.
- هشدار آستانه و برنامه در تماس.
- قالب گزارش (نمودار، نتیجه گیری، اقدامات) آماده شده است.
خطاهای رایج
آزمون مدل بسته یک نتیجه «سبز» تولید می کند و محصول افت می کند (شما نمی توانید مدل باز را نادیده بگیرید).
داده های غیر نماینده (یک ارز/یک ارائه دهنده) → نتیجه گیری نادرست
آماده سازی صفر: کش های سرد/TLS/اتصالات → تاخیر بیش از حد در ابتدا.
Retrai بدون محدودیت → طوفان و آبشار می افتد.
همان پروفایل برای همه خدمات → پرش واقعی «نقاط داغ».
عدم وجود خیس شدن → نشت حافظه و رانش قابل مشاهده نیست.
نتایج مات: هیچ اثری/flamegraphs → قادر به قرار دادن تنگنا.
کتاب های مینی
تعریف نقطه انفصال
1. مراحل 10-20٪ بار هر 5-10 دقیقه. 2) لحظه ای را که p95 به شدت افزایش می یابد و خطاها> SLO را برطرف کنید. 3) پروفایل های CPU/DB/cache را حذف کنید. 4) برنامه بهینه سازی و تکرار.
مهار در طوفان retray
1. بودجه تلاش مجدد را محدود کرده و backoff + jitter را فعال کنید. 2) درخواست سقوط/SWR را وارد کنید. 3) اجازه «حالت تنزل» (قابلیت محدود). 4) idempotency دوبار بررسی کنید.
رویداد اوج (مسابقات) - پیش برنامه
1. گرم کردن CDN/DNS/TLS/استخر. 2) افزایش HPA هدف، آماده رزرو. 3) محدودیت نرخ جداگانه برای رباتها. 4) داشبورد پیک حالت، پل ارتباطی بر روی تماس.
خیس کردن شب
1. 8-12 ساعت بار پایدار. 2) نظارت بر پشته/FD/conn/GC-مکث. 3) دلتا p95 و نسبت ضربه را بررسی کنید. 4) رفع نشت و رانش.
نتیجه گیری
تست بار یک فرایند تصمیم گیری مهندسی است، نه یک مسابقه برای RPS. پروفایل های واقعی (به ویژه مدل باز) را مدل کنید، SLO ها را ضبط کنید، معیارها و ردیابی ها را انجام دهید، زانوی عملکرد را جستجو کنید و هزینه عملکرد را حساب کنید. خودکار اجرا می شود، عقب نشینی های ضد طوفان را حفظ می کند و رویدادهای پیک را برنامه ریزی می کند - به این ترتیب پلت فرم در لحظات استرس زا قابل پیش بینی و پایدار خواهد بود.