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+jsonUriList com filtragem pornf-typee paginaçãolimit/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/limitcom um cabeçalhoLink: rel="next". - Envelhecimento de batimentos: varredura contínua em segundo plano expira NFs silenciosas por mais de
heartbeat_timeoute notifica assinantes. - Assinaturas de status: filtragem
subscrCond.nfType, notificaçõesNF_REGISTEREDcarregam onfProfilecompleto, expiração automática opcional baseada emvalidityTime. - Controle de concorrência:
ETagnas respostas de instâncias NF;If-Matchcondicional 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_ADDRtem como padrão127.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.