我将为我的Datawarehouse应用程序应用微服务.应用中有4个主要的微服务:
1)数据服务:将外部数据源导入/导出到DWH,并从DWH查询数据.
2)分析服务:用于UI上的图表可视化
3)机器学习:用于推荐系统
4)报告:报告生成
图如下:
每个服务都有自己的DB,它们通过TCP和Thift序列化直接相互通信.这里的问题是数据服务遭受来自其他服务的高负载,并且可以成为应用程序的SPOF.DWH中的数据也很大(可能高达数百个记录).在这种情况下如何避免数据服务的瓶颈?或者我如何定义一个适当的有界上下文来避免瓶颈?
你可以考虑一下
Data Service成几个微服务的基础上,一些业务逻辑;Data Service(如果需要)以支持多个服务实例.然后使用负载均衡器在这些实例之间拆分请求.负载均衡器是充当反向代理并在多个服务器之间分配网络或应用程序流量的设备.负载平衡器用于增加容量(并发用户)和应用程序的可靠性.
关于"一个数据库,多个服务":
每个微服务都需要有自己的数据存储,否则,你没有分解.如果我们谈论关系数据库,那么可以使用以下模式之一来实现:
如果您的服务使用来自Data Warehouse数据库的单独表并且Data Service仅提供对数据库的访问层而没有任何其他处理逻辑,那么您可以删除Data Service数据访问逻辑并将其移动到相应的服务.但另一方面考虑 - 现在你只有一个地方(Data Service),它知道如何访问和操纵Data Warehouse微服务是什么.