In this Microsoft's article, they say that one microservice should never call another microservice for joining data. Its understandable - it adds autonomousment. Instead, it should propagate the origin data using pub/sub message broker - Kafka for example, so the data will be kept, partially, ahead of time, in both microservices.
Lets say that we are talking about Orders microservice which is reliable on data comes from Users microservice in the scope of this question.
This architectural approach leads to big issues which I don't understand how to solve:
How to sync changes in user entity which is partially replicated to the Orders microservice's DB? And even more complicated - when not all of the modifications are relevant, but others are: if user changes his first name, this update doesn't relevant for the Orders service, since it doesn't make a use with the name of the user. However, if user upgraded his permissions, it is relevant for the Orders service to perform its logic.
Say our product wants a new feature that when creating order we will ensure that a given user has some specific privileges. These privileges array of objects were not replicated from first of all to the users collection resides in the Order service - we should do a huge collscan in order to populate this specific part of data. In huge data set that can be impossible.
A new microservice has launched. How does it gonna to copy all of the users to its own DB? (related to question 2.)