Plataforma 3D de modelos estructurales
Una plataforma web para una consultora de ingeniería estructural que parsea y renderiza en 3D modelos JSAF, incluso archivos de hasta 600 MB.
Contexto
La consultora necesitaba revisar modelos estructurales en el navegador, sin software de escritorio. Fui el arquitecto de la solución en un equipo de 5, escribí la mayor parte del backend y lideré los refactors grandes de arquitectura. Desde octubre de 2026 me encargo del mantenimiento.
El problema
Los modelos llegan como archivos JSAF de hasta 600 MB. Parsearlos dentro del request daba timeout, y renderizarlos sin cuidado congelaba el navegador y lo dejaba sin memoria.
Arquitectura
Seguí el flujo a medida que scrolleás. Cada paso muestra qué hace.
- SubidaEl navegador sube el archivo del modelo directamente.
- AlmacenamientoLos archivos se guardan una vez y nunca bloquean la API.
- MensajeUn mensaje le pasa el trabajo a un worker.
- Worker de parseoParsea el modelo JSAF fuera del request.
- Datos del modeloElementos parseados y metadatos, listos para consultar.
- APILe sirve el modelo al navegador en partes.
- Web WorkersLa geometría se arma fuera del hilo principal y se carga de a partes.
- Render 3DEl ingeniero recorre la estructura en el navegador.
GCP · Cloud Storage · Pub/Sub · Cloud SQL — todo en Terraform
resource "google_storage_bucket" "models" {
name = "structural-models"
}
resource "google_pubsub_topic" "parse" {
name = "model-parse"
}
resource "google_sql_database_instance" "main" {
database_version = "POSTGRES_16"
}Lo que hice
- Diseñé una arquitectura server-worker: las subidas van a Cloud Storage y un mensaje de Pub/Sub dispara un worker que parsea.
- Escribí la mayor parte del backend en ASP.NET Core y lideré los refactors cuando cambió la arquitectura.
- Optimicé el render en Three.js con Web Workers, lazy loading y manejo cuidadoso de memoria.
- Definí la infraestructura en GCP con Terraform: Cloud Storage, Cloud SQL y Pub/Sub.
- Llevé las sesiones de discovery, las demos y los ciclos de feedback con el cliente.
Decisiones clave
Nunca parsear dentro del request
La API solo recibe la subida y responde. Un mensaje de Pub/Sub le pasa el trabajo a un worker, así que un archivo de 600 MB no puede dar timeout ni frenar a otros usuarios.
Dejar libre el hilo principal
La geometría se prepara en Web Workers y se carga de a partes, así que la página sigue respondiendo mientras el modelo va llegando.
Terraform para una plataforma que es del cliente
El cliente es dueño de su infraestructura como código. Cualquier ingeniero puede recrearla o cambiarla, y eso hizo simple el pase a mantenimiento.
Resultados
- 600 MBmodelos procesados en ~50 s
- 5ingenieros en el equipo, con la arquitectura a mi cargo
- En vivoen producción y en crecimiento