【发布时间】:2018-05-13 21:46:33
【问题描述】:
我所在的公司正在考虑迁移到微服务/kubernetes 架构,但在研究中遇到了一些障碍,所以我想我会在这里介绍它们。
对于典型的单体数据库,许多查询从其他源/表连接,这通常被视为不同的微服务职责(例如,客户 -> 订单)。
我现在的问题是,对于微服务,什么是最佳实践?
我找到了一些建议的方法:
1) 加入代码。本质上运行多个查询。例如:
const user = UserService.getUserById(1);
const order = OrderService.getForUser(user);
我喜欢这种方法,并且可以清楚地看到数据的来源,以及需要什么等。但这会引发额外延迟的问题。和以前一样,我可以加入这个查询并且只访问一次数据库。我现在有 2 个(或更多,取决于所需的数据)对 db 的请求。
2) 加入外部服务。构建一个单独的服务来处理查询。 - 这感觉很像拥有一个每个服务都依赖的内部 api,并且作为单点故障似乎是一种不好的做法。也许我看错了。
3) 加入mysql。将所有数据放在同一个数据库中并像以前一样查询。这具有单次访问 mysql 的好处,但是打破了微服务方法并消除了每个服务拥有数据库/模式的能力。
我个人觉得选项 1 是最通用的选项,但我很好奇多次往返所增加的延迟,以及你们如何处理这个问题。或者也许还有其他我没有看到的解决方案。
【问题讨论】:
标签: mysql microservices