تخطَّ إلى المحتوى

🏗️ شرح المايكروسيرفيس (Microservices)

أفضل ممارسات المايكروسيرفيس

الدرس 24 من 25· ⏱ 2 دقائق قراءة

1. حجم الخدمة المناسب

لا تجعل الخدمة صغيرة جداً (Nanoservices) ولا كبيرة جداً (Mini-monolith). المقياس: خدمة واحدة = مسؤولية عمل واحدة.

# ✅ جيد: خدمة للمدفوعات
payment-service:
  responsibility: معالجة المدفوعات والفوترة

# ❌ سيء: خدمات صغيرة جداً
validate-card-service:     # مجرد دالة
charge-service:            # مجرد استدعاء API
receipt-service:           # مجرد إرسال إيميل

2. استقلالية حقيقية

// ✅ كل خدمة لها قاعدة بياناتها الخاصة
const db = new Database(process.env.DATABASE_URL);

// ❌ لا تشارك قاعدة بيانات مع خدمة أخرى
const db = new Database('shared-database-url');

3. التوثيق المستمر

// ✅ توثيق مباشر في الكود
/**
 * @openapi
 * /users/{id}:
 *   get:
 *     summary: الحصول على مستخدم
 */
app.get('/users/:id', getUser);

4. المراقبة من اليوم الأول

// ✅ أضف مراقبة من البداية
const logger = pino({ level: 'info', name: 'user-service' });
const metrics = new MetricsRegistry();

app.get('/health', (req, res) => {
  res.json({
    status: 'healthy',
    uptime: process.uptime(),
    memory: process.memoryUsage(),
  });
});

5. إعدادات البيئة

// ✅ إعدادات واضحة مع قيم افتراضية
const config = {
  port: process.env.PORT || 3001,
  dbHost: process.env.DB_HOST || 'localhost',
  dbName: process.env.DB_NAME || 'users',
  logLevel: process.env.LOG_LEVEL || 'info',
  redisUrl: process.env.REDIS_URL || 'redis://localhost:6379',
};

6. التعامل مع الفشل

// ✅ دائماً جهز Fallback
async function getUser(id) {
  try {
    return await userService.getUser(id);
  } catch {
    logger.warn(`فشل جلب المستخدم ${id}، استخدام الكاش`);
    return await cache.get(`user:${id}`) || { id, name: 'غير معروف' };
  }
}

7. التحديثات بدون توقف

استراتيجيات النشر:
  Rolling Update:   تحديث تدريجي  Pod تلو الآخر
  Blue/Green:       بيئتان  واحدة نشطة وأخرى جاهزة
  Canary:           إصدار جديد لنسبة صغيرة من المستخدمين

8. تسمية الخدمات

# ✅ أسماء واضحة ومنطقية
user-service
course-service
payment-service
notification-service

# ❌ أسماء غامضة
core-service
utils-service
backend-service

9. API First

قبل كتابة الخدمة:
  1. صمم API (OpenAPI spec)
  2. ناقش العقود مع الفرق الأخرى
  3. طبق Contract Tests
  4. ابدأ التطوير

10. تجنب الـ Shared Libraries المشتركة

// ✅ نسخ الكود إذا كان صغيراً، أو افصل الخدمة
// ❌ مكتبة مشتركة تربط الخدمات

⚠️ المايكروسيرفيس قرار معماري — تأكد من أنها مناسبة لحجم مشروعك وفريقك

🎯 التالي: 24-summary

شرح أفضل ممارسات المايكروسيرفيس — المايكروسيرفيس (Microservices) بالعربي
أفضل ممارسات المايكروسيرفيسالمايكروسيرفيس (Microservices) بالعربي · The Code Fix

هل كان هذا الدرس مفيدًا؟