Service Discovery
اكتشاف الخدمات Service Discovery
آلية تتيح لخدمة إيجاد عنوان خدمة أخرى تلقائياً في بيئة تتغير فيها العناوين باستمرار.
في بيئة حاويات ديناميكية، عناوين IP للخدمات تتغير مع كل نشر أو توسّع أو تعافٍ من عطل. Service Discovery يحل هذا عبر سجل مركزي (Registry) تُسجّل فيه كل نسخة خدمة عنوانها عند بدء التشغيل، وتُزيله عند التوقف.
هناك نمطان: Client-Side Discovery حيث يستعلم العميل السجل مباشرة ويختار نسخة، وServer-Side Discovery حيث يتولى Load Balancer أو Gateway الاستعلام نيابة عن العميل.
الصياغة
service.register(name, address, healthCheckUrl) service.discover(name) → [address1, address2, ...]
📄 مثال
// تسجيل عند بدء التشغيل
await registry.register({
name: 'order-service',
address: 'order-service-7f9d:3002',
healthCheck: '/health',
});
// اكتشاف من خدمة أخرى
const instances = await registry.discover('order-service');
const target = loadBalance(instances);أهم النقاط
| العنصر | الوظيفة |
|---|---|
| Client-Side Discovery | العميل يستعلم السجل ويختار نسخة بنفسه |
| Server-Side Discovery | وسيط (Load Balancer/Gateway) يتولى الاستعلام والتوجيه |
💡 نصائح عملية
- اربط التسجيل بفحص صحة دوري (Health Check) — نسخة معطوبة يجب أن تُزال من السجل تلقائياً
- في Kubernetes الاكتشاف مدمج عبر DNS للخدمات، فلا حاجة غالباً لأداة خارجية إضافية
⚠️ أخطاء شائعة
- تسجيل خدمة دون فحص صحة — يبقى عنوان معطوب في السجل فتفشل الاستدعاءات إليه
- الاعتماد على عناوين IP ثابتة مكتوبة يدوياً في بيئة حاويات ديناميكية
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار MICROSERVICES الكامل بالعربي.