如何在微服务之间共享代码?
How to share code between micro services?
例如,我有一个项目有 4 个微服务:client-web、admin-web、client-api、admin-api.
这四个微服务应该共用一个DB代码,我是不是要把DB代码做成git的一个子模块,在每个微服务中使用?
是否违反微服务原则?
- 创建一个库。
- 使用语义版本控制对库进行版本控制,并使用您环境的包管理功能创建包(例如,如果您使用的是 .NET,则使用 Nuget)。
- 将包作为依赖项包含在微服务中。
我认为你应该小心制作一个共享库并将它包含在你的微服务中,因为它可以给你一个耦合点,这意味着如果你必须对库进行更改,你可能必须更改所有你的服务,然后你失去了这种架构的好处之一——部署小服务而不部署整个应用程序。
我认为更好的方法是使其成为一个独立的微服务。
微服务应该拥有自己的数据库逻辑。因此,对于您的数据库的每个桃子,您都应该有一个与之通信的微服务。横切关注点应该在调用其他服务的自己的服务中,或者在最能代表功能的服务中。
您可以为数据库创建一个 http 接口,它可以使用 REST API 与其他微服务进行通信。然后您可以检查用户权限以了解哪个客户端可以访问给定资源。
例如,我有一个项目有 4 个微服务:client-web、admin-web、client-api、admin-api.
这四个微服务应该共用一个DB代码,我是不是要把DB代码做成git的一个子模块,在每个微服务中使用?
是否违反微服务原则?
- 创建一个库。
- 使用语义版本控制对库进行版本控制,并使用您环境的包管理功能创建包(例如,如果您使用的是 .NET,则使用 Nuget)。
- 将包作为依赖项包含在微服务中。
我认为你应该小心制作一个共享库并将它包含在你的微服务中,因为它可以给你一个耦合点,这意味着如果你必须对库进行更改,你可能必须更改所有你的服务,然后你失去了这种架构的好处之一——部署小服务而不部署整个应用程序。
我认为更好的方法是使其成为一个独立的微服务。
微服务应该拥有自己的数据库逻辑。因此,对于您的数据库的每个桃子,您都应该有一个与之通信的微服务。横切关注点应该在调用其他服务的自己的服务中,或者在最能代表功能的服务中。
您可以为数据库创建一个 http 接口,它可以使用 REST API 与其他微服务进行通信。然后您可以检查用户权限以了解哪个客户端可以访问给定资源。