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

3
例如,我有一个包含4个微服务的项目:client-web、admin-web、client-api和admin-api。
这四个微服务应该共享一个DB代码,我应该将DB代码作为git的子模块,并在每个微服务中使用吗?
这是否违反了微服务原则?

这可能取决于使用的编程语言,哪种解决方案最好,但仍然可能非常基于个人观点。但我不认为分享一段代码会违反微服务原则。毕竟,它们都需要连接到数据库,那么为什么要重复编写代码呢? - GolezTrol
通过创建一个库? - jgauffin
这4个微服务按名称看起来更像客户端服务器架构,而不是微服务。通常,每个微服务都设计有自己的实体/数据库访问代码。也许你拥有的数据库代码本身就是一个微服务? - longday
4个回答

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

4

我认为你需要小心制作共享库并将其包含在你的微服务中,因为它可能会给你带来耦合点,这意味着如果你必须对库进行更改,你可能必须修改所有的服务,那么你就失去了这种架构的一个优势——部署小型服务而无需部署整个应用程序。

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


如果你必须对库进行更改,你可能不得不更改所有服务。是的,抱歉,但不,这就是为什么它被称为“共享”库,而不是“静态”的原因 ;) - nonchip
1
我认为拥有一个“持久性”微服务总是一个不好的想法。这是一种微服务反模式,会导致微服务单体化。 - Stephan L

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接