Pular para o conteúdo principal

OmniNRF

OmniNRF implementa a Função de Repositório de Rede (NRF) do núcleo 5G. O NRF é o registro central e diretório de serviços da Arquitetura Baseada em Serviços (SBA): cada outra Função de Rede (NF) registra seu perfil com o NRF na inicialização, mantém esse registro ativo com batimentos periódicos e consulta o NRF para descobrir os pontos finais das NFs com as quais precisa se comunicar.

OmniNRF expõe dois serviços SBI. Nnrf_NFManagement (nnrf-nfm/v1) lida com registro de perfil NF, atualização, batimento, desregistro, recuperação e assinaturas/notificações de mudança de status NF. Nnrf_NFDiscovery (nnrf-disc/v1) lida com a resolução de instâncias NF alvo por tipo, serviço, S-NSSAI, DNN e PLMN. Todos os perfis NF e assinaturas são mantidos em armazenamentos em memória (ETS); não há banco de dados externo, então o registro é reconstruído à medida que as NFs se registram novamente após uma reinicialização do NRF. Uma varredura em segundo plano continuamente expira instâncias NF que pararam de enviar batimentos, de modo que o registro só anuncia NFs que estão demonstravelmente ativas.

Documentação

  • Guia de Operações - papel 3GPP, pontos finais SBI e os principais procedimentos de registro, descoberta e assinatura com diagramas de sequência.
  • Referência de Configuração - Referência completa de configuração em tempo de execução, tabelas de parâmetros, API de gerenciamento/OAM e registro.
  • Métricas - Métricas Prometheus para registros, descoberta, batimentos e saúde da VM BEAM, com exemplo de PromQL.
  • Solução de Problemas - Problemas comuns e suas resoluções.

Visão Geral da Arquitetura

O NRF está no centro da SBA. Produtores (UDM, AUSF, PCF, …) se registram para que possam ser encontrados; consumidores (AMF, SMF, NSSF, …) os descobrem. Qualquer NF pode ser ambos, e todos eles enviam batimentos.

Visão Geral dos Recursos

  • Nnrf_NFManagement: registrar (PUT), batimento e atualização JSON-Patch (PATCH, RFC 6902 com caminhos JSON-Pointer aninhados), desregistrar (DELETE), recuperação única e lista (GET). A lista de instâncias NF é retornada como uma 3gppHal+json UriList com filtragem por nf-type e paginação limit/page-number/page-size.
  • Nnrf_NFDiscovery: filtragem por tipo de NF, nomes de serviços, PLMN, S-NSSAI e DNN; ordenação de resultados por prioridade/capacidade/carga; paginação offset/limit com um cabeçalho Link: rel="next".
  • Envelhecimento de batimentos: varredura contínua em segundo plano expira NFs silenciosas por mais de heartbeat_timeout e notifica assinantes.
  • Assinaturas de status: filtragem subscrCond.nfType, notificações NF_REGISTERED carregam o nfProfile completo, expiração automática opcional baseada em validityTime.
  • Controle de concorrência: ETag nas respostas de instâncias NF; If-Match condicional em PUT/PATCH (412 em caso de discrepância).
  • Imposição de tipo de conteúdo: corpos PATCH devem ser application/json-patch+json (415 caso contrário); um Content-Type ausente é tolerado para clientes de batimento simples.
  • Registro JSON estruturado com metadados por solicitação (ID da instância NF, procedimento).
  • Métricas Prometheus para registros, descoberta, batimentos e saúde da VM BEAM.

Início Rápido

OmniNRF lê sua configuração de operador de config/runtime.exs, que mapeia variáveis de ambiente para o ambiente da aplicação :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 tem como padrão 127.0.0.1 (loopback). Em qualquer implantação multi-host ou em contêiner, isso deve ser substituído por um endereço que as outras NFs possam alcançar, caso contrário, nenhuma NF poderá se registrar ou descobrir.

A referência completa de parâmetros, incluindo todas as variáveis de ambiente e padrões, está na Referência de Configuração.