Absinthe + Dataloader with clustered microservices

Hi everyone!

I’m planning to develop a microservices-oriented architecture where my Kubernetes (k8s) cluster will support different nodes: an API gateway, authentication (auth), and application (app) services. These will be integrated into a unified cluster using a DNS strategy, with the potential for one or more Elixir nodes per service. The gateway will be built as a Phoenix application featuring an Absinthe GraphQL schema. For communication between the auth and app services, I’m considering using a library like Horde to facilitate calls from the gateway. This setup aims to ensure that requests requiring immediate attention are promptly handled. Additionally, data loading between nodes would leverage similar inter-node communication techniques.

The primary goal is to create a cohesive API “front” that consolidates multiple services into a single GraphQL schema, essentially creating a unified yet flexible schema. This approach will enable advanced functionalities, such as cross-service resolvers and multi-level caching, enhancing the overall efficiency and scalability of the system.

I’m curious about the feasibility of this setup and whether I might be underestimating its complexity. I’m aware of potential challenges, like process replication, but I’m not entirely clear on how these might impact my specific architecture. I have considered doing a single monolith, however this cannot happen due to the security concerns.

I dont know about the feasibility of your proposed solution. However, I would ask you to consider looking at graphql federation, it comprehensively solves the plan to have a single graphql api for a federated microservice.
Check it out here. Introduction to Apollo Federation