【发布时间】:2017-01-24 00:28:22
【问题描述】:
在我们当前的系统中,我们正在将过去是单个单体应用程序的多个服务分割成独立的服务。
我们在分析方面有一个非常标准的架构(类似于 lambda):
- 解析 HTTP 请求并将其推送到流的前端服务。
- 一种消费者服务,可为每种事件构建汇总并直接调用数据库(主要是出于性能原因)。
- 读取每个汇总表并返回有意义数据的报告服务
- 一种数据管理服务,每 N 小时运行一次批处理作业,读取数据并对其进行采样、删除无用的行和短期数据/报告等。
由于消费者和报告服务使用相同的表,因此我们打破了有界上下文并且我们在此处遵循反模式,因为每次我们需要进行架构更改时,我们都需要部署消费者(服务创建数据)和报告(读取数据的服务)“同时”。然后我们可能还需要部署策展服务。
我能够想出遵循有界上下文规则的唯一方法是在报告服务上公开一个方法,以根据消费者调用参数构建汇总。策展服务也是如此,在报告服务中公开了策展方法。将这种“报告服务”转变为某种上帝服务。
此解决方案的巨大缺点是无法预测报告的延迟,因为同一个机器可能会执行批处理作业,创建大量汇总并计算报告,因为该服务将承担多项职责。
有没有办法将这三个服务(消费者、报告、管理)构建为松散耦合且不直接依赖于它们之间的数据库集成?
【问题讨论】:
标签: architecture microservices