GH GambleHub

اختبار الحمل والتوتر

اختبار الحمل والتوتر

1) لماذا تحتاجه

الأهداف:
  • تأكيد القدرة (عدد جلسات RPS/التنافسية التي سيصمدها النظام بالنظر إلى SLO).
  • البحث عن الاختناقات (وحدة المعالجة المركزية/IO/DB/الشبكات/الأقفال/المجمعات).
  • وضع ميزانيات للأداء وبوابات في CI/CD.
  • تقليل مخاطر الإطلاقات (p95/p99 الانحدار، ذروة نمو الخطأ).
  • قدرة/تكلفة الخطة (الحجم والاحتياطيات).

2) أنواع اختبارات perf

الحمل: حركة مرور واقعية قريبة من القمم ؛ التحقق من صحة SLO.
الإجهاد: النمو إلى الحد الأقصى لسلوك التدهور → حيث ينكسر.
الارتفاع: قفزة الحمل السريعة → المرونة/المقياس الذاتي.
النقع/القدرة على التحمل: تسربات → لساعات/يوم، تجزئة، انجراف لكمون.
القدرة/قابلية التوسع: كيف تتغير الإنتاجية/زمن الانتقال مع التخفيض ؛ Amdal/Gustafson law.
الدخان: «دخان» قصير يعمل على كل إصدار (كرامة الأداء).


3) نماذج توليد حركة المرور

وحدات VU/متزامنة ثابتة: مستخدمو «N»، كل منهم يقدم طلبات → قائمة انتظار العميل. خطر إخفاء الحمل الزائد.
معدل الوصول: تدفق التطبيقات بكثافة λ (req/s)، كما هو الحال في الحياة الواقعية. أكثر صحة لواجهات برمجة التطبيقات العامة.

قانون ليتل: «L = λ × W».
بالنسبة للمجمع/الخدمة، الحد الأدنى من التوازي ≈ 'λ × W' (أضف 20-50٪ من المخزون).
حيث «λ» هو الإنتاجية، «W» هو متوسط وقت الخدمة.


4) ملامح التحميل والسيناريوهات

مزيج رحلة المستخدم: مشاركات النصوص (تسجيل الدخول، التصفح، الإيداع، الخروج...).
وقت التفكير: توقف المستخدم مؤقتًا (التوزيعات: أسي/لوغنورمال).
موجز البيانات: حجم الردود والحمولة وتغير البارامترات.
الارتباط: خطوات الربط (ملفات تعريف الارتباط/الرموز/الهوية) كما هو الحال في التدفق الحقيقي.
مخبأ بارد/دافئ/ساخن: أشواط فردية.
اقرأ مقابل اكتب: رصيد القراءات/السجلات، الخصوصية لإعادة التدوير.
Multi-regions: RTT, distribution by POP/ASN.


5) بيئة الاختبار

العزل: الحامل قريب من المنتج في الطوبولوجيا/الإعدادات (ولكن لا «تغلب» على المنتج).
البيانات: إخفاء PII وأحجام ومؤشرات كما في المبيعات.
مولدات التحميل: لا تستقر على وحدة المعالجة المركزية/الشبكة ؛ العدائين الموزعين، تزامن الوقت.
إمكانية الرصد: المقاييس/المسارات/الجذوع، المواد التركيبية على المحيط، تصدير ملامح وحدة المعالجة المركزية/الكومة.


6) المقاييس و SLI

الإنتاجية: RPS/Transactions/sec

زمن الوصول: p50/p95/p99، TTFB، وقت الخادم مقابل الشبكة.
الأخطاء: حصة 5xx/4xx/أخطاء النطاق.
التشبع: وحدة المعالجة المركزية، load avg، GC، disk IOps/latency، network، pool wait.
Business SLI: نجاح الإيداع في 5s ≤، تأكيد طلب 2s ≤.

خذ العتبات من SLO (على سبيل المثال، "99. 95٪ ≤ 300 مللي ثانية")، مراقبة معدل الحروق أثناء الجري.


