Exploitation et disponibilité

Readiness, failover et supervision11 composants
Liveness applicative et readiness edge localeCode + lab
Rôle / owner
livez/readyz applicatifs, collecteur edge 14 checks et contrôleur d’admission local. Owners applicatif et edge séparés.
Interfaces / confiance
HTTP privé app; edge sans listener ni port, timer 15 s, RPC Kamailio Unix local.
État / dépendances
Quatre fichiers /run bornés et bail htable Kamailio de 30 s.
HA / panne
Snapshot exact âgé de plus de 25 s refusé pour admission; panne collecteur demande le drain, sinon le bail expire; appels établis non gated.
Sécurité / preuve / source
0700/0640, aucune donnée d’appel/adresse/média/payload/sortie de commande. Health-lab injecté et runtime-lab réel. Source: health.py, admission.py et labs.

Ouvrir la fiche composant

Consommateur carrier du contrat A/BExterne non prouvé
Rôle / owner
Sélectionne A puis B pour chaque nouvel appel. Autorité: carrier contracté; Navy Phone possède le contrat et la preuve d’acceptation.
Interfaces / confiance
Deux cibles SIP mTLS directes; 503 Cell Draining ou absence de réponse. Aucun contrôleur central ni nouveau listener edge n’est implicite.
État / dépendances
Priorités 10/20, timeout 4 s et hold-down 30 s dans le modèle local; configuration opérateur et audit terrain absents.
HA / panne
Deux échecs ferment le nouvel appel; aucun actif ne migre et toute redirection SIP reste interdite.
Sécurité / preuve / source
Contrat et lab local content-free PASS, promotion NO-GO. Aucun carrier, PSTN ou action externe. Voir résilience et preuves.

Ouvrir la fiche composant

