-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
What term should we use for a federated gateway / router in this specification? #17
Comments
I have thought about this a bit and it would be great to align with the graphql spec ... which does not mention any of this... rather it talks about an execution/executor.
So we could call it a distributed executor/composite executor/federated executor.... something in that line. |
Yeah, something along those lines makes sense to me. |
My issue with "router" is that routers typically just forward whole packets without looking into the payload, only the headers. They don't tend to split things up and distribute them to different locations.
My issue with "executor" is that the term suggests that this is where the backend logic execution happens, but really all we're doing is splitting up the request, delegating it, and then stitching it back together again.
The term that feels most right to me currently is "dispatcher":
Essentially, it's in charge of digesting the incoming request and figuring out which services are best placed to execute each part of the request, forwarding those on (delegating), and then reporting on/compiling the result. |
Dispatcher sounds more like a messaging system. My thinking at the moment is that we are describing an alternate executor for GraphQL that gets is execution instructions from the composite schema. But I get where you are going at. In general an implementation of this is more doing the execution planing and then delegates the execution... basically plan -> dispatch -> merge. |
Orchestrator? But then again if you think about it its really a more specialized version of what the graphql core spec describes under execution. |
"Coordinator"? |
Quite relevant, I just made this comment on the other issue discussing what we call the tl;dr What about |
We did a brainstorm on the meeting on Feb 15 and came up with some more terms
|
My takes:
Of these, my favorites in order are Director, Gateway, Conductor. |
I still like "dispatcher" - did you discuss that today? I don't see it among those listed. "Execution distributor" is also an interesting term; it splits up the execution and distributes it to the source schemas... I like it. Other than verbosity, I like it quite a lot - nice one 👍 I think we should avoid "resolver" in order to avoid confusion with GraphQL field resolvers. Director and conductor are okay, I quite like them, but they generally are "self driven" (there's not really an "input", though arguably the piece of music itself is the input for a conductor) whereas a dispatcher performs a similar role but is driven by external input (request comes in, dispatcher splits it up and delegates it to the relevant parties and reports back). |
Ah, we must’ve missed Dispatcher. That’s a good one, I like it. |
There are similar concepts in other areas of CS, i'll just add the following to the discussion to think about: Coordinator - Distributed Transactions: Orechstrator - Saga Pattern (Query) Executor * - DBMS (Query) Processor * - DBMS
*: Query is definitely wrong in our context, hence the brackets |
I use the term distributed engine for the gateway core in Atlassian. Because fundamentally it is fully spec conform engine, which does its job by distributing the execution. |
Thats why I though to call it distributed executor as we talk about the executor in the core spec. |
The draft specification in this repository currently refers to a gateway configuration for what we call a supergraph schema at Apollo. That opens up the question of how we should refer to the component that is responsible for executing federated queries.
At Apollo, we've started referring to this component as a graph router because we feel that better reflects the fact that it intelligently routes requests to appropriate subgraph servers as needed. But perhaps what is needed here is a more neutral term that describes its role within the architecture.
The text was updated successfully, but these errors were encountered: