انتقل إلى المحتوى الرئيسي

OmniNRF

تقوم OmniNRF بتنفيذ وظيفة مستودع الشبكة (NRF) للنواة 5G. الـ NRF هو السجل المركزي ودليل الخدمات للمعمارية المعتمدة على الخدمة (SBA): كل وظيفة شبكة أخرى (NF) تسجل ملفها الشخصي مع الـ NRF عند بدء التشغيل، وتحافظ على تلك التسجيلات حية مع نبضات قلب دورية، وتستعلم الـ NRF لاكتشاف نقاط النهاية للـ NFs التي تحتاج للتواصل معها.

تقدم OmniNRF خدمتين SBI. Nnrf_NFManagement (nnrf-nfm/v1) تتعامل مع تسجيل ملف NF، التحديث، نبض القلب، إلغاء التسجيل، الاسترجاع، ��اشتراكات/إشعارات تغيير حالة NF. Nnrf_NFDiscovery (nnrf-disc/v1) تتعامل مع تحديد مثيلات NF المستهدفة حسب النوع، الخدمة، S-NSSAI، DNN، وPLMN. يتم الاحتفاظ بجميع ملفات NF والاشتراكات في تخزينات في الذاكرة (ETS)؛ لا يوجد قاعدة بيانات خارجية، لذا يتم إعادة بناء السجل مع إعادة تسجيل الـ NFs بعد إعادة تشغيل الـ NRF. يقوم مسح في الخلفية بتقادم مثيلات NF التي توقفت عن إرسال نبضات القلب، لذا فإن السجل يعلن فقط عن الـ NFs التي هي حية بشكل واضح.

الوثائق

  • دليل العمليات - دور 3GPP، نقاط نهاية SBI، وإجراءات التسجيل، الاكتشاف، والاشتراك الرئيسية مع مخططات تسلسل.
  • مرجع التكوين - مرجع كامل لتكوين وقت التشغيل، جداول المعلمات، واجهة برمجة التطبيقات للإدارة/OAM، والتسجيل.
  • المقاييس - مقاييس Prometheus للتسجيلات، الاكتشاف، نبضات القلب، وصحة BEAM VM، مع مثال على PromQL.
  • استكشاف الأخطاء - مشكلات شائعة وحلولها.

نظرة عامة على المعمارية

يقع NRF في مركز SBA. يقوم المنتجون (UDM، AUSF، PCF، ...) بالتسجيل حتى يمكن العثور عليهم؛ بينما يكتشف المستهلكون (AMF، SMF، NSSF، ...) هؤلاء. يمكن أن تكون أي NF كلاهما، وجميعهم يرسلون نبضات القلب.

نظرة عامة على الميزات

  • Nnrf_NFManagement: التسجيل (PUT)، نبض القلب وتحديث JSON-Patch (PATCH، RFC 6902 مع مسارات JSON-Pointer متداخلة)، إلغاء التسجيل (DELETE)، استرجاع فردي وقائمة (GET). يتم إرجاع قائمة مثيلات NF كـ 3gppHal+json UriList مع تصفية nf-type وlimit/page-number/page-size للصفحات.
  • Nnrf_NFDiscovery: التصفية حسب نوع NF، أسماء الخدمات، PLMN، S-NSSAI، وDNN؛ ترتيب النتائج حسب الأولوية/السعة/الحمولة؛ ترقيم الصفحات باستخدام offset/limit مع رأس Link: rel="next".
  • تقادم نبض القلب: يقوم المسح المستمر في الخلفية بإنهاء NFs الصامتة لأكثر من heartbeat_timeout ويقوم بإخطار المشتركين.
  • اشتراكات الحالة: تصفية subscrCond.nfType، إشعارات NF_REGISTERED تحمل الـ nfProfile الكامل، انتهاء تلقائي بناءً على validityTime اختياري.
  • تحكم في التزامن: ETag على استجابات ��ثيلات NF؛ شرط If-Match على PUT/PATCH (412 في حالة عدم المطابقة).
  • فرض نوع المحتوى: يجب أن تكون أجسام PATCH application/json-patch+json (415 خلاف ذلك)؛ يتم التسامح مع عدم وجود Content-Type لعملاء نبض القلب البسيطين.
  • تسجيل JSON منظم مع بيانات التعريف لكل طلب (معرف مثيل NF، إجراء).
  • مقاييس Prometheus للتسجيلات، الاكتشاف، نبضات القلب، وصحة BEAM VM.

البدء السريع

تقرأ OmniNRF تكوين مشغلها من config/runtime.exs، الذي يربط المتغيرات البيئية ببيئة تطبيق :omninrf.

import Config

config :omninrf,
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.1"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70"),
heartbeat_timeout: String.to_integer(System.get_env("HEARTBEAT_TIMEOUT", "30000")),
prometheus_metrics_port: String.to_integer(System.get_env("PROMETHEUS_PORT", "9568"))

config :logger, :default_formatter,
format: {OmniLogger.JsonFormatter, :format},
metadata: :all

SBI_ADDR الافتراضي هو 127.0.0.1 (حلقة العودة). في أي نشر متعدد المضيفين أو حاويات، يجب تجاوز ذلك إلى عنوان يمكن للـ NFs الأخرى الوصول إليه، وإلا فلن تتمكن أي NF من التسجيل أو الاكتشاف.

يعيش مرجع المعلمات الكامل، بما في ذلك كل متغير بيئي والافتراضي، في مرجع التكوين.