Aller au contenu principal

OmniSCP

OmniSCP est le Proxy de Communication de Service (SCP) du cœur 5G d'Omnitouch. Il se situe entre les consommateurs de NF et les producteurs de NF dans l'Architecture Basée sur les Services 5G (SBA) et fournit une communication indirecte (modèles C et D de la 3GPP TS 23.501) : les consommateurs envoient leurs requêtes d'Interface Basée sur les Services (SBI) au SCP, qui effectue la découverte basée sur le NRF, équilibre la charge entre les instances de producteurs découvertes, réessaie les requêtes échouées, et impose un délai d'attente en amont, puis renvoie la réponse du producteur au consommateur.

Le SCP lui-même s'enregistre auprès du NRF en tant que NF de type SCP et maintient cet enregistrement avec des battements de c��ur périodiques.

Documentation

  • Opérations : rôle 3GPP, interfaces/points de terminaison, modes de routage/découverte, et procédures clés avec des diagrammes de séquence.
  • Configuration : chaque paramètre ajustable à l'exécution, l'API de gestion/OAM, et la journalisation.
  • Métriques : métriques Prometheus et exemple de PromQL.
  • Dépannage : pannes courantes et résolutions.

Vue d'ensemble de l'architecture

Vue d'ensemble des fonctionnalités

  • Communication indirecte (Modèles C et D) : découverte NRF déléguée au nom des consommateurs, plus transfert direct lorsque le consommateur connaît déjà la cible.
  • Proxy inverse général : chaque chemin SBI sauf le rappel de notification de statut NRF est transféré de manière transparente à un producteur résolu.
  • Mise en cache de découverte : cache soutenu par ETS des résultats de découverte NRF avec un TTL configurable. Les notifications de statut NRF évacuent l'instance affectée (retombant sur un type de NF lorsque aucun identifiant d'instance n'est présent), jamais l'ensemble du cache.
  • Équilibrage de charge : sélection round_robin, pondéré (capacité/charge), ou priorité entre les instances de producteurs découvertes.
  • Contrôle de surcharge (OCI) : lit les informations de contrôle de surcharge du producteur à partir des réponses et élimine les producteurs surchargés de l'ensemble des candidats avant la sélection de l'équilibreur de charge (TS 29.500 §6.3).
  • Relais de contrôle de charge (LCI) : relaie les en-têtes de réponse 3gpp-Sbi-Lci et 3gpp-Sbi-Load du producteur de bout en bout afin que les consommateurs reçoivent des indices de charge du producteur via le SCP (TS 29.500 §6.3).
  • Suivi automatique de la santé des pannes : les instances sont marquées comme non saines après des pannes consécutives et se rétablissent automatiquement après une période de refroidissement.
  • Drainage administratif : les opérateurs peuvent retirer un producteur de la rotation via l'API OAM sans le désenregistrer du NRF.
  • Réessai avec délai d'attente en amont : les échecs 5xx et de connexion/délai d'attente sont réessayés contre d'autres instances jusqu'à une limite configurable.
  • Auto-enregistrement NRF : s'enregistre en tant que NF SCP et envoie des battements de cœur pour rester actif ; force la réinscription à la demande.
  • Métriques Prometheus + contrôle OAM en direct : métriques de proxy, de cache et d'enregistrement, plus reconfiguration à l'exécution via HTTPS.

Démarrage rapide

OmniSCP lit sa configuration d'exécution à partir de config/runtime.exs, chaque clé étant soutenue par une variable d'environnement. Les paramètres principaux sont l'écouteur SBI, l'emplacement du NRF, et le 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")

Les consommateurs de NF dirigent leur trafic SBI vers sbi_addr:sbi_port au lieu de directement vers les producteurs. L'ensemble complet des paramètres (TTL de cache, stratégie d'équilibrage de charge, réglages de réessai et de délai d'attente, et la capacité/priorité ajustable par OAM) est documenté dans Configuration.