Sobre el proyecto
Fila es un broker de mensajes actualmente en fase de diseño (aún no es código funcional). Aborda un problema común de los brokers FIFO tradicionales: cuando varios inquilinos o tipos de carga de trabajo comparten una cola, un único productor ruidoso puede dejar sin recursos a todos los demás, y la limitación de tasa normalmente se traslada al consumidor, desperdiciando trabajo y añadiendo latencia.
Fila traslada las decisiones de programación al propio broker. Las características principales incluyen:
- **Programación justa con Deficit Round Robin (DRR)**: cada clave de equidad recibe su cuota proporcional de ancho de banda de entrega según su peso, evitando que un inquilino quede sin recursos.
- **Limitación de tasa declarada por el consumidor**: los consumidores declaran límites de tasa con nombre (por ejemplo, por servicio o por cliente) al suscribirse. El broker retiene los mensajes hasta que la entrega se mantiene dentro de todos los límites declarados, de modo que los consumidores solo reciben mensajes que realmente pueden procesar.
- **Motor de reglas Lua**: hooks opcionales `on_enqueue` y `on_failure` permiten a los usuarios definir políticas de programación personalizadas, como derivar claves de equidad a partir del payload o decidir entre reintento y cola de mensajes muertos.
- **Deduplicación y ordenación**: ambas desactivadas por defecto, configurables mediante claves de idempotencia y claves de ordenación respectivamente.
- **Reintentos y colas de mensajes muertos**: los intentos fallidos activan políticas de reintento configurables (por defecto 3 intentos con retroceso exponencial), y los mensajes agotados pasan a una DLQ por cola que admite redrive.
- **Leases**: los mensajes entregados se arriendan con tiempos de visibilidad; los leases expirados cuentan como intentos fallidos.
- **Configuración en tiempo de ejecución**: un almacén clave-valor en vivo legible desde los hooks Lua, que permite cambiar políticas sin reiniciar.
El SDK de cliente está en Rust y usa un modelo de permisos basado en capacidades con tres handles (productor, consumidor, admin) que reflejan los permisos ACL. El protocolo de comunicación es un protocolo binario hecho a mano (sin gRPC), nativo para lotes y multiplexado sobre una única conexión. El cliente sigue una arquitectura sans-io, separando un núcleo de máquina de estados puro de una capa de E/S específica del lenguaje para permitir futuros SDKs en varios lenguajes.
La CLI (`fila`) es un cliente ligero sobre el mismo SDK sin acceso privilegiado, que cubre gestión de colas, operaciones de clúster (drain, move, rebalance), configuración en tiempo de ejecución, redrive y administración de auth/ACL.
El almacenamiento comienza con un log de solo anexado y un índice en memoria, con un contrato de trait de almacenamiento que enfatiza la durabilidad antes del acuse de recibo, grupos de mutación atómicos y escaneos de rangos ordenados. El clustering usa grupos Raft por cola con un grupo meta para la coordinación.
Licenciado bajo AGPLv3.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.