À propos du projet

AetherGrid est un orchestrateur distribué de charges de travail IA qui planifie des charges sur des nœuds de calcul en fonction des exigences et contraintes de ressources, gérant le cycle de vie complet des travaux, de la file d'attente à l'annulation, en passant par la planification, l'exécution, l'achèvement, l'échec, la nouvelle tentative et l'annulation. Il est construit autour d'une conception stricte pilotée par le domaine, avec un noyau de domaine découplé sans dépendances d'infrastructure, une boucle de réconciliation événementielle et une propriété d'exécution basée sur un bail. La motivation déclarée du projet est de résoudre les problèmes difficiles de la planification à grande échelle : propriété exclusive de l'exécution en cas de panne, réconciliation après des pannes partielles et limites de ressources imposées. La couche de domaine (agrégats Job, Node, Worker, Lease, Event, ApiKey) contient l'algorithme de planification et la machine à états du cycle de vie en Python pur, sans importations de FastAPI ou psycopg. Les services applicatifs coordonnent les objets de domaine et les référentiels, tandis que l'infrastructure fournit des implémentations PostgreSQL pour chaque référentiel en utilisant psycopg brut plutôt qu'un ORM, ainsi que des implémentations SQLite pour certains référentiels en développement local. La couche de présentation est FastAPI, et le frontend est React avec TypeScript. Les capacités clés décrites incluent l'authentification par clé API pour chaque route (y compris le point de terminaison de délivrance de clés, la première clé étant frappée uniquement via un script local avec accès direct à la base de données), des transitions d'état explicites des travaux, y compris l'annulation d'un travail en cours via un état CANCELLING, des pages d'historique du cycle de vie par travail, un allocateur best-fit tenant compte des contraintes, le drainage des nœuds, l'enregistrement des travailleurs et les battements de cœur, un processus d'agent travailleur autonome qui interroge via HTTP et exécute les travaux en tant que sous-processus réels, une propriété d'exécution basée sur un bail avec renouvellement continu, une confirmation explicite du début d'exécution, une exécution réelle en sous-processus avec arrêt en deux étapes (SIGTERM puis SIGKILL), le suivi de la vivacité des nœuds, une réconciliation avec des tentatives limitées, l'enregistrement d'événements de domaine, un flux d'événements en direct à l'échelle du cluster, la visibilité des travailleurs et un tableau de bord multi-pages. Le README met l'accent sur les enregistrements de décisions techniques : 39 ADR sont documentés dans /docs/adr, couvrant des sujets tels que la boucle de réconciliation, la récupération des travaux et la réparation de la réconciliation, l'exécution réelle des travaux, le renouvellement continu du bail, l'authentification par clé API, la propriété du domaine de la politique de planification, l'agent travailleur autonome, l'annulation via le renouvellement du bail, l'enregistrement idempotent des travailleurs, la récupération des travaux abandonnés en pleine annulation, le déplacement de l'exécution du tick du cluster hors de la boucle d'événements, la persistance des transitions RUNNING et plusieurs correctifs de verrouillage de bail par identité de bail plutôt que par identité de travailleur. Le README indique 347 tests couvrant les couches domaine, application, infrastructure et API, y compris des tests de contrat prouvant que les implémentations de référentiel se comportent de manière identique. Le projet comprend une démonstration en direct déployée sur Render avec Postgres réel, authentification réelle et points de terminaison protégés par clé API. Il est sous licence MIT et utilise Python 3.12, FastAPI, PostgreSQL, React/TypeScript et Docker Compose.