7) العثور على الاختناقات (تقنية)

1. قم بإحماء النظام باستمرار بنسبة 60-80٪ من الحمل المستهدف.
2. زيادة في الخطوات (منحدر) → إصلاح حيث p95/p99 ومعدل الخطأ ينمو.

3. تطابق p99 الارتفاعات إلى:
  • قوائم الانتظار في حمامات السباحة (DB/HTTP)،
  • نمو WAIT/الأقفال (DB)،
  • توقف GC/كومة،
  • إعادة إرسال الشبكة/فقدان الحزم،
  • يخطئ زمن وصول القرص/ذاكرة التخزين المؤقت.
  • 4. تحديد الموقع: بحث ثنائي حسب مسار الاستعلام، محددات (CPU/alloc/lock-profile).
  • 5. أصلح «الزجاجة» → الضبط → تكرار الجري.

8) السلوك تحت الضغط

التدهور الرشيق: الحدود، قواطع الدوائر، قوائم انتظار الضغط الخلفي، مقبولة للمعالجة.
الردود: الحد الأقصى 1، الخصوصية فقط ؛ الجتر ؛ ميزانية إعادة الدرج ≤ 10٪ من RPS.
فشل مفتوح/فشل مغلق: بالنسبة للتبعيات غير الحرجة، السماح بالفشل (ذاكرة التخزين المؤقت/البقع).
الفشل المتتالي: عزل البرك/الحصص (الحاجز)، المهلات السريعة، التعطيل «السلس» للوظائف (أعلام الميزات).


9) الأدوات (اختيار المهمة)

k6 (JavaScript، مفتوح/مفتوح الطراز، سريع، مناسب في CI).
JMeter (غني بالنظام البيئي، GUI/CLI، الملحقات، ولكن أثقل).
جاتلينج (سكالا DSL، أداء عالٍ).
الجراد (بايثون، مرونة الكتابة).
Vegeta/hey/wrk (مقاعد صغيرة وفحص سريع).

القاعدة: أداة «رئيسية» واحدة + CLI خفيفة لقلم دخان في العلاقات العامة.


10) أمثلة (مقتطفات)

10. 1 k6 (نموذج مفتوح بمعدل وصول)

js import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' },  // до 500 rps
{ target: 800, duration: '5m' },  // стресс
{ target: 0,  duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0.005'],
},
};

export default function () {
const res = http.get(`${__ENV.BASE_URL}/api/catalog?limit=20`);
sleep(Math.random() 2); // think-time
}

10. 2 JMeter (فكرة الملف الشخصي)

Thread Group + Stepping Thread или Concurrency Thread (مفتوح).
طلب HTTP التخلف عن السداد، مدير ملفات تعريف الارتباط، مجموعة بيانات CSV.
Backend Listener → FloxDB/Grafana ؛ التأكيدات حسب الوقت/الرمز.

10. 3 الجراد (بايثون)

python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0.2, 2.0)
@task(5)
def browse(self): self.client.get("/api/catalog?limit=20")
@task(1)
def buy(self): self.client.post("/api/checkout", json={"sku":"A1","qty":1})

11) البيانات والارتباط والتحضير

بيانات البذور: الأدلة والمستخدمون والأرصدة والرموز - كما هو الحال في المبيعات.
وإخفاء المؤشر/إخفاء الهوية ؛ توليد المواد الاصطناعية فوق التوزيعات الحقيقية.
الارتباط: استخراج معرفات/رموز من الردود (RegExp/JSONPath) واستخدامها في الخطوات اللاحقة.


12) إمكانية الملاحظة أثناء الجري

لوحات القيادة الحمراء (المعدل والأخطاء والمدة) على طول الطرق.
النماذج - الانتقال من المقاييس إلى الآثار (trace_id).
سجلات الأخطاء: أخذ العينات + التجميع، التكرار/الخمول.
النظام: وحدة المعالجة المركزية/GC/كومة، أقراص/شبكة، انتظار تجمع.
DB: أفضل الاستفسارات، الأقفال، فحوصات الفهرس، الانتفاخ.


