避免微服务中的瓶颈

Avoid bottlenecks in microservices

我要为我的 Datawarehouse 应用程序应用微服务。应用程序中有 4 个主要微服务:

1) 数据服务:Import/Export DWH 的外部数据源和来自 DWH 的查询数据。

2) 分析服务:用于 UI

上的图表可视化

3) 机器学习:用于推荐系统

4) 报告:用于生成报告

示意图如下:

每个服务都有自己的数据库,它们通过 TCP 和 Thift 序列化直接相互通信。这里的问题是数据服务承受来自其他服务的高负载,并可能成为应用程序的 SPOF。 DWH 中的数据也很大(可能高达百亿条记录)。在这种情况下如何避免数据服务的瓶颈?或者我如何定义一个适当的有界上下文以避免瓶颈?

你可能会想

  • 根据一些业务逻辑将 Data Service 拆分为几个微服务;
  • 修改 Data Service(如果需要)以支持多个服务实例。然后使用负载均衡器在这些实例之间拆分请求。

A load balancer is a device that acts as a reverse proxy and distributes network or application traffic across a number of servers. Load balancers are used to increase capacity (concurrent users) and reliability of applications.


关于"One database, multiple services":

每个微服务都需要有自己的数据存储,否则你没有分解。如果我们谈论的是关系数据库,那么这可以使用以下模式之一来实现:

  • 每个服务的私有表 – 每个服务拥有一组只能由该服务访问的表
  • Schema perService – 每个服务都有一个专用于该服务的数据库模式
  • 每个服务的数据库 - 每个服务都有自己的数据库。

如果您的服务使用来自 Data Warehouse 数据库的单独表并且 Data Service 仅提供数据库访问层而没有任何额外的处理逻辑,那么是的,您可以删除 Data Service 并移动数据相应服务的访问逻辑。但另一方面想想——现在你只有一个地方 (Data Service),它知道如何使用 Data Warehouse 访问和操作,这就是微服务的意义所在。