【问题标题】:Migrating to Microservices - mysql迁移到微服务 - mysql
【发布时间】: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


    【解决方案1】:

    我不会太担心延迟,因为所有调用都是异步的。

    微服务都是关于选项的,有选择性的:可扩展性、健壮性/反脆弱性、部署等。你不能让整个系统变得健壮但是你可以做一些(重要的部分)。

    我将专注于域模型/边界上下文的建模,尝试获得 Single 责任原则是对的,希望能帮助你避免功能复制,死星依赖。

    Very basic µService Architecture

    阅读:

    Building Microservices

    Domain-Driven Design: Tackling Complexity in the Heart of Software

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2019-11-06
      • 2016-09-09
      • 2018-01-06
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多