跳到主要内容

OmniNRF

OmniNRF 实现了 网络库功能 (NRF) 的 5G 核心。NRF 是基于服务架构 (SBA) 的中央注册表和服务目录:每个网络功能 (NF) 在启动时将其配置文件注册到 NRF,定期发送心跳以保持该注册,查询 NRF 以发现它需要通信的 NF 的端点。

OmniNRF 暴露了两个 SBI 服务。 Nnrf_NFManagement (nnrf-nfm/v1) 处理 NF 配置文件的注册、更新、心跳、注销、检索和 NF 状态变化的订阅/通知。 Nnrf_NFDiscovery (nnrf-disc/v1) 处理按类型、服务、S-NSSAI、DNN 和 PLMN 解析目标 NF 实例。所有 NF 配置文件和订阅都保存在内存 (ETS) 存储中;没有外部数据库,因此在 NRF 重启后,注册表会在 NF 重新注册时重建。后台清理会持续清除停止发送心跳的 NF 实例,因��注册表只会宣传那些明显存活的 NF。

文档

  • 操作指南 - 3GPP 角色、SBI 端点,以及关键的注册、发现和订阅程序及其序列图。
  • 配置参考 - 完整的运行时配置参考、参数表、管理/OAM API 和日志记录。
  • 指标 - 用于注册、发现、心跳和 BEAM VM 健康的 Prometheus 指标,以及示例 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 过滤;按优先级/容量/负载排序结果;带有 Link: rel="next" 头的 offset/limit 分页。
  • 心跳老化:持续的后台清理会过期静默超过 heartbeat_timeout 的 NF,并通知订阅者。
  • 状态订阅subscrCond.nfType 过滤,NF_REGISTERED 通知携带完整的 nfProfile,可选的基于 validityTime 的自动过期。
  • 并发控制:NF 实例响应上的 ETag;PUT/PATCH 上的条件 If-Match (不匹配时返回 412)。
  • 内容类型强制:PATCH 主体必须是 application/json-patch+json (否则返回 415);简单心跳客户端可以容忍缺失的 Content-Type。
  • 结构化 JSON 日志记录,带有每个请求的元数据 (NF 实例 ID、过程)。
  • 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 (回环)。在任何多主机或容器化部署中,必须将其覆盖为其他 NF 可以访问的地址,否则将无法注册或发现任何 NF。

完整的参数参考,包括每个环境变量和默认值,详见 配置参考