【问题标题】:How to share code between micro services?如何在微服务之间共享代码?
【发布时间】:2016-03-28 04:32:57
【问题描述】:

例如,我有一个项目有 4 个微服务:client-web、admin-web、client-api、admin-api。

这四个微服务应该共享一个DB代码,我应该把DB代码作为git的子模块,在每个微服务中使用吗?

是否违反微服务原则?

【问题讨论】:

  • 这可能取决于使用的语言,哪种解决方案效果最好,但它仍然可能非常基于意见。但是我看不出共享一段代码会违反微服务原则。毕竟,他们每个人都需要连接到数据库,那你为什么要复制代码呢?
  • 通过创建库?
  • 这 4 个微服务的名字看起来更像是客户端服务器架构,而不是微服务。通常,每个微服务都设计有自己的实体/数据库访问代码。也许您拥有的数据库代码本身就是一个微服务?

标签: architecture microservices


【解决方案1】:
  1. 创建一个库。
  2. 使用语义版本控制对库进行版本控制,并使用环境的包管理功能创建包(例如,如果您使用的是 .NET,则使用 Nuget)。
  3. 将包作为依赖项包含在微服务中。

【讨论】:

    【解决方案2】:

    我认为你应该小心创建一个共享库并将其包含在你的微服务中,因为它可以给你一个耦合点,这意味着如果你必须对库进行更改,你可能必须更改所有服务,然后你就失去了这种架构的好处之一——部署小型服务而不部署整个应用程序。

    我认为更好的方法是让它自己成为微服务。

    【讨论】:

    • "如果您必须对库进行更改,则可能必须更改所有服务",是的,抱歉,但不,这就是为什么它被称为“共享”库,而不是“静态”的原因;)
    • 我认为拥有“持久性”微服务总是一个坏主意。这是一种微服务反模式,会导致微服务单体应用。
    【解决方案3】:

    微服务应该拥有自己的数据库逻辑。因此,对于您的数据库中的每一个桃子,您都应该有一个与之通信的微服务。横切关注点应该在它们自己的服务中调用其他关注点,或者在最能代表功能的服务中。

    【讨论】:

      【解决方案4】:

      您可以为数据库创建一个 http 接口,该接口可以使用 REST API 与其他微服务进行通信。然后您可以检查用户权限以了解哪个客户端可以访问给定资源。

      【讨论】:

        猜你喜欢
        • 2016-11-05
        • 2019-07-22
        • 2017-09-19
        • 2017-05-27
        • 2016-07-30
        • 1970-01-01
        • 2019-08-19
        • 2017-09-26
        • 2017-05-29
        相关资源
        最近更新 更多