【问题标题】:One or multiple databases per Docker container每个 Docker 容器一个或多个数据库
【发布时间】:2021-08-19 15:38:01
【问题描述】:

假设我有几个不同的容器,每个容器都使用自己的数据库。在这种情况下,关于性能的最佳实践是什么?运行一个容器,比如 MySQL 服务器,其中包含所有数据库,还是每个数据库运行一个数据库服务器容器?

欢迎大家提出除表演以外的任何其他意见。

【问题讨论】:

  • 性能规则 #1 - CPU / HDD 做的工作越少,结果越快。

标签: mysql database docker


【解决方案1】:

由于 Docker 容器开销在这里并不显着且可以忽略不计,因此问题更多的是关于微服务范式中的架构。

性能确实是一个复杂的问题,没有一般的建议,但也许以下内容会对您有所帮助:

就个人而言,我怀疑在项目开始时应该尝试提前解决所有可能的性能问题(#MVP、#agile) 但是,请纠正我,但您似乎没有多少资源(一个主机?)并且希望提前节省这些资源。

好的,你现在最关心的是什么?

内存是个问题

那么在同一主机上拥有两个并发 MySQL 实例可能不是那么好(但对于不同的设置来说不是问题)

对于一台主机,我建议开始使用一个数据库容器,但创建不同的模式。 它可能涉及标准容器的额外工作 (https://forums.docker.com/t/multiple-databases-in-official-mysql-container/8324)

其他问题

我现在不会太在意,从一开始就从单独的数据库开始。 能够将您的服务与数据库横向分离是一个巨大的价值!我不想因为未来的性能问题而削弱这个设计决策。

【讨论】:

  • 我的问题既不是内存也不是性能。目前,我在 Ubuntu 14.04 服务器上为 7 个容器中的 5 个应用程序提供服务,它们的工作就像一个魅力。我想知道什么是最佳实践,因为在不久的将来我将服务 20 或 30 个应用程序(5-10 个数据库),并且可能会出现性能问题。以“正确”的方式部署应用程序可以在未来为我省去很多麻烦。我猜你所说的内存是指 RAM,因为 docker 使用的内存对于 HDD 来说是微不足道的,对吧?
  • 是的,我的意思是 RAM。这是我要看的重点。并且没有“正确”的方式可以让您对其中一种或其他方式提出异议,这取决于您对“记忆”论点的重视程度或到目前为止运行的“更清洁”更孤立的设计。
【解决方案2】:

您希望使用单个数据库服务器,最好运行一个可以附加到的外壳以进行管理,与链接容器共享一个 Unix 套接字、一个端口或两者。这意味着您可以更轻松地将数据库容器作为服务进行管理、调整性能、监控使用情况、备份卷等。

当然,在某些非标准情况下,您可能希望拥有独立的服务器,例如运行具有隔离主机资源、用户、数据库的服务器,但我确信这不应该适用于开发人员环境。

【讨论】:

  • 对不起,我是-1。 “运行具有隔离主机资源的服务器......不应该适用于开发人员环境”是非常不正确的。我使用 Docker 正是因为它隔离了我系统上的东西,而且我花更少的时间玩我老板看到的用于调试废话环境设置的活动开发部署。如果您编写的代码最终取决于使用相同的服务器怎么办?很难追踪到这一点,尤其是在每次临时调试更改之间必须等待 CI/CD 时。
  • 如果你仍然在你的开发机器上一起运行所有东西,并且服务器一起运行所有东西几年,然后你的老板决定你需要为 Wordpress 网站拆分托管对于两者都访问同一容器上的数据库的 API?突然间,Live Dev Server 不再工作了,如果您仍然一起运行它们,您将无法弄清楚原因。
猜你喜欢
  • 2017-06-12
  • 1970-01-01
  • 2011-02-17
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多