多个微服务共享同一数据库SERVER(一个容器,多个数据库)

时间:2018-12-03 13:49:36

标签: docker architecture microservices

让多个服务连接到同一数据库服务器但每个服务都有自己的数据库是否是一个好习惯。 我想拥有一个Postgres实例要比拥有自己的实例的每个服务/容器更好。

我的问题是每项服务都应:

  1. 在自己的容器中运行,并且数据库服务器实例位于同一容器中
  2. 在自己的容器中运行,而该服务的数据库在仅用于db的单独容器中运行(多个db容器/每个服务一个)
  3. 一个数据库服务器,多个数据库,一个用于所有数据库的容器以及所有服务连接该容器/数据库服务器

我知道每个服务都应该有自己的数据库,但这也意味着它们应该完全分离,甚至在服务器端也是如此。

我想我想要一个数据库服务器的原因是为了避免资源“浪费”为正在运行的数据库服务器的多个实例

我还了解拥有一台服务器将意味着所有服务都将明智地与硬件相结合

3 个答案:

答案 0 :(得分:3)

这并不重要。现代基础架构倾向于不在乎运行同一服务的多个副本的开销。由于数据库I / O通常是关键的性能点,因此您可能会发现不共享数据库更易于管理,因此可以在专用和/或更大的硬件上使数据库承受更大的负载。

(还可以考虑在专用硬件上而不是在Docker下运行数据库:它们是您必须备份的一件事,与其他数据库相比,更新它们的频率要低得多因此,它们的生命周期与一次性Docker容器根本不同。如果您使用的是提供托管数据库服务并愿意为此付费的公共云服务,那也是一个非常合理的选择。)

无论您做出什么决定,几乎都需要通过环境变量使所有参数(主机,数据库,用户名,密码)可配置。 (我看到太多在源代码中用硬编码的主机名的SO问题。)您应该能够在开发,测试和生产环境中使用不同的选项部署相同的映像,而这些环境通常会有不同的主机名。

答案 1 :(得分:0)

是的,可以在同一服务器上具有多个服务。

部署配置应以您的运营需求(成本,性能监控等)为指导,只要服务分离,您就可以根据运营需求自由移动数据

答案 2 :(得分:0)

好吧,您可以考虑以下几点:

1)如果您的服务不在乎关于数据库服务器,我的意思是说,对于服务A,它必须是MongoDB,服务B必须是SQL Server女士,等等。

然后您可以进行以下设置:

一个数据库服务器->具有多个数据库->其中,每个服务一个数据库。

2)但是,如果您发现它确实很重要,如下所述:

服务A-> Postgres

服务B-> Postgres

服务C-> SQL Server女士

服务D-> MongoDB

然后,您将拥有3个数据库服务器,其中服务A和B将共享同一个Postgres数据库服务器(包含2个数据库,一个用于服务A,一个用于服务B),服务C将具有1个女士SQL Server(包含, 1个数据库)和Service D MongoDB服务器(包含1个数据库)。

通常,在与不同的团队(负责每个服务)一起工作时,您会发现这种情况,每个团队都可以决定自己的选择。