Livraison at-most-once
L'inverse symétrique d'at-least-once. Acceptable seulement pour les flux dont la perte ne pose pas de problème métier.
Problème
Certains flux EDI portent des informations non-critiques : statuts intermédiaires IFTSTA en réseau IoT, événements de télémétrie sortis de capteurs logistiques, KPI horaires. Imposer at-least-once + déduplication sur ces flux ajoute du coût et de la latence pour un bénéfice nul — un statut « camion en route » perdu n'a pas d'impact métier majeur si le suivant arrive.
Forces
- Volume très élevé sur les flux IoT/télémétrie ; la déduplication coûte cher.
- Tolérance à la perte avérée par l'usage métier — un statut perdu est remplacé par le suivant.
- Latence faible est plus importante que la complétude.
- Le retry amplifierait la panne — quand le partenaire est down, des milliers de capteurs ne doivent pas tous retenter.
Solution
Mettre en place une politique d'envoi fire-and-forget : UDP ou
Kafka acks=0, aucune tentative en cas de panne réseau, et
aucune déduplication récepteur. La perte est documentée comme
acceptable dans la convention partenaire ; les SLA sont exprimés en
« X% des événements reçus en moins de Y secondes », pas en
« zéro perte ».
Implémentation EDI
En EDI réglementaire (CUSDEC, INVOIC, ORDERS, PAYMUL) at-most-once est interdit : la perte d'une déclaration ou d'une commande
a un impact métier ou légal. La sémantique est réservée aux flux
secondaires : positions GPS d'IFTSTA capteurs, télémétrie
pré-événement, indicateurs internes du hub. Côté Kafka, le réglage est acks=0 côté producer + auto.offset.reset=latest
côté consumer. Côté HTTP, on accepte un POST sans body de retry et
sans backoff.
Anti-patterns
- At-most-once sur un INVOIC ou un ORDERS. Faute d'intégration grave — une commande perdue est un incident.
- Configuration silencieuse. La sémantique doit être explicite dans la convention partenaire, pas un défaut d'outillage passé inaperçu.
- Mélanger les sémantiques sur un même canal. Toutes les commandes au même endroit que la télémétrie produit une dette d'observabilité immédiate.
- Compter le succès opérationnel d'un flux at-most-once comme zéro perte. Le SLA doit publier la perte attendue (par exemple 0.1% mensuel).
Patterns liés
- At-Least-Once — le pendant fiable, sémantique par défaut.
- Event Message — le style de message le plus souvent en at-most-once.
- Dead Letter Channel — typiquement absent pour at-most-once (rien à reprendre).
Sources
- Kleppmann M. — Designing Data-Intensive Applications, chap. 11, table des semantiques de livraison. dataintensive.net
- Apache Kafka — Producer configuration, paramètre
acks(0/1/all). kafka.apache.org/documentation/#producerconfigs_acks - RFC 8085 — UDP Usage Guidelines (IETF, 2017), référence canonique du fire-and-forget réseau. rfc-editor.org/rfc/rfc8085