我们正面临与微服务架构相关的性能问题。
我们说有用户和帐户管理的微服务。有api的像
GET /users/{id}
GET /users (arrount 6 million users)
GET /accounts/{accountId}
GET /accounts
and Other Operations on user and account
我们还有其他微服务跟踪用户活动,并列出用户在上次登录时所做的所有活动。
GET /user/activity/{userId} (on an average 1000 to 10000 records)
我们有销售和营销团队的基础,根据搜索条件显示个人用户活动和用户信息以及帐户信息,
let's say search criteria is like : get all user activies who are located in colombia
Algorithm :
1)Get /users ? location = colombia
2)then for individual user Get /user/activity/{userId}
就像加入来自不同数据库的两个表一样。
速度很慢,造成很多性能问题。
我通过一项工作复制其他微服务中的用户表,确保它是最新的并且只使用一个api
GET /user/activities?location=colombia.
但复制表(用户)正在打破微服务架构的主要基础
有没有其他方法可以做到这一点或支持这种类型的过滤条件,这些条件来自不同的微服务。
答案 0 :(得分:4)
您可能对使用Command Query Responsibility Segregation
请参阅此implementing queries that need to retrieve data owned by multiple services。
您可以从this example(http://eventuate.io/的客户和订单示例)中汲取灵感。
答案 1 :(得分:0)
您可以避免因多种因素而导致速度变慢。 对于步骤2“ 2),然后为单个用户获取/ user / activity / {userId}”