Problem Statement
When a client needs data from multiple microservices, making separate calls to each service causes high latency and complex client logic. This leads to slow responses and increased network overhead, degrading user experience.
This diagram shows the client sending one request to the aggregator service, which then calls multiple microservices and combines their responses before replying to the client.
### Before: Client calls microservices separately import requests def get_user_profile(user_id): user = requests.get(f'http://user-service/users/{user_id}').json() orders = requests.get(f'http://order-service/orders?user={user_id}').json() return {'user': user, 'orders': orders} ### After: Client calls aggregator once import requests def get_user_profile(user_id): response = requests.get(f'http://aggregator-service/profile/{user_id}') return response.json() # Aggregator service example from flask import Flask, jsonify import requests import concurrent.futures app = Flask(__name__) @app.route('/profile/<user_id>') def profile(user_id): with concurrent.futures.ThreadPoolExecutor() as executor: user_future = executor.submit(requests.get, f'http://user-service/users/{user_id}') orders_future = executor.submit(requests.get, f'http://order-service/orders?user={user_id}') user = user_future.result().json() orders = orders_future.result().json() return jsonify({'user': user, 'orders': orders})