OmniSCP
OmniSCP é o Proxy de Comunicação de Serviço (SCP) do Core 5G da Omnitouch. Ele se posiciona entre consumidores de NF e produtores de NF na Arquitetura Baseada em Serviços 5G (SBA) e fornece comunicação indireta (modelos C e D do 3GPP TS 23.501): os consumidores enviam suas solicitações de Interface Baseada em Serviço (SBI) para o SCP, que realiza a descoberta baseada em NRF, balanceia a carga entre as instâncias de produtores descobertas, tenta novamente solicitações falhadas e impõe um tempo limite upstream, retornando a resposta do produtor ao consumidor.
O SCP em si se registra no NRF como um NF do tipo SCP e mantém esse registro com batimentos periódicos.
Documentação
- Operações: papel do 3GPP, interfaces/pontos finais, modos de roteamento/descoberta e procedimentos-chave com diagramas de sequência.
- Configuração: cada parâmetro ajustável em tempo de execução, a API de gerenciamento/OAM e registro.
- Métricas: métricas do Prometheus e exemplo de PromQL.
- Solução de Problemas: falhas comuns e resoluções.
Visão Geral da Arquitetura
Visão Geral dos Recursos
- Comunicação indireta (Modelos C e D): descoberta NRF delegada em nome dos consumidores, além de encaminhamento direto quando o consumidor já conhece o destino.
- Proxy reverso catch-all: cada caminho SBI, exceto o callback de notificação de status do NRF, é encaminhado de forma transparente para um produtor resolvido.
- Cache de descoberta: cache baseado em ETS dos resultados de descoberta do NRF com um TTL configurável. As notificações de status do NRF expulsam a única instância afetada (voltando a um tipo de NF quando nenhum ID de instância está presente), nunca o cache inteiro.
- Balanceamento de carga: seleção
round_robin,ponderada(capacidade/carga) ouprioridadeentre as instâncias de produtores descobertas. - Controle de sobrecarga (OCI): lê informações de Controle de Sobrecarga do produtor a partir das respostas e remove produtores sobrecarregados do conjunto de candidatos antes da seleção do balanceador de carga (TS 29.500 §6.3).
- Relay de controle de carga (LCI): retransmite cabeçalhos de resposta do produtor
3gpp-Sbi-Lcie3gpp-Sbi-Loadde ponta a ponta para que os consumidores recebam dicas de carga do produtor através do SCP (TS 29.500 §6.3). - Rastreamento automático de saúde de falhas: instâncias são marcadas como não saudáveis após falhas consecutivas e se recuperam automaticamente após um resfriamento.
- Drenagem administrativa: operadores podem retirar um produtor da rotação via API OAM sem desregistrá-lo do NRF.
- Tentativa com tempo limite upstream: falhas 5xx e de conexão/tempo limite são tentadas novamente contra outras instâncias até um limite configurável.
- Auto-registro NRF: registra-se como um NF
SCPe envia batimentos para permanecer ativo; força re-registro sob demanda. - Métricas do Prometheus + controle OAM ao vivo: métricas de proxy, cache e registro, além de reconfiguração em tempo de execução via HTTPS.
Começo Rápido
OmniSCP lê sua configuração em tempo de execução de config/runtime.exs, cada chave respaldada por uma variável de ambiente. As configurações principais são o ouvinte SBI, a localização do NRF e o 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")
Consumidores de NF direcionam seu tráfego SBI para sbi_addr:sbi_port em vez de diretamente para os produtores. O conjunto completo de parâmetros (TTL do cache, estratégia de balanceamento de carga, ajuste de tentativas e tempo limite, e a capacidade/prioridade ajustável via OAM) está documentado em Configuração.