اختبار الحمل والإجهاد
1) المصطلحات والأهداف
اختبار التحميل - اختبار في نطاق العمل (الهدف RPS/المنافسة) ضد SLO (على سبيل المثال، p95 <200 mm، معدل الخطأ <0. 5%).
اختبار الإجهاد - تجاوز (قبل/أكثر من تشبع وحدة المعالجة المركزية/DB/الشبكة)، ومراقبة ميكانيكا التحلل والاسترداد.
اختبار سبايك - رشقات نارية حادة (× N لدقائق).
النقع/التحمل - المدى الطويل (ساعات/يوم) للعثور على التسريبات، وانجراف GC، والتجزئة، ونمو قائمة الانتظار.
اختبار السعة - حساب هضبة الإنتاجية (نقطة التشبع) والاحتياطيات.
الأهداف: تأكيد SLO، وإصلاح الهضبة، وفهم الاختناقات، ومعايرة القياس التلقائي والحدود.
2) نموذج المرور: مفتوح مقابل مغلق
النموذج المغلق (مدفوع بالتزامن): عدد ثابت من المستخدمين الافتراضيين (VUs)، كل بعد الإجابة يجعل وقت التفكير.
النموذج المفتوح (معدل الوصول): المعدل الثابت للطلبات، بغض النظر عن الردود.
قانون ليتل: 'L = λ W'
«L» هو متوسط عدد الطلبات التي يتم خدمتها في وقت واحد،
«λ» - شدة (RPS)،
«W» هو متوسط وقت الاستجابة.
ومن هنا جاء تقييم القدرة التنافسية اللازمة للمولد: '≈ target_RPS p95_latency' المتزامنة.
3) المقاييس: ما نقيسه
تأخير SLI: p50/p90/p95/p99 و p99 tail. 9; منفصلة عن المسارات «الساخنة» و «الباردة».
الأخطاء: «5xx»، «4xx» (صالح/غير صالح)، المهلة، تم إجهاضها.
الإنتاجية: RPS مستدامة، تيارات الإنتاجية/البايت.
الموارد: وحدة المعالجة المركزية، ذاكرة الوصول العشوائي/كومة، وقفات GC، القرص IOPS/lat، عرض النطاق الترددي للشبكة، عدد الوصلات/FD.
قوائم الانتظار و Backprescher: العمق، وقت الانتظار، عدد السقيفة/الطلبات المحدودة.
كفاءة ذاكرة التخزين المؤقت: ضرب/فشل، عواصف الإحماء.
DB/caches/الطوابير: p95 طلبات، أقفال، صراعات، استخدام مجمع.
4) المدرجات والبيانات
تكافؤ التكوين: إصدارات البرامج، حدود (uLimit، conntrack)، تهيئة JVM/GC، مجمعات.
الطوبولوجيا: LBs، CDN، WAF، TLS، نفس الشبكة «القفزات».
البيانات: التوزيعات الواقعية (أحجام الكائنات، المفاتيح «الساخنة «/» الباردة «، الإقليمية).
بداية باردة/دافئة/ساخنة: أشواط فردية ؛ تأكد من اختبار المخابئ «الباردة».
عزل الخلفية: تعطيل الوظائف/الكرونومات غير ذات الصلة أو حساب تأثيرها.
5) السيناريوهات (ملامح الحمل)
1. خط الأساس: تسارع الخطوة لاستهداف RPS، عقد 10-30 دقيقة.
2. Ramp & Hold: نمو سلس إلى X٪ أعلى من الهدف، والاحتفاظ → وتحليل الذيل.
3. سبايك: فوري × 2- × 5 رش لمدة 1-5 دقائق، ثم العودة.
4. الإجهاد إلى الفشل: خطوات إلى الفشل ؛ إصلاح نقطة فشل SLO الأولى ونقطة «كسر».
5. النقع: 6-24 ساعة مع تباين حركة المرور (ليلاً/نهارًا)، راقب الوجوه/الانجراف.
6. مختلط: مزيج من نقاط النهاية حسب التوزيع الحقيقي (Zipf/pareto)، أوزان مختلفة.
6) عملية خطوة بخطوة
حدد SLO وموجزات حركة المرور المستهدفة.
حدد نموذج التحميل (مفتوح/مغلق)، ضبط معدل الوصول أو VUs.
قم بإعداد البيانات والأوضاع «الساخنة «/» الباردة «.
قم بإعداد قياس عن بعد (مسارات/مقاييس/سجلات)، ارتباط مع تشغيل الاختبار.
الإحماء والتشغيل، وجمع القطع الأثرية (ملفات تعريف وحدة المعالجة المركزية/الأكوام، ورسوم اللهب، وشرح/السجل البطيء DB).
تحليل عنق الزجاجة، تشكيل بنود العمل.
Reprogon بعد الإصلاحات وتحديث خط الأساس وكتاب قواعد اللعبة.
7) الاختناقات والإصلاحات النموذجية
الخدمة المرتبطة بوحدة المعالجة المركزية: تحديد سمات الوظائف الساخنة → والمخصصات، والفروع ؛ تدفق، هيكل صديق للمخابئ.
الشبكة/TLS: البقاء على قيد الحياة، HTTP/2/3، تجميع الاتصال، المهلات الصحيحة، تقليل الدردشة.
DB: الفهارس، الدفعات، الاستفسارات المعدة، تجمع الاتصال، فصل R/W، تخزين النتائج، تفريغ الاستعلام.
المخابئ: الحجم، TTL، طلب الدمج، الحماية من العواصف، الاحترار، الكرات الإقليمية.
قوائم الانتظار/السماسرة: حدود القبول/التوازي، حجم الدفعات، المستهلكون الأغبياء، سقوف DLQ.
القمامة/فترات التوقف: ضبط GC، والإيجارات الاحتياطية، وتجميع الأشياء ضمن حدود معقولة.
I/O/disk: I/O غير متزامن، الضغط، ضغط الاستجابات بمستوى معقول.
8) الحدود والحماية
مهلة الميزانية: من الأعلى إلى الأسفل لتجنب السلاسل التعاقبية.
حد المعدل/دلاء الرموز: تدهور يمكن التنبؤ به بدلاً من «الموت الطويل».
قاطع الدائرة وتظليل التشبع منخفض الأولوية.
الضغط الخلفي: إشارات وتقييد التزامن في عمق السلسلة.
الحواجز: عزل البرك لنقاط النهاية الحرجة.
الخصوصية: مفاتيح التكرار الآمن تحت الرجوع.
9) الأدوات ومتى تختارها
k6 - مقتضب JS، دعم ممتاز لمعدل الوصول والتكامل والرسوم البيانية.
Gatling - Scala DSL، مولد عالي الأداء.
JMeter - نظام بيئي مرن وغني ؛ ملائمة للبروتوكولات/الملحقات.
الجراد - نصوص بايثون، مناسبة لمنطق تدفق المستخدم المعقد.
Vegeta/hey/wrk - microbenchies والنقطة تعمل على HTTP.
tc/netem، toxiproxy - حقن تحلل الشبكة.
Flamegraph/profiler - ابحث عن وحدة المعالجة المركزية/النقاط الساخنة.
10) أمثلة (رسومات)
k6 (نموذج مفتوح، مزج نقاط النهاية)
javascript import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'constant-arrival-rate',
rate: 800, timeUnit: '1s', duration: '20m',
preAllocatedVUs: 500, maxVUs: 2000
}
},
thresholds: {
'http_req_duration{kind:hot}': ['p(95)<200'],
'http_req_failed': ['rate<0. 005']
}
};
export default function () {
const r = Math. random();
let res;
if (r < 0. 6) {
res = http. get('https://svc/api/hot', { tags: { kind: 'hot' }});
} else if (r < 0. 9) {
res = http. get('https://svc/api/warm', { tags: { kind: 'warm' }});
} else {
res = http. post('https://svc/api/heavy', JSON. stringify({ n: 1000 }), { headers: { 'Content-Type': 'application/json' }});
}
check(res, { 'status is 2xx': (r) => r. status >= 200 && r. status < 300 });
sleep(0. 2);
}
جاتلينج (الخطوات والارتفاع)
scala setUp(
scn. inject(
rampUsersPerSec(50) to 500 during (10 minutes),
constantUsersPerSec(500) during (20 minutes),
spikeUsers(2000). during(30. seconds)
)
). protocols(http. baseUrl("https://svc"))
خطة التحميل (هيكل عظمي لـ YAML)
yaml profile: "mix-traffic"
targets:
- endpoint: GET /api/hot weight: 0. 6
- endpoint: GET /api/warm weight: 0. 3
- endpoint: POST /api/heavy weight: 0. 1 schedule:
- step: { rps: 300, hold: 10m }
- step: { rps: 600, hold: 10m }
- step: { rps: 900, hold: 10m }
guardrails:
slo:
p95_ms: 200 error_rate: 0. 5%
abort_if:
- metric: error_rate op: ">"
value: 2%
window: 2m
11) الأتمتة ودورة الحياة
Perf-smoke في كل علاقات عامة (المدى القصير لنقاط النهاية الرئيسية).
تعمل «السعة» الليلية على خشبة المسرح مع التقارير والتحف الشخصية.
البوابات في CI/CD: بناء الملف عند التراجع p95/p99> X٪ من نمو معدل الأساس أو الخطأ.
نسخ خطوط الأساس وتخزين الملامح/جرافات اللهب كقطع أثرية.
علامات الصلة: ما هي الخدمة/نقطة النهاية المغطاة، وما هو ملف المرور المستخدم.
12) الأنماط المضادة
المولد وخدمة الاختبار على نفس الجهاز → نتائج مشوهة.
النموذج المغلق فقط (VUs) لـ APIbacks → التخفيف وسوء التقدير.
يعمل على قاعدة بيانات/مخبأ فارغ دون بداية باردة.
لا توجد توزيعات واقعية (جميع الاستفسارات متشابهة).
لا يوجد قياس عن بعد (RPS/latency فقط على جانب المولد).
المقارنة بدون خطوط أساس ثابتة ومراقبة البيئة.
«التحسين» من خلال مهلة زائدة بدلاً من تصحيح السبب.
13) قائمة مرجعية للمهندس المعماري
1. SLO والحمل النموذجي/الذروة المحدد ؟
2. هل تم اختيار النموذج الصحيح (مفتوح/مغلق) ووصف ملف المرور ؟
3. الحامل مكافئ في التكوين والطوبولوجيا، هل هناك وضع بارد/ساخن ؟
4. تم تمكين القياس عن بعد والملفات الشخصية، ووضع علامة على جرح الاختبار ؟
5. يدير: خط الأساس/المنحدر/الارتفاع/الإجهاد/النقع - مغطى ؟
6. هل نقاط التشبع ثابتة وهامش الأمان مخطط ؟
7. حدود معدة، قواطع، حاجز خلفي، غباء، سياسات تظليل ؟
8. هل هناك بوابات CI لـ p95/p99 معدل الانحدار والخطأ، هل خطوط الأساس محفورة ؟
9. بعد الإصلاحات - تحديث طاقة reprogon و playbook ؟
10. تم توثيق التكبير التلقائي وخطة الطوارئ ؟
خامسا - الاستنتاج
اختبار الحمل والإجهاد ليسا «سباقات» لمرة واحدة، بل ممارسة هندسية مستمرة. نموذج حركة مرور واقعي، ومنصات صحيحة، وقياس عن بعد وأتمتة في CI/CD تحول الأداء من «السحر السري» إلى قدرة مدفوعة بالقياس: أنت تعرف مكان السقف الخاص بك، ومدى أمان المخزون وما هي التغييرات التي تحسن تجربة المستخدم حقًا.