避免微服务中的瓶颈

时间:2017-02-28 00:51:28

标签: microservices

我将在我的Datawarehouse应用程序中应用微服务。申请中有4个主要的微服务:

1)数据服务:将外部数据源导入/导出到DWH,并从DWH查询数据。

2)Analytics Service:用于UI上的图表可视化

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

4)报告:报告生成

图表如下:

enter image description here

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

1 个答案:

答案 0 :(得分:5)

您可以考虑

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

负载均衡器是一种充当反向代理并在多个服务器之间分配网络或应用程序流量的设备。负载平衡器用于增加容量(并发用户)和应用程序的可靠性。

关于"一个数据库,多个服务":

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

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

如果使用Data Warehouse数据库和Data Service中的单独表的服务仅提供数据库访问层而没有任何其他处理逻辑,那么是的,您可以删除Data Service并移动数据访问逻辑相应的服务。但另一方面考虑一下 - 现在你只有一个地方(Data Service),它知道如何使用Data Warehouse来访问和操纵微服务。