Go · tiempo real
Un backend de restaurante sin ORM
Salón y cocina sobre el mismo estado de comanda, con SQL escrito a mano y sin sondeo.
- Periodo
- 2025 —
- Rol
- Diseño e implementación
- Stack
- Go · Gin · sqlx · PostgreSQL · PL/pgSQL · WebSockets · React 19 · Vite
01 Contexto
Mozaico lleva el salón, la cocina y la caja de un restaurante. Una comanda cambia de estado muchas veces en pocos minutos —tomada, lanzada, lista, servida, cobrada— y cada uno de esos cambios tiene que aparecer en una pantalla distinta, en otra sala, sin que nadie recargue nada.
02 Problema
El patrón por defecto —un ORM más sondeo— falla por las dos puntas. El ORM esconde el coste de la consulta justo donde el coste importa, y sondear cada pocos segundos multiplica la carga sin mejorar la rapidez con la que la cocina se entera.
03 Restricciones
- El estado de una comanda no puede quedar a medias. Entra entero o no entra.
- Las pantallas de cocina son dispositivos modestos, y a menudo sobre wifi compartido.
- Salón y cocina no pueden divergir ni un segundo: eso es un plato equivocado.
04 Decisiones
01
sqlx sobre SQL escrito a mano
El SQL vive junto a la consulta que sirve, así que lo que se lee es lo que se ejecuta. En los caminos calientes esa es la diferencia entre afinar una consulta y adivinar qué generó el ORM.
DescartadoUn ORM completo. Regala velocidad en la primera pantalla CRUD y la cobra en cada consulta que importa después.
02
PL/pgSQL para lo que no se puede partir
Las operaciones que tienen que ser atómicas viven como funciones en PostgreSQL, junto a los datos, en vez de como una transacción cosida en el código de la aplicación.
03
WebSockets en vez de sondeo
El estado viaja a las pantallas de salón y cocina por gorilla/websocket, así que un plato marcado como listo aparece donde hace falta sin recargar y sin sondear.
DescartadoSondear cada pocos segundos: más carga, más batería en las tabletas, y aun así un retraso que la cocina nota.
- Cambia la comandatableta de salón
- Go · sqlxSQL escrito a mano
- PL/pgSQLatómico, junto al dato
- WebSocketcocina lo ve, sin sondeo
05 Resultado
- Es el repositorio con más commits que he escrito.
- Un plato marcado como listo aparece donde hace falta sin recargar y sin sondear.
- Aquí no hay cifras de latencia a propósito: el sistema está en producción pero no instrumentado para medirla, y una cifra que no puedo explicar cómo medí es peor que ninguna cifra.
06 Prueba
Todo lo anterior se puede ver aquí: mozaicopro.djasoft.net.pe ↗