It seems like you are trying to implement micro service architecture with reliable storage as your persistence. Also, you have a scenario with service calling another service calling another service. If my previous statements are correct, you need to think about architectural direction in two specific areas
- What's persistent storage vs. cache - You can get comparable performance from Cosmos when you are accessing using Partition Key and ID directly. If you are planning to search data on Cosmos, unless you plan proper indexing, it may turn out more expensive. Also, choose your database based on how you are consuming the data. If search is your priority then may be Azure Search may be good option. Also, I do not feel comfortable using service fabric reliable storage as persistent storage, rather I look at it more like cache. In summary, look at how you are going to consume the data to determine best storage.
- Why are the hops? What is velocity of data being queries? If the data being queried is relatively static can you implement service cache to avoid those hops. May be Radis cache can help you get response if configurations are static. When we built the microservice with service fabric, we had a guideline than there should not be more than 3 hops to process any request.
You may want to look CQRS patterns . This pattern allows you to create multiple projections (views) and each view can have different role like reporting, querying (projection), searching (selection).
Thanks
Nandan Mathure