13) التشغيل الآلي وبوابات الأداء

CI: فترات قصيرة عند الدمج (على سبيل المثال k6 2-3 دقائق) مع عتبات.
ليلاً/أسبوعياً: نقع/إجهاد طويل في وسط منفصل ؛ التقارير والاتجاهات.
Canary releases: analysis of SLO (error-rate, p95) as the «gate» of the promotion.
الانحدارات: خط الأساس مقابل البناء الحالي ؛ تنبيه عند التدهور> X٪.


14) تخطيط القدرات والتكلفة

المنحنيات throughput→latency: حدد نقطة الركبة - بعد أن تنمو p99 بشكل حاد.
المقياس: قياس كفاءة القياس (RPS delta/node delta).
التكلفة: «RPS لكل دولار/ساعة»، احتياطي لأحداث الذروة + احتياطي DR.


15) الأنماط المضادة

اضرب في الحث دون تحكم أو اختبار في بيئة «فارغة»، وليس مثل الحث.
نموذج مغلق مع وحدات VU ثابتة تخفي الحمل الزائد.
قلة وقت التفكير/البيانات → ضربات ذاكرة التخزين المؤقت غير الواقعية، أو العكس - عاصفة إلى المصدر.
خط واحد «/ping «بدلاً من التدفق المخصص.
عدم إمكانية الملاحظة: «نرى فقط RPS ومتوسط التأخير».
إعادة التدوير غير المنضبط → DDoS ذاتي.
مزج الاختبار والتحسينات دون إصلاح الفرضيات/التغييرات.


16) قائمة مرجعية (0-30 يومًا)

0-7 أيام

حدد SLI/SLO وموجزات حركة المرور المستهدفة (مزيج، وقت التفكير، البيانات).
اختر الأداة (k6/JMeter/Locust)، ارفع لوحات القيادة RED.
قم بإعداد بيانات الحامل والبذور، وتعطيل حدود الطرف الثالث/الكابتشاس.

8-20 يومًا

سيناريوهات البناء: نموذج مفتوح (معدل الوصول)، مخبأ بارد/دافئ/ساخن.
تشغيل الحمل → الإجهاد → الارتفاع ؛ إصلاح نقطة الركبة والاختناقات.
تنفيذ بوابات الأداء في CI (تشغيل صغير).

21-30 يومًا

اختبار النقع 4-24 ساعة: تسربات GC/الانجراف، الاستقرار.
حدود الوثائق، خطة القدرات، الرسوم التوضيحية «RPS→p95/oshibki».
أعد كتيب «كيفية زيادة الحدود/المقياس» و «كيفية التحلل».


17) مقاييس النضج

هناك ملفات تعريف واقعية (مزيج، وقت التفكير، بيانات) تغطي ≥ 80٪ من حركة المرور.
لوحات القيادة الحمراء + التتبع متصلة لجميع الاختبارات.
بوابات الأداء تمنع الإصدارات عند التراجع p95/الأخطاء.
يتم توثيق السعة ونقطة الركبة من قبل الخدمات الرئيسية.
عمليات النقع/الإجهاد الشهرية والتقارير المرحلية.
يتم تأكيد مقاومة «الارتفاع» من خلال المقياس التلقائي وغياب التتابع.


18)

اختبار الأحمال هو ممارسة هندسية منتظمة، وليس قياسًا لمرة واحدة. "نموذج المستخدمين الحقيقيين (الطراز المفتوح)، وقياس ما يعكس تجربة العميل (SLI/SLO)، والحفاظ على إمكانية الملاحظة والبوابات في CI/CD، وإجراء عمليات الإجهاد/الارتفاع/النقع وإصلاح نقطة الركبة. ثم تتحول أحداث الذروة والبجع الأسود إلى سيناريوهات يمكن التحكم فيها، ويتحول الأداء إلى معلمة يمكن التنبؤ بها وقابلية للقياس لمنصتك.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.