Plataforma de comercio retail. Byte4Bit. GraphQL federado sobre servicios de dominio serverless.

Kasymir

Una plataforma de comercio retail construida como un gateway GraphQL federado sobre servicios de dominio independientes: catálogo, clientes, contabilidad, descuentos, importaciones, analítica y punto de venta.

Rol
Ingeniero backend
API
GraphQL federado
Runtime
Serverless
Superficies
POS, backoffice
Perfil de GitHub Índice

El problema

Una plataforma retail son muchos productos con un solo login: punto de venta, catálogo, clientes, contabilidad, descuentos, objetivos, importaciones y analítica. Cada uno tiene su propio ritmo de release y su propia idea de qué es una hora punta, y cada superficie de cliente quiere una porción distinta de todos ellos.

La respuesta fue un único gateway GraphQL federado delante de servicios de dominio que despliegan por separado. Los clientes consultan un solo esquema; detrás, cada dominio es dueño de sus datos y de su modo de fallo.

TypeScriptNestJSApollo FederationGraphQLAWS LambdaPrisma

Un esquema, muchos dueños

La federación deja que cada dominio publique su parte del grafo, así que un cambio en descuentos no significa editar un gateway que comparte todo el mundo.

Los dominios fallan por su cuenta

Un incidente en importaciones o en analítica no deja la caja registradora fuera de servicio, porque los servicios que importan en el mostrador no dependen de los que importan a fin de mes.

Varias superficies, un contrato

Punto de venta, backoffice y checkout son aplicaciones separadas leyendo el mismo esquema, así que los datos nunca pueden contradecirse entre ellas.

Decisiones y el precio que pagué por ellas

Federar el grafo en lugar de centralizarlo

Un gateway único escrito a mano se convierte en el cuello de botella en el que hace cola cada equipo. La federación mueve la propiedad del esquema al equipo dueño de los datos.

Trade-off aceptado

Los errores de composición pasan a ser un problema de despliegue, y una entidad mal modelada se siente en todo el grafo en lugar de en un solo servicio.

Serverless por dominio

La carga en retail es irregular y desigual entre dominios. Pagar por invocación y por servicio sale mejor que aprovisionar cada dominio para la peor hora del más ocupado.

Trade-off aceptado

Hay que diseñar alrededor de los cold starts en los caminos donde una cajera está esperando.