Docker 多个独立用途:多个容器还是一个?隔离与效率?

Docker 多个独立用途:多个容器还是一个?隔离与效率?,docker,database-design,architecture,mariadb,Docker,Database Design,Architecture,Mariadb,我有一个建筑问题 假设我们有一个具有多个子系统的系统:a,B,等等。这些子系统中的每一个子系统都需要保存它们的数据,并且它们都使用MariaDB。子系统A可能需要一个名为A_db的数据库(如创建数据库…);子系统B可能需要一个名为B_db的数据库。此外,A和B 在microservice和docker之前的单一世界中,通常会设置一个中央MariaDB实例,并要求每个子系统使用它,在共享实例上使用您自己的数据库(即,a使用a_db,B使用B_db,等等) 有了docker,我认为我们还可以运行多个

我有一个建筑问题

假设我们有一个具有多个子系统的系统:
a
B
,等等。这些子系统中的每一个子系统都需要保存它们的数据,并且它们都使用
MariaDB
。子系统
A
可能需要一个名为
A_db
数据库(如
创建数据库…
);子系统
B
可能需要一个名为
B_db
的数据库。此外,
A
B

在microservice和docker之前的单一世界中,通常会设置一个中央
MariaDB
实例,并要求每个子系统使用它,在共享实例上使用您自己的
数据库(即,
a
使用
a_db
B
使用
B_db
,等等)

有了docker,我认为我们还可以运行多个mariadb容器,每个容器映射各自的存储卷(例如分别是
/data/mdb_a
/data/mdb_b

一个明显的优势是
A
B
之间完全隔离。不必担心
A
会意外地弄乱
B
的数据。这两个子系统可以独立选择关闭/重新启动自己的MariaDB容器,甚至升级自己的MariaDB二进制文件

另一方面,我的一些同事认为运行多个MariaDB容器是低效的,这种方法会造成资源浪费


他们的经验测量和文章是否讨论了这两种方法之间的权衡?

集装箱世界中的持久性存储仍处于初级阶段,在高流量环境中运行多个数据库副本(在本例中为mariadb)时可能会出现问题

无论您使用的数据库数量如何,使用共享持久性数据存储(例如NFS)运行多个mariadb复制副本都可能导致某些损坏问题

我自己还没有经历过这些事情,但在生产中做任何事情之前,您应该进一步研究在容器中运行数据库。网上有很多关于这方面的文章


很多人仍然在虚拟机或裸机上运行他们的数据库,并且只在本地开发的容器中运行数据库。

正如你所说,这是一种折衷。“隔离”比“效率”更重要吗。你还不知道该应用程序是否会耗尽服务器的马力。我曾与一位同事进行过一次辩论,我们提出了一个指标来决定何时对数据库进行容器化。很简单,我们衡量每个应用程序的总数据库问题数与这些崩溃影响其他应用程序的次数。我们得到了百分比,如果它超过30%,我们会隔离出有问题的应用程序,这将大大提高其他系统的稳定性。我会尽力想出一个答案来解释我们最终的解决方案。最后我们把所有的东西都装进了容器,但是我们必须用一种特殊的方式来处理数据库容器