التصحيح وإعادة الهيكلة المتقدمة
تحليل السبب الجذري مع الذكاء الاصطناعي
5 دقيقة للقراءة
ما وراء التصحيح البسيط
الأخطاء المعقدة غالبًا ما يكون لها أعراض بعيدة عن أسبابها. مساعدو الذكاء الاصطناعي يتفوقون في:
- ربط الأعراض عبر الملفات والأنظمة
- التعرف على الأنماط من أخطاء مشابهة
- تتبع مسارات التنفيذ بشكل منهجي
- اقتراح فرضيات للاختبار
عملية التصحيح بمساعدة الذكاء الاصطناعي
الخطوة 1: جمع الأعراض
claude "أرى مشكلة حيث الطلبات تفشل أحيانًا
بصمت. ساعدني في جمع المعلومات ذات الصلة:
1. سجلات الأخطاء الأخيرة
2. أقسام الكود ذات الصلة
3. حالة قاعدة البيانات أثناء الفشل
4. استجابات API الخارجية"
الذكاء الاصطناعي ينشئ قائمة تشخيصية:
## خطة جمع التشخيص
### سجلات الأخطاء (شغل هذه الأوامر)
```bash
grep -i "order" logs/app.log | grep -i "error" | tail -100
grep "OrderService" logs/app.log | grep -E "(WARN|ERROR)" | tail -50
الكود للمراجعة
- src/services/order.ts (إنشاء الطلب)
- src/services/payment.ts (معالجة الدفع)
- src/middleware/error.ts (معالجة الأخطاء)
استعلامات قاعدة البيانات
SELECT * FROM orders WHERE status = 'failed'
AND created_at > NOW() - INTERVAL '24 hours';
SELECT * FROM payment_intents WHERE order_id IN (
SELECT id FROM orders WHERE status = 'failed'
);
تسجيل استجابة API
تحقق إذا كانت استجابات Stripe webhook مسجلة في: logs/webhooks/stripe/*.log
### الخطوة 2: التعرف على الأنماط
```bash
claude "هذه سجلات الأخطاء من الطلبات الفاشلة.
حدد الأنماط:
- الطوابع الزمنية أو الفترات المشتركة
- سمات المستخدم المشتركة
- ارتباطات طريقة الدفع
- تشابه مسار الطلب"
الذكاء الاصطناعي يحدد الأنماط:
## تحليل الأنماط
### النمط الزمني
- 80% من حالات الفشل تحدث بين 2:00-4:00 صباحًا UTC
- يرتبط بتوقيت المهمة الدفعية الليلية
- ذروة معدل الفشل: 3:15 صباحًا (نافذة النسخ الاحتياطي لقاعدة البيانات)
### نمط المستخدم
- لا ارتباط مع نوع المستخدم أو الموقع
- يؤثر على العملاء الجدد والعائدين
### نمط الدفع
- 95% من حالات الفشل تتضمن بطاقات 3D Secure
- البنوك الأوروبية متأثرة بشكل غير متناسب
- BINs محددة: 4242**، 5555** (بطاقات الاختبار تعمل بشكل جيد)
### نمط الطلب
- جميع الطلبات الفاشلة لها وقت استجابة > 25 ثانية
- الطلبات العادية: متوسط 2.3 ثانية وقت استجابة
### الفرضية
مهلة 30 ثانية على تأكيد الدفع تتعارض
مع تدفق 3D Secure، الذي يمكن أن يستغرق 45+ ثانية لـ
البنوك الأوروبية، خاصة أثناء نافذة النسخ الاحتياطي عندما
تكون قاعدة البيانات تحت الحمل.
الخطوة 3: اختبار الفرضية
claude "فرضيتك حول مهلة 30 ثانية تبدو محتملة.
ساعدني في التحقق:
1. اعثر على مكان تعيين المهلة
2. تحقق إذا كان هناك منطق إعادة محاولة
3. ابحث عن مشاكل مشابهة في سجلنا
4. اقترح اختبار للتأكيد"
// الذكاء الاصطناعي يجد المذنب
// src/services/payment.ts:145
const paymentResult = await stripe.paymentIntents.confirm(
intentId,
{ timeout: 30000 } // مهلة 30 ثانية - قصيرة جدًا!
);
// لا يوجد منطق إعادة محاولة
// Commits ذات الصلة تُظهر أن هذا أُضيف لـ "الأداء"
// في commit abc123 في 2025-08-15
الخطوة 4: التحقق من الإصلاح
claude "لقد زدت المهلة إلى 60 ثانية وأضفت منطق
إعادة المحاولة. ساعدني:
1. اكتب اختبار يعيد إنتاج المشكلة الأصلية
2. تحقق أن الإصلاح يتعامل مع حالة الحافة
3. تحقق من أي آثار جانبية للتغيير"
سيناريوهات التصحيح الشائعة
اكتشاف حالة السباق
claude "المستخدمون يبلغون عن ظهور إدخالات مكررة عشوائيًا.
حلل هذا الكود لحالات السباق:
[الصق الكود]"
الذكاء الاصطناعي يحدد حالة السباق:
## وُجدت حالة سباق
الموقع: src/services/inventory.ts:78
```typescript
// المشكلة: حالة سباق تحقق-ثم-تصرف
async function reserveItem(itemId: string) {
const item = await db.items.findUnique({ where: { id: itemId }});
if (item.quantity > 0) { // التحقق
// ⚠️ طلب آخر يمكنه التعديل بين التحقق والتحديث
await db.items.update({ // التصرف
where: { id: itemId },
data: { quantity: item.quantity - 1 }
});
}
}
الإصلاح: استخدم عملية ذرية
async function reserveItem(itemId: string) {
const result = await db.items.updateMany({
where: {
id: itemId,
quantity: { gt: 0 } // تحقق وتحديث ذري
},
data: { quantity: { decrement: 1 } }
});
if (result.count === 0) {
throw new OutOfStockError(itemId);
}
}
### التحقيق في تسرب الذاكرة
```bash
claude "ذاكرة خادم Node.js تنمو مع الوقت.
حلل لقطات heap هذه وحدد التسرب."
## تحليل تسرب الذاكرة
### الكائنات المتنامية
1. مستمعي EventEmitter: +500 كل ساعة
2. اتصالات قاعدة البيانات المخزنة مؤقتًا: لا يتم تحريرها
3. كائنات سياق الطلب: محتجزة في closure
### السبب الجذري
src/middleware/context.ts:23
```typescript
const requestContexts = new Map(); // لا يتم تنظيفه أبدًا!
function createContext(req) {
const ctx = { user: req.user, timestamp: Date.now() };
requestContexts.set(req.id, ctx); // مُضاف
return ctx;
// مفقود: التنظيف بعد اكتمال الطلب
}
الإصلاح
function createContext(req, res) {
const ctx = { user: req.user, timestamp: Date.now() };
requestContexts.set(req.id, ctx);
// التنظيف عند انتهاء الطلب
res.on('finish', () => requestContexts.delete(req.id));
return ctx;
}
### تحليل الجمود
```bash
claude "عمليات قاعدة البيانات تتجمد بشكل متقطع.
تحقق من الجمود المحتمل في كود المعاملات لدينا."
بناء مجموعة أدوات التصحيح
إنشاء سكريبتات تشخيص قابلة لإعادة الاستخدام
claude "أنشئ سكريبت تشخيص يـ:
1. يتحقق من صحة الخدمة
2. يبلغ عن حالة مجمع اتصالات قاعدة البيانات
3. يُظهر معدلات الأخطاء الأخيرة
4. يحدد الاستعلامات البطيئة"
الذكاء الاصطناعي يولد scripts/diagnose.sh:
#!/bin/bash
echo "=== صحة الخدمة ==="
curl -s localhost:3000/health | jq .
echo "=== مجمع اتصالات DB ==="
psql $DATABASE_URL -c "SELECT * FROM pg_stat_activity
WHERE application_name = 'myapp';"
echo "=== معدل الأخطاء (الساعة الأخيرة) ==="
grep -c "ERROR" logs/app.log | awk '{print $1 " أخطاء/ساعة"}'
echo "=== الاستعلامات البطيئة (>1 ثانية) ==="
grep "duration:" logs/db.log | awk '$NF > 1000' | tail -10
أفضل الممارسات للتصحيح بمساعدة الذكاء الاصطناعي
- اجمع قبل الافتراض: اجمع البيانات أولاً
- شارك السياق الكامل: ضمّن السجلات، تتبع المكدس، خطوات إعادة الإنتاج
- اختبر الفرضيات بشكل منهجي: متغير واحد في كل مرة
- وثق النتائج: أنشئ post-mortems للأخطاء المعقدة
- ابنِ ذاكرة مؤسسية: احفظ أنماط التشخيص
الخطوات التالية
في الدرس التالي، سنغطي تقنيات تحسين الأداء باستخدام تحليل الذكاء الاصطناعي. :::