Exporter privé edge-healthCode + lab
Rôle / owner
Envoie l’état content-free hors chemin d’appel. Owner SRE edge.
Interfaces / confiance
Snapshot local vers POST mTLS TCP/9443 avec identité telemetry A/B.
État / dépendances
Spool de trois enveloppes; dépend du timer santé et de la cible privée.
HA / panne
Retry idempotent; panne distante sans impact sur appel ou admission locale.
Fiche / preuve
Fiche exporter. Telemetry-lab local; VIP et cloud absents.
VIP et load balancer privésCible
Rôle / owner
Adresse stable et répartition TCP vers collecteurs A/B. Owner SRE plateforme.
Interfaces / confiance
10.72.40.50:9443, passthrough TLS sans Proxy Protocol.
État / dépendances
Health check TCP; dépend du réseau privé et du service LB Scaleway.
HA / panne
Aucun runtime; SPOF et source backend restent non qualifiés.
Fiche / preuve
Fiche VIP/LB. Contrat statique, aucun déploiement.
Collecteur privé edge-healthCode + lab
Rôle / owner
Réception, déduplication et métriques A/B. Owner SRE edge.
Interfaces / confiance
POST mTLS TCP/9443 et GET /metrics; identités telemetry/monitoring séparées.
État / dépendances
SQLite borné à 256 enveloppes par cellule; sorties content-free.
HA / panne
Aucune réplication ni sauvegarde; appels indépendants.
Fiche / preuve
Fiche collecteur. Lab mTLS A/B, aucun cloud.
Prometheus A/B edge-healthCode + runtime-lab
Rôle / owner
Scrape et agrégation par cellule/scope. Owner SRE observabilité.
Interfaces / confiance
GET /metrics mTLS direct A/B; sortie vers les deux Alertmanager.
État / dépendances
Deux Prometheus 3.14.0 digest-pinnés exercés; TSDB durable et rétention à figer.
HA / panne
Deux scrapes par Prometheus et perte de A exercés localement; panne double, charge et SLO absents.
Fiche / preuve
Fiche Prometheus. Runtime-lab fermé 12/12, aucun déploiement souverain.
Alertmanager A/B edge-healthCode + runtime-lab
Rôle / owner
Groupage, inhibition et routage vers receiver. Owner SRE/astreinte.
Interfaces / confiance
Gossip mTLS 9094 et webhook notification mTLS privé.
État / dépendances
Deux Alertmanager 0.33.1 digest-pinnés exercés; dépend des deux Prometheus.
HA / panne
Gossip bilatéral, arrêt de A, partition fail-open, doublons dédupliqués et guérison exercés localement.
Fiche / preuve
Fiche Alertmanager. Runtime-lab fermé 12/12, aucun déploiement ou chemin humain.
Receiver privé durable d’alertesCode + lab 23/23
Rôle / owner
Validation, idempotence et watchdog deadman. Owner SRE/astreinte.
Interfaces / confiance
POST /v1/alerts et /v1/deadman mTLS sur 10.72.40.60:9444.
État / dépendances
SQLite et snapshot content-free bornés; CA notification dédiée.
HA / panne
Panne puis retry exercés localement; pas de réplica ni restauration; aucune action humaine livrée.
Fiche / preuve
Fiche receiver. Labs 23/23 isolé et 12/12 intégré avec Alertmanager A/B réels.
PostgreSQL des opérations edge-healthCandidat + lab synthétique
Rôle / owner
Journalise transitions, obligations, tentatives, acquittements et escalades. L’owner d’objets navy_phone_edge_health_owner est NOLOGIN, NOSUPERUSER et distinct de l’owner métier cible SRE opérations et plateforme données.
Interfaces / confiance
PostgreSQL 18.6 avec pgcrypto; rôles NOLOGIN ingest/dispatch/operator/recovery et fonctions bornées dont le search_path place pg_temp en dernière position. Le lab prouve qu’un objet temporaire homonyme ne détourne pas la fonction privilégiée et n’ouvre aucun port hôte.
État / dépendances
Cinq journaux append-only et une outbox transactionnelle. Chaque tentative produit started puis result dans la même table; répéter started avec le même lease est idempotent. Le sink consulte d’abord l’issue terminale de l’idempotency key, puis la lifecycle_revision: une clé dont l’effet a déjà été appliqué reste accepted sans rejouer l’effet; une clé déjà écartée reste suppressed. La completion inscrit un outcome distinct suppressed pour un effet réellement écarté. Le payload révisé et les tombstones resolved/acknowledged gouvernent les autres effets obsolètes.
HA / panne
Le lab exerce les deux permutations firing/resolved et escalation/acknowledged avec perte de completion DB, retry de lease et redémarrage réel: deux requêtes, un seul effet, aucune fausse reclassification en suppressed. Un lease en vol n’est jamais présenté comme annulé; une résolution compensatrice et les races résolution/ACK restent auditées dans les deux ordres exercés. Le stress a reproduit trois fois une course intermittente de même génération avant le verrou transactionnel PostgreSQL dérivé de generation_id; la série propre passe ensuite 5/5 avec 22 contrôles par passage, cleanup vrai et aucune nouvelle unique_violation. Cette preuve reste locale. Le sink synthétique persiste ses révisions sur disque par fichier temporaire, fsync du fichier, renommage atomique puis fsync du dossier. Son état navy-phone.synthetic-operator-sink-state.v1 est strictement versionné: clés attendues, listes SHA-256 et révisions entières positives sont contrôlées. Le JSON corrompu et le JSON syntaxiquement valide mais incomplet comme {} sont refusés. pg_dump/pg_restore préserve l’owner. Aucun PostgreSQL HA, receiver intégré ou humain réel.
Fiche / preuve
Fiche PostgreSQL opérations. Issue terminale, suppression stale, validation stricte de l’état et verrou par génération sont prouvés dans le candidat local seulement. Promotion NO-GO. Sink réel de production, identités runtime, dead-letter queue, nombre maximal de retries, receiver et humain restent non intégrés.
Dispatcher privé des événements opérateur edge-healthCandidat + labs locaux
Rôle / owner
Réclame les obligations operations v2, journalise la tentative avant le réseau et transmet chaque événement au sink. Owner cible: SRE opérations.
Interfaces / confiance
PostgreSQL mTLS par identité A/B, puis HTTPS mTLS vers 10.72.40.70:9445. Identités base et sink séparées.
État / dépendances
Aucun état métier local. Dépend des leases, témoins epoch/watermark et completions idempotentes de PostgreSQL operations v2.
HA / panne
Deux workers, concurrence et délais bornés. Les erreurs temporaires sont rejouées; les réponses invalides sont bloquées sans immobiliser l’événement sain suivant.
Fiche / preuve
Vérificateur contractuel, 75 tests HTTPS mTLS avec sink simulé et lab PostgreSQL 18.6 reproduit deux fois sous Node.js 22.23.2 exact avec certificats A/B, identités session_user et fonctions claim/start/complete réelles. Aucun sink réel déployé, canal de messagerie ou humain notifié. Promotion NO-GO.

Ouvrir la fiche composant

Sink opérateur transactionnel edge-healthCandidat + lab local
Rôle / owner
Engage les reçus opérateur, écarte les révisions dépassées et crée une obligation durable non consommée. Owner cible: SRE opérations et plateforme données.
Interfaces / confiance
HTTPS mTLS privé TCP/9445 avec identité SAN et adresse source A/B, JSON canonique fermé et PostgreSQL dédié.
État / dépendances
Reçus idempotents, tête de révision par génération, watermark global, inbox et obligations de canal annulables.
HA / panne
Le lab local couvre concurrence, crash après commit, restauration ancienne, changement d’epoch et révisions obsolètes. Aucun PostgreSQL HA ou restauration managée.
Fiche / preuve
Service, schéma et lab PostgreSQL/mTLS locaux. L’obligation operator-primary n’est pas consommée: aucun SMS, appel, email, push ou humain notifié. Promotion NO-GO.

Ouvrir la fiche composant