微服务架构缺陷

时间:2017-05-20 10:25:34

标签: architecture microservices restful-architecture

我们正面临与微服务架构相关的性能问题。

我们说有用户和帐户管理的微服务。有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.

但复制表(用户)正在打破微服务架构的主要基础

有没有其他方法可以做到这一点或支持这种类型的过滤条件,这些条件来自不同的微服务。

2 个答案:

答案 0 :(得分:4)

您可能对使用Command Query Responsibility Segregation

感兴趣

请参阅此implementing queries that need to retrieve data owned by multiple services

您可以从this examplehttp://eventuate.io/的客户和订单示例)中汲取灵感。

答案 1 :(得分:0)

您可以避免因多种因素而导致速度变慢。 对于步骤2“ 2),然后为单个用户获取/ user / activity / {userId}”

  • 您可以在一个呼叫中发送多个用户,而不是按用户发送用户。
  • 您可以具有并行线程来同时检索多个用户块。
  • 如果您有Web界面,则可以使用分页,这确实有帮助。