🐘 Caso 08 - PHP 8.3 con extracción compatible#
Implementación operativa del caso 08 para contrastar una extracción big bang contra una ruta segura con proxy, contratos y cutover por consumidor.
⬅️ Caso 08 · ⚖️ Comparativa de los 7 stacks · 🐘 Perfil de PHP · 🧬 Todos los perfiles
🎯 Qué resuelve#
Modela la separación de un módulo crítico de pricing:
pricing-bigbangintenta moverlo de una vez y expone incompatibilidades;pricing-compatibleconserva el contrato público y migra consumidores gradualmente.
💻 Interfaz Visual Nativa#
Al abrir la ruta raíz en tu navegador (Accept: text/html), este caso inyecta automáticamente un Dashboard visual interactivo renderizado en Vanilla JS/CSS. Esto permite observar las métricas y efectos simulados en tiempo real sin perder la capacidad de responder a consultas JSON de CLI o Postman.
💼 Por qué importa#
Este caso deja visible un patrón muy frecuente: el riesgo de una extracción no está solo en el código nuevo, sino en romper compatibilidad operativa mientras el sistema sigue vendiendo.
🔬 Análisis Técnico de la Implementación (PHP)#
Este caso implementa cruces de contratos mediante manipulaciones de arreglos asociativos y excepciones en vivo, emulando la comunicación asimétrica entre código arcaico y módulos extraídos.
- Big-Bang (
legacy): Representa un redireccionamiento crudo sin capa de compatibilidad. Si un cliente envía un payload con llaves legadas (ej:cost_usden lugar de la nueva claveprice), el motor moderno de PHP dispara un Warning de "Undefined Array Key" al intentar acceder al índice inexistente. El sistema detecta esta colisión y lanza unInvalidArgumentException, simulando una ruptura total del contrato que detiene la operación de precios y bloquea el checkout. - Extracción Compatible (
strangler / proxy): Implementa el Adapter Pattern a nivel de estructura de datos. Antes de procesar la lógica de negocio, un interceptor normaliza el input utilizando el operador de fusión de nulidad (??):$data['price'] = $data['price'] ?? $data['cost_usd'] ?? $data['legacy_val']. Este algoritmo de mapeo elástico permite que PHP absorba las asimetrías de los esquemas sin romper la firma de la función, asegurando unstatus_code 200y permitiendo una migración de clientes ("Shadow Traffic" style) sin afectar la disponibilidad del servicio.
🧱 Servicio#
app-> API PHP 8.3 con consumidores sensibles, proxy de compatibilidad y estado de cutover persistido localmente.
🚀 Arranque#
docker compose -f compose.yml up -d --buildComo consumir (dos opciones)#
Hub PHP (recomendado, 8100 en compose.root.yml): este caso queda servido en http://localhost:8100/08/... junto a los otros 11 casos.
Modo aislado (818 en este compose.yml): levanta solo este caso, util cuando la medicion necesita procesar limpio (sin otros casos compartiendo runtime).
🔎 Endpoints#
curl http://localhost:8100/08/
curl http://localhost:8100/08/health
curl "http://localhost:8100/08/pricing-bigbang?scenario=rule_drift&consumer=checkout"
curl "http://localhost:8100/08/pricing-compatible?scenario=rule_drift&consumer=checkout"
curl "http://localhost:8100/08/cutover/advance?consumer=checkout"
curl http://localhost:8100/08/extraction/state
curl http://localhost:8100/08/flows?limit=10
curl http://localhost:8100/08/diagnostics/summary
curl http://localhost:8100/08/metrics
curl http://localhost:8100/08/metrics-prometheus
curl http://localhost:8100/08/reset-lab🧪 Escenarios útiles#
rule_drift-> muestra contratos que cambian entre consumidores.shared_write-> hace visible el peligro de estados compartidos.peak_sale-> enfatiza por qué no conviene cortar compatibilidad en una ventana crítica.partner_contract-> muestra integración externa dependiente del contrato legado.
🧭 Qué observar#
- cuánto blast radius deja cada estrategia;
- si suben los contract tests y el progreso por consumidor;
- cuándo el proxy de compatibilidad absorbe el riesgo;
- cómo cambia el riesgo de corte entre una extracción total y una gradual.
⚖️ Nota de honestidad#
No representa un rollout real con múltiples servicios ni feature flags distribuidos. Sí reproduce lo importante aquí: contratos, compatibilidad, cutover progresivo y protección operacional del cambio.