À propos du projet

Fila est un courtier de messages actuellement en phase de conception (pas encore de code fonctionnel). Il répond à un problème courant des courtiers FIFO traditionnels : lorsque plusieurs locataires ou types de charge de travail partagent une file d'attente, un seul producteur bruyant peut affamer tous les autres, et la limitation de débit est généralement repoussée vers le consommateur, ce qui gaspille du travail et ajoute de la latence. Fila déplace les décisions d'ordonnancement dans le courtier lui-même. Les fonctionnalités principales incluent : - **Ordonnancement équitable par Deficit Round Robin (DRR)** : chaque clé d'équité reçoit sa part proportionnelle de bande passante de livraison selon son poids, évitant l'affamement des locataires. - **Limitation déclarée par le consommateur** : les consommateurs déclarent des limites de débit nommées (par exemple par service ou par client) lors de l'abonnement. Le courtier retient les messages jusqu'à ce que la livraison reste dans toutes les limites déclarées, de sorte que les consommateurs ne reçoivent que les messages qu'ils peuvent réellement traiter. - **Moteur de règles Lua** : des hooks optionnels `on_enqueue` et `on_failure` permettent aux utilisateurs de définir une politique d'ordonnancement personnalisée, comme dériver des clés d'équité à partir de la charge utile ou décider du comportement de nouvelle tentative ou de lettre morte. - **Déduplication et ordonnancement** : tous deux désactivés par défaut, configurables respectivement via des clés d'idempotence et des clés d'ordonnancement. - **Nouvelles tentatives et files de lettres mortes** : les tentatives échouées déclenchent des politiques de nouvelle tentative configurables (3 tentatives par défaut avec backoff exponentiel), les messages épuisés étant déplacés vers une DLQ par file d'attente qui prend en charge le redrive. - **Baux** : les messages livrés sont loués avec des délais de visibilité ; les baux expirés comptent comme des tentatives échouées. - **Configuration à l'exécution** : un magasin clé-valeur en direct lisible depuis les hooks Lua, permettant des changements de politique sans redémarrage. Le SDK client est en Rust et utilise un modèle de permissions basé sur les capacités avec trois handles (producteur, consommateur, admin) qui reflètent les permissions ACL. Le protocole de communication est un protocole binaire fait main (pas de gRPC), natif par lots et multiplexé sur une seule connexion. Le client suit une architecture sans-io, séparant un cœur de machine à états pur d'une enveloppe d'E/S spécifique au langage pour permettre de futurs SDK multilingues. La CLI (`fila`) est un client léger au-dessus du même SDK sans accès privilégié, couvrant la gestion des files d'attente, les opérations de cluster (drain, move, rebalance), la configuration à l'exécution, le redrive et l'administration auth/ACL. Le stockage commence par un journal en ajout seul et un index en mémoire, avec un contrat de trait de stockage mettant l'accent sur la durabilité avant acquittement, les groupes de mutation atomiques et les analyses de plage ordonnées. Le clustering utilise des groupes Raft par file d'attente avec un groupe méta pour la coordination. Sous licence AGPLv3.