"SKYLOGIQ" The moon can't shine on its own.
práctica principal

Migración a Rust

Los sistemas en cuyo lenguaje original ya no puede confiar, trasladados a Rust mientras siguen funcionando.

el mandato

El mandato

En febrero de 2024 la Oficina del Director Nacional de Ciberseguridad de la Casa Blanca pidió al sector tecnológico que adoptara lenguajes con seguridad de memoria, siguiendo las directrices de CISA, la NSA y agencias aliadas. Los marcos de contratación pública y de infraestructuras críticas empiezan a exigir hojas de ruta de seguridad de memoria. La dirección está decidida. La pregunta para toda organización con sistemas importantes en PHP, C++, Java, Node o Python es si la migración se planifica según su propio calendario o se le impone según el de otros.

cero tiempo de inactividad

Cómo migramos sin tiempo de inactividad

gatewayun solo interruptor, reversible en segundos
legacy::servicePHP · Node · Java · C++ · Python
rust::servicetráfico replicado
parity::verifyantiguo == nuevo con tráfico de producción
cut_over()después, retirada
  1. Mapa del sistema.

    Cada servicio, dependencia, flujo de datos y consumidor, documentado. La mayoría de las organizaciones descubren sistemas que habían olvidado que tenían.

  2. Secuenciación.

    Servicios ordenados por riesgo, valor y acoplamiento. La primera migración se elige para demostrar el método, no para hacer una proeza.

  3. Patrón strangler.

    Nuevos servicios en Rust situados junto a los antiguos, que reciben tráfico replicado y producen resultados que se comparan automáticamente.

  4. Verificación de paridad.

    La migración solo avanza cuando el sistema antiguo y el nuevo coinciden con tráfico real de producción, durante el tiempo que haga falta.

  5. Transición, un servicio cada vez.

    El tráfico pasa a Rust detrás de un interruptor que se puede revertir en segundos.

  6. Retirada y traspaso.

    El servicio antiguo se retira, la documentación está completa y su equipo ha recibido formación sobre el nuevo.

origen → destino

Qué migra bien

  • Monolitos PHP (Laravel, Symfony, heredados) convertidos en servicios Rust detrás de un API gateway
  • Servicios Node.js con problemas de rendimiento o de memoria
  • Servicios Java y C# en los que los costes de licencias, memoria o latencia se han vuelto estructurales
  • Componentes en C y C++ con un historial de incidentes de seguridad de memoria
  • Pipelines de datos e inferencia en Python en los que el propio Python es el cuello de botella
honestidad

Lo que decimos a los clientes con honestidad

No todo debe migrarse.

Una herramienta de informes que usan cuatro personas en finanzas se queda en PHP. Una ruta de pagos que gestiona sus ingresos, no. El mapa del sistema que elaboramos en la segunda semana es donde se tiene esa conversación, y es el documento más valioso del proyecto.

Los sistemas que hacen funcionar su negocio deberían construirlos personas que ya han llevado sistemas como esos.

The moon can't shine on its own.