如何在微服务的中心位置存储连接字符串



我有一个8微服务的解决方案。但是我们在8个微服务中使用相同的数据库。

到目前为止,我尝试了三种方法。

方法:1

在单个项目的appsettings.json文件中设置连接字符串,并使用IConfiguration (DI)访问它。但现在,如果有一个变化,我需要手动更改所有8个应用程序。json文件

方法:2

创建了一个包含const string连接字符串的共享类库,并在所有8个项目中引用它。这对我来说似乎很好,但在每次部署时,我们都必须重新编译。

方法:3

在中央共享位置创建一个JSON文件,并在每次需要连接到数据库时使用JSON解析器读取。对我来说,这看起来很灵活,但代价是性能。

有没有更好的方法来定义&在8个微服务之间使用连接字符串,而不影响灵活性和性能,或者影响最小?

仅仅因为单个微服务今天连接到同一个DB,并不意味着它们将来会这样,这应该通过ConnectionString的配置来管理。

因此方法2不可行。

方法1可以。是的,你必须改变它8次,但多久会改变一次呢?如果你确实开始使用不同的db,那么它可能只有一次。

方法3:在这里,我建议你不要自己这样做,而是通过K8s/Helm图表使用更标准的方法。

您可以通过存储在卷上的秘密来实现这一点。或者更好的方法是通过Helm Charts Values。yaml文件。

这篇文章有点过时了(所以语法可能已经改变了),但是对于如何做这些事情给出了一个很好的想法。

https://pascalnaber.wordpress.com/2017/11/29/handling-settings-and-environment-variables-of-your-net-core-2-application-hosted-in-a-docker-container-during-development-and-on-kubernetes-helm-to-the-resque/

这取决于您的目标堆栈,您在哪里部署它。但这将是你的方法的某种变体。

a)如果你将所有微服务部署到同一组vm中,那么你可以创建一个共享的设置文件。有一个通用的配置构建器进程,它将从应用程序中读取。json, appsettings。{env}。Json,然后是新的共享设置,最后是环境变量。你可以控制共享设置的加载顺序,也就是说,你想让它们在appsettings之前加载还是在appsettings之后加载。

b)如果您在k8上部署,请将其作为秘密,然后将其加载到环境变量中。如果您有其他共享设置,您可以使用configmap,然后加载到环境变量中。

在这两个选项中,这个公共连接字符串将通过IConfiguration对象本身提供给您。因此,单个微服务不需要以不同的方式读取它们。

我们今天遵循类似的设置,因为我们在10个api中共享设置和连接字符串。共享设置本身,在VM上,我们单独部署它。因此,定期更改微服务本身不需要部署共享设置。

另外,假设稍后您的数据库需要进行微服务更改。您始终可以使用应用程序设置覆盖共享设置。{env}. Json或appsettings。Json或自定义配置映射。这就是为什么我提到,你可以控制加载设置的顺序。在我们的例子中,共享设置总是在配置构建期间首先加载。

相关内容

  • 没有找到相关文章

最新更新