The composer fans out. For a profile page it might call the User Service, the Order Service, and the Billing Service. The important detail is to fire these calls in parallel, not one after another. If each call takes 100ms, sequential calls cost 300ms while parallel calls cost about 100ms, the time of the slowest one.
Once the responses arrive, the composer maps each one onto a field of the combined object and serializes the result. It holds no database of its own and stores no state between requests, which is what lets you run several copies behind a load balancer and scale them freely.
Every outgoing call needs a timeout and a circuit breaker. A common rule is to set the composer's overall deadline to 60 to 70 percent of the client's timeout. That leaves room for serialization and network transit so the client does not give up before the composer can reply.
Two failure modes dominate. A partial failure is when one downstream is slow or down; for a dashboard the composer should return the data it has and mark the missing piece, since a page with two of three panels beats a 500 error. An N+1 amplification is when the composer fetches a list of 20 items and then makes 20 follow-up calls; the fix is a batch API such as GET /users?ids=1,2,3 or a batching layer like DataLoader.