如何在微服务之间共享代码?

How to share code between micro services?

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

这四个微服务应该共用一个DB代码,我是不是要把DB代码做成git的一个子模块,在每个微服务中使用?

是否违反微服务原则?

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

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

我认为更好的方法是使其成为一个独立的微服务。

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

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