- Recientemente ha cobrado atención un enfoque híbrido que integra Go y Rust como lenguajes de extensión dentro de una arquitectura monolítica de PHP
- Antes, la combinación de microservicios en Go y un monolito en PHP 8.3 permitía lograr un equilibrio entre productividad y alto rendimiento
- Siguiendo la ley de Pareto (80% del tráfico concentrado en el 20% de las API), era indispensable optimizar los endpoints críticos; antes se respondía con caché y separación de servicios en Go, pero eso aumentaba la complejidad
- Con la evolución reciente del ecosistema de PHP, han surgido técnicas como FFI, extensiones en Rust y extensiones en Go (FrankenPHP), que permiten elevar drásticamente el rendimiento dentro del propio monolito
- Las extensiones en Rust ofrecen al mismo tiempo seguridad de memoria y velocidad, y FrankenPHP muestra mejoras de rendimiento de hasta más de 4 veces con su modo worker y extensiones basadas en Go
- Sin asumir el costo y riesgo de reescribirlo todo en Go o Rust, el enfoque de PHP híbrido permite obtener productividad y velocidad a la vez
Contexto y arquitectura previa
- Antes, se desarrollaban microservicios basados en Go (children) por separado para optimizar funciones específicas, tomando como eje una aplicación monolítica DDD (mother)
- Los microservicios en Go se encargaban de manejar tráfico de alto rendimiento, mientras que el monolito en PHP 8.3 ofrecía desarrollo rápido de features y confiabilidad en el despliegue en un entorno con un equipo backend pequeño
- Esta estructura ofrecía un punto de equilibrio para asegurar velocidad, estabilidad y productividad
Cuellos de botella de rendimiento y formas previas de responder
- Con frecuencia se observa el principio de Pareto, donde el 80% del tráfico se concentra en el 20% de los endpoints de API
- Para ese 20% donde el rendimiento es más importante, se adoptaban distintos métodos: escribir código optimizado, agregar una capa de caché o separar microservicios en Go
- Sin embargo, había límites en términos de complejidad y carga operativa
Opciones híbridas en el ecosistema moderno de PHP
- En tiempos recientes han aumentado las tecnologías para mejorar directamente el rendimiento dentro del monolito de PHP
-
1. FFI (Foreign Function Interface)
- La funcionalidad FFI de PHP permite llamar código C directamente desde PHP
- Incluso la lógica a nivel de sistema o crítica para el rendimiento puede implementarse dentro del proyecto PHP
- Aun así, se recomienda usarlo solo en situaciones adecuadas, considerando el costo del cambio de contexto
-
2. Extensiones basadas en Rust
- Es posible desarrollar extensiones de PHP con Rust (o Zig)
- Al descargar las áreas de alta carga a extensiones en Rust, que ofrecen seguridad de memoria y rendimiento compilado, es posible asegurar tanto confiabilidad como alta velocidad
-
3. Extensiones basadas en Go: FrankenPHP
- Tras migrar recientemente a FrankenPHP y ejecutarlo en worker mode, se confirmó un rendimiento más de 4 veces más rápido que antes
- En una versión reciente también se hizo posible escribir extensiones de PHP en Go
- Con ello, se puede aprovechar el rendimiento de API de Go directamente dentro del monolito PHP y combinar productividad y velocidad sin dividir el sistema por lenguaje
Por qué no hacer una migración completa a Go o Rust
- El costo de una reescritura total y el riesgo asociado son altos
- Cambiar por completo una aplicación ya grande y estable a Go o Rust implica mucho riesgo y consumo de recursos
- PHP todavía conserva fortalezas propias
- En la mayoría de los trabajos, el desarrollo rápido en PHP, su ecosistema amigable y una velocidad suficientemente buena siguen siendo competitivos
- Si solo las áreas que realmente necesitan el límite máximo de rendimiento se configuran de forma híbrida con Go o Rust, se puede eliminar la necesidad de una migración completa
Conclusión: el valor del PHP híbrido
- El ecosistema moderno de PHP ofrece tanto alta productividad de desarrollo como opciones de integración con extensiones de alto rendimiento (C, Rust, Go)
- Con esta estructura híbrida es posible asegurar tanto velocidad como productividad
- Se plantea un nuevo paradigma de arquitectura que mantiene el desarrollo centrado en PHP y permite extender selectivamente con otros lenguajes cuando sea necesario
Aún no hay comentarios.