Escalando APIs de agentes de IA con estado mediante principios de microservicios
Los agentes de IA generan tráfico explosivo y con estado que rompe las APIs monolíticas. Los ingenieros pueden solucionarlo desacoplando el cómputo de los datos mediante compartimentos estancos (bulkheads) y bases de datos compartidas.
Traducido automáticamente del original en inglés.
A medida que los agentes de IA pasan de prototipos experimentales a sistemas en producción, los ingenieros enfrentan un desafío de escalabilidad que las arquitecturas web tradicionales tienen dificultades para manejar. A diferencia de los usuarios humanos, los agentes generan ráfagas rápidas de solicitudes con estado que requieren un contexto consistente entre múltiples réplicas del servidor. Un análisis técnico reciente demuestra cómo la aplicación de patrones clásicos de microservicios —específicamente la falta de estado (statelessness), los compartimentos estancos (bulkheads) y los endpoints inteligentes— puede resolver estos puntos de fricción sin reinventar la rueda.
Qué sucedió
La mayoría de las aplicaciones modernas de IA dependen de protocolos estructurados, como la API compatible con OpenAI, para gestionar conversaciones de múltiples turnos. Si bien estas interfaces funcionan bien en configuraciones de una sola réplica, a menudo fallan al escalar horizontalmente. En un benchmark típico de prueba de concepto, una API monolítica ejecutándose en una sola máquina gestionó 800 turnos con cero pérdida de contexto. Sin embargo, cuando el mismo sistema se distribuyó entre tres máquinas detrás de un balanceador de carga, perdió el contexto en el 75 por ciento de las interacciones. El modelo continuaba respondiendo con códigos de estado HTTP 200, pero las respuestas carecían del historial de conversación necesario porque las solicitudes llegaban a servidores que no mantenían el estado local.
La causa raíz reside en la diferencia fundamental entre el tráfico de agentes y el tráfico web estándar. Los bucles de agentes son con estado, pero cada solicitud HTTP es independiente. Sin sesiones adherentes (sticky sessions) o almacenamiento compartido duradero, distribuir estas solicitudes entre réplicas rompe el hilo conversacional. Además, los agentes operan a velocidad de máquina, generando ráfagas de trabajo con poco tiempo de reflexión entre turnos. También reintentan agresivamente ante errores, lo que puede amplificar la presión sobre las dependencias aguas abajo. Estas características crean una forma de carga que los diseños con estado tradicionales no pueden absorber eficientemente.
Para abordar esto, el análisis propone reconstruir APIs amigables para agentes utilizando principios de la literatura de microservicios de la década de 2010. Al descomponer la aplicación en una pasarela (gateway), un servicio de memoria y un servicio de herramientas, los desarrolladores pueden aislar los dominios de fallo. La pasarela maneja el protocolo de OpenAI sin mantener estado, mientras que el servicio de memoria posee el historial de conversaciones y las pistas de auditoría. Esta descomposición permite que cada componente escale de forma independiente y aplique controles de concurrencia específicos, asegurando que el uso intensivo de herramientas no bloquee las completaciones de chat estándar.
Cómo funciona
La arquitectura propuesta se basa en tres mecanismos centrales: falta de estado, compartimentos estancos y convergencia de datos. La falta de estado asegura que el estado de la conversación se mueva fuera del proceso de la aplicación y hacia un almacén compartido. Esto permite que cualquier réplica sirva cualquier turno de cualquier conversación, eliminando la necesidad de adherencia de sesión. Los compartimentos estancos aíslan diferentes partes del sistema para prevenir fallos en cascada. Por ejemplo, se asignan ranuras de concurrencia separadas para solicitudes de chat simples y solicitudes que incluyen herramientas. Si una búsqueda vectorial lenta o una llamada a una API externa bloquea la ruta de herramientas, la ruta de chat estándar permanece disponible para otros usuarios.
La convergencia de datos se logra utilizando un motor de base de datos unificado en lugar de dividir los datos entre múltiples almacenes especializados. En muchas arquitecturas de IA, los desarrolladores podrían usar Postgres para datos relacionales, Redis para caché y una base de datos vectorial separada para embeddings. Este enfoque introduce desafíos complejos de consistencia, especialmente cuando un solo turno de agente requiere escribir simultáneamente el estado de la conversación, registros de herramientas, hechos de memoria y entradas de idempotencia. Al utilizar una base de datos como Oracle AI Database Free, que soporta datos relacionales, JSON y vectoriales en un solo motor, estas escrituras pueden manejarse en una única transacción. Esto garantiza la atomicidad y simplifica la gestión de copias de seguridad y credenciales.
El sistema utiliza semáforos para imponer límites de concurrencia a nivel de servicio. Por ejemplo, la pasarela podría asignar 24 ranuras para chat y ocho para herramientas. Cuando llega una solicitud, debe adquirir una ranura antes de proceder. Esto evita que una inundación de llamadas a herramientas agote todos los recursos disponibles. Adicionalmente, funciones a nivel de base de datos como SELECT ... FOR UPDATE con columnas de versión ayudan a serializar actualizaciones conflictivas desde diferentes réplicas, asegurando que los turnos concurrentes en la misma conversación no sobrescriban el estado del otro.
Detalles clave
- Pérdida de contexto en monolitos: Escalar una API monolítica con estado de una a tres réplicas resultó en una tasa de pérdida de contexto del 75 por ciento en los benchmarks, a pesar de las respuestas HTTP exitosas.
- Cuatro propiedades del tráfico de agentes: Las conversaciones son largas pero las solicitudes son sin estado; las llamadas a herramientas se dispersan de manera impredecible; los agentes reintentan agresivamente; y la carga es explosiva y marcada por la máquina.
- Aislamiento de compartimentos estancos: Separar los pools de concurrencia para chat y herramientas previene que las ejecuciones lentas de herramientas bloqueen las solicitudes de chat estándar, mejorando la resiliencia general del sistema.
- Almacenamiento de datos convergente: Usar una sola base de datos para datos relacionales, JSON y vectoriales evita la sobrecarga de consistencia de gestionar múltiples almacenes de datos especializados para un solo turno de agente.
- Endpoints inteligentes, tuberías tontas: El protocolo de completaciones de chat de OpenAI sirve como una capa de transporte estable, mientras que la inteligencia como el enrutamiento y la ingeniería de memoria se implementa en la lógica de la aplicación.
- Seguridad transaccional: Las transacciones de base de datos aseguran que el estado de la conversación, las auditorías de herramientas y los embeddings de memoria se escriban atómicamente, previniendo actualizaciones parciales durante los reintentos.
Por qué importa
Para los ingenieros de software que construyen productos de IA, comprender estos cambios arquitectónicos es crítico para la fiabilidad. Los fallos silenciosos, donde el sistema parece saludable pero proporciona respuestas incorrectas debido a la falta de contexto, son difíciles de depurar y erosionan la confianza del usuario. Al adoptar diseños sin estado y almacenamiento compartido, los equipos pueden escalar sus aplicaciones horizontalmente sin sacrificar la continuidad conversacional. Este enfoque también simplifica las operaciones, ya que elimina la necesidad de configuraciones complejas de afinidad de sesión en los balanceadores de carga.
Además, el uso de compartimentos estancos y datos convergentes reduce la complejidad operativa y mejora el rendimiento bajo carga. Aislar tareas intensivas en recursos como las búsquedas vectoriales asegura que la funcionalidad central de chat permanezca receptiva. Consolidar tipos de datos en un único motor de base de datos elimina la necesidad de coordinación a nivel de aplicación entre múltiples sistemas, reduciendo la latencia y el riesgo de inconsistencia de datos. Estos patrones permiten a los desarrolladores construir sistemas de agentes robustos y escalables utilizando principios de ingeniería establecidos en lugar de depender de soluciones personalizadas frágiles.
Qué puedes hacer
- Desacoplar el estado del cómputo: Mueve el historial de conversaciones y la memoria del agente fuera de la memoria de la aplicación y hacia un sistema de almacenamiento compartido y duradero accesible por todas las réplicas.
- Implementar compartimentos estancos: Usa semáforos o controles de concurrencia similares para separar los pools de recursos para diferentes tipos de solicitudes, como completaciones de chat y ejecuciones de herramientas.
- Converger tu capa de datos: Evalúa bases de datos que soporten datos relacionales, JSON y vectoriales en un solo motor para simplificar la gestión de transacciones y reducir los riesgos de consistencia.
- Adoptar protocolos estándar: Usa APIs compatibles con OpenAI como capa de transporte para aprovechar SDKs y herramientas existentes, manteniendo el protocolo simple y estable.
- Probar la pérdida de contexto: Ejecuta benchmarks que distribuyan solicitudes entre múltiples réplicas para identificar y corregir problemas silenciosos de pérdida de contexto antes del despliegue en producción.
- Usar concurrencia optimista: Implementa columnas de versión y bloqueo a nivel de base de datos para manejar de forma segura las actualizaciones concurrentes al mismo estado de conversación.



