跳到主要内容

OmniSCP

OmniSCP 是 Omnitouch 5G 核心的 服务通信代理 (SCP)。它位于 NF 消费者和 NF 生产者之间,处于 5G 服务基础架构 (SBA) 中,并提供 间接通信(3GPP TS 23.501 模型 C 和 D):消费者将其服务基础接口 (SBI) 请求发送到 SCP,SCP 执行基于 NRF 的发现,在发现的生产者实例之间进行负载均衡,重试失败的请求,并强制上游超时,然后将生产者的响应返回给消费者。

SCP 本身作为类型为 SCP 的 NF 向 NRF 注册,并通过定期心跳保持该注册。

文档

  • 操作: 3GPP 角色、接口/端点、路由/发现模式和带有序列图的关键过程。
  • 配置: 每个可运行调整的参数、管理/OAM API 和日志记录。
  • 指标: Prometheus 指标和示例 PromQL。
  • 故障排除: 常见故障及解决方案。

架构概述

功能概述

  • 间接通信 (模型 C 和 D):代表消费者委托 NRF 发现,以及在消费者已知目标时的直接转发。
  • 通用反向代理:除了 NRF 状态通知回调外,所有 SBI 路径都透明地转发到已解析的生产者。
  • 发现缓存:基于 ETS 的 NRF 发现结果缓存,具有可配置的 TTL。NRF 状态通知会驱逐单个受影响的实例(在没有实例 ID 的情况下回退到一个 NF 类型),而不是整个缓存。
  • 负载均衡:在发现的生产者实例之间进行 round_robinweighted(容量/负载)或 priority 选择。
  • 超载控制 (OCI):从响应中读取生产者超载控制信息,并在负载均衡器选择之前将超载的生产者从候选集中剔除(TS 29.500 §6.3)。
  • 负载控制中继 (LCI):端到端中继生产者的 3gpp-Sbi-Lci3gpp-Sbi-Load 响应头,以便消费者通过 SCP 接收生产者负载提示(TS 29.500 §6.3)。
  • 自动故障健康跟踪:在连续失败后将实例标记为不健康,并在冷却后自动恢复。
  • 管理排水:操作员可以通过 OAM API 将生产者从轮换中移除,而无需从 NRF 注销。
  • 带上游超���的重试:5xx 和连接/超时故障在可配置的限制内对其他实例进行重试。
  • NRF 自注册:作为 SCP NF 注册并通过心跳保持存活;按需强制重新注册。
  • Prometheus 指标 + 实时 OAM 控制:代理、缓存和注册指标,以及通过 HTTPS 进行的运行时重新配置。

快速开始

OmniSCP 从 config/runtime.exs 读取其运行时配置,每个键都由环境变量支持。主要设置包括 SBI 监听器、NRF 位置和 PLMN:

import Config

config :omniscp,
sbi_scheme: System.get_env("SBI_SCHEME", "http"),
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.17"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
nrf_uri: System.get_env("NRF_URI", "http://127.0.0.1:7777"),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70")

NF 消费者将其 SBI 流量指向 sbi_addr:sbi_port,而不是直接指向生产者。完整的参数集(缓存 TTL、负载均衡策略、重试和超时调整,以及 OAM 可调容量/优先级)在 配置 中有详细文档。