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.
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.
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.