Le cockpit d'architecture (briques, flux et parcours, à explorer en zoomant et en cliquant) est pensé pour les grands écrans. Les choix techniques justifiés ci-dessous, eux, se lisent partout.
L'architecture repose sur quelques décisions structurantes, chacune benchmarkée. On présente ici le besoin, les alternatives écartées, la décision et son trade-off : aucun choix n'est gratuit, chacun est assumé.
Des services backend fiables et performants (ingestion temps réel, API, auth) sur une infra peu coûteuse.
Node.js/NestJS, Python/FastAPI, Go/Gin, C#/ASP.NET, Rust/Axum (benchmark backend complet).
Rust (Axum) pour les services métier ; Python réservé au Care Engine (IA).
Assumé : le benchmark montre un coût de développement environ 2,5× supérieur et seulement deux développeurs Rust dans l'équipe. On le choisit pour la performance, la sûreté mémoire (une classe entière de bugs disparaît), une empreinte serveur minimale et la montée en compétence. Garde-fous : périmètre Rust ciblé sur les services critiques, Python assumé pour l'IA, workspace Cargo partagé, et réintroduction ciblée d'un autre langage si un service devient un point chaud.
Faire évoluer et monter en charge chaque partie du système séparément, sans créer une constellation ingérable.
Monolithe unique, microservices fins.
Un ensemble restreint de services dont les frontières suivent quatre critères : domaine métier (bounded context), runtime (Rust / Python), profil de charge et frontière de sécurité. Concrètement : OIDC isolé (sécurité), Core API (cœur transactionnel), Ingestion (flux MQTT haute fréquence), Téléconsult/Pool (avec état, WebSocket), Care Engine (runtime Python, cloisonné).
Montée en charge et durcissement ciblés par service ; surcoût d'exploitation absorbé par Kubernetes, le GitOps et l'observabilité. On ne fragmente pas au-delà : un nouveau service ne naît que lorsqu'un des quatre critères le justifie, jamais par principe.
Recevoir la télémétrie de colliers sur batterie et réseau cellulaire instable.
HTTP/REST, CoAP, passerelle maison.
Broker MQTT (EMQX) en point d'entrée, TLS et certificat par collier (step-ca).
MQTT est le standard IoT : pub/sub léger, QoS, sessions persistantes, reconnexion et mode hors-ligne gratuits. Coût : un composant de plus à opérer dans le cluster.
Découpler les services et ne perdre aucun événement (ingestion, projections, file de téléconsultation, audit).
RabbitMQ, appels synchrones directs entre services.
Apache Kafka comme épine dorsale événementielle.
Kafka offre haut débit, rétention des messages et un large écosystème de connecteurs. Coût : plus gourmand en RAM que RabbitMQ, ce qui dimensionne le cluster. Choix assumé pour la robustesse et l'évolutivité.
Stocker le métier transactionnel, les séries temporelles de télémétrie et les embeddings du corpus vétérinaire.
MongoDB + InfluxDB + Qdrant, soit trois moteurs séparés.
Une seule famille PostgreSQL : TimescaleDB (séries temporelles) et pgvector (vectoriel) en extensions.
Un seul moteur à opérer et sauvegarder, SQL vérifié à la compilation, open-source sans licence. Bascule possible vers Qdrant si la charge vectorielle l'exige (interface RAG abstraite).
Un assistant IA dont chaque étape est testable et juridiquement défendable (non-diagnostic).
Agent LLM autonome en boucle libre.
Pipeline LangGraph borné à 6 nœuds ; le LLM est cantonné dans une cage (ADR-001).
Moins de flexibilité qu'un agent libre, mais la responsabilité juridique est portée par le pipeline. Un agent libre serait indéfendable face au Code rural. Détail sur la page Assistant IA.
Un LLM de qualité en français, conforme RGPD, à coût maîtrisé.
LLM hébergé hors UE, modèle unique pour tout le pipeline.
Azure OpenAI déployé en UE, cascade (un modèle par nœud) et reranker Cohere (ADR-002 / ADR-003).
Data residency UE et coût d'environ 0,03 à 0,05 € par conversation. Dépendance à Microsoft, mitigée par une interface LLMProvider (bascule Mistral ou self-host). Budget détaillé sur la page Assistant IA.
Faire tourner les services et toutes leurs dépendances (bases, Kafka, broker MQTT, observabilité), scaler et déployer de façon reproductible, à coût maîtrisé et souverain.
PaaS, Kubernetes managé d'emblée, simple docker-compose.
Cluster Kubernetes auto-géré (Terraform) sur Hetzner, déploiement GitOps via Argo CD.
Le plus économique et souverain, mais le plus exigeant en opérations (sauvegarde etcd, mises à jour). Mitigé par l'Infrastructure as Code et un passage au managé EU au scale. Détail sur la page Cloud.
Identité, connexion et droits owner / vétérinaire, avec consentement RGPD.
Auth0, Keycloak, Cognito.
Serveur OIDC maison (Rust).
Choix de souveraineté et défi technique formateur, mais coûteux (environ 4 à 6 mois-homme) et sensible côté sécurité. Garde-fous : revue de sécurité et tests d'abus obligatoires avant la mise en production.