BookinglyTech News
Software

Rust llega a la capa de funciones con FFI para acelerar monolitos

El ingeniero de Discord Lily Mara expone cómo introducir Rust gradualmente en código existente, usando el C FFI para mejorar rendimiento sin rehacer todo el sistema.

2 min de lecturaInfoQ0 vistas

El reto de las reescrituras completas

Lily Mara, staff engineer en Discord, recuerda que la idea de reescribir un monolito en Rust suele ser atractiva pero se convierte en un proyecto propenso a retrasos y errores. Los lenguajes dinámicos como Python, Ruby o Node son más lentos en líneas de código, pero una reescritura total suele introducir bugs y olvidar lógica que el sistema legado ya había solucionado.

FFI refactor: el salto a nivel de función

La propuesta de Mara es más fina: elegir una función crítica, reescribirla en Rust y conectarla al resto de la aplicación a través del C Foreign Function Interface. El C es el “lengua franca” de la interoperabilidad, por lo que cualquier lenguaje moderno puede invocar una función C. Así, un fragmento de Python puede delegar la operación en Rust sin cambiar la arquitectura de microservicios.

Ventajas y costes

  • Rendimiento: Rust compila a código máquina sin recolector de basura, lo que reduce la latencia en funciones numéricas o de procesamiento intensivo.
  • Compatibilidad: Al usar C FFI, el resto de la pila permanece intacto; no se necesita reescribir módulos enteros ni cambiar la base de datos.
  • Complejidad de despliegue: Incluir binarios nativos en entornos de Python aumenta la complejidad de empaquetado y despliegue; se deben gestionar dependencias compartidas y versiones de compilador.
  • Mantenimiento: Los equipos deben mantener código en dos lenguajes y garantizar que los bindings se actualicen cuando cambie el ABI.

Contexto práctico

Mara menciona ejemplos históricos: NumPy y SciPy usan Fortran, TensorFlow usa C++, OpenSSL es C con bindings en casi cualquier lenguaje. Estas dependencias son el estándar de facto y demuestran que la técnica no es nueva, sino una evolución de una práctica estable.

Por qué importa

Para equipos que enfrentan cuellos de botella de rendimiento en funciones críticas pero no quieren rehacer todo el monolito, el FFI refactor ofrece un camino pragmático. Permite introducir Rust sin reescribir el sistema, manteniendo la compatibilidad con la infraestructura existente. La decisión de hacerlo implica sopesar la ganancia de velocidad contra la complejidad de despliegue y mantenimiento.

Próximos pasos

Los equipos interesados deben evaluar la latencia actual de las funciones objetivo, el esfuerzo de integración y la curva de aprendizaje de Rust y C FFI. Además, se recomienda establecer pruebas de rendimiento comparativas antes y después del refactor para medir el impacto real.

Presentación completa