【发布时间】:2017-10-20 10:50:02
【问题描述】:
我们正面临与微服务架构相关的性能问题。
假设有用于用户和帐户管理的微服务。有 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.
但是复制一个表(用户)正在破坏微服务架构的主要基础
有没有其他方法可以做到这一点或支持这种类型的过滤条件,它可以连接来自不同微服务的表。
【问题讨论】:
-
你为什么不增加你的第二个电话?意思是一次性传递您认为相关的所有用户 ID?你也考虑过实现分页机制吗?
-
@OswinNoetzelmann 感谢您指出这一点。我们已经进行了分页。但是在这些情况下,我们计划通过发送电子邮件链接进行下载,然后通过搜索条件下载诸如 csv 下载之类的操作。有没有其他方法可以处理这种需要加入来自多个数据源的数据的场景。在我的问题中,我采用了简单的场景。但是,有很多复杂的场景在分页也无济于事。
-
如果您最终会遇到很多迫使您加入来自多个服务的数据的用例,您应该重新考虑您的服务边界。很难找到正确的界限,但一般来说,您需要代表自包含业务用例而不与实体相关的服务(例如,您不想要“用户服务”、“产品服务”等) .请阅读:martinfowler.com/articles/microservices.html
标签: architecture microservices restful-architecture