当前位置: 首页 > 面试题库 >

dockerize(容器化)数据库是否有意义?

雷国兴
2023-03-14
问题内容

我可以理解对Docker进行无状态服务(例如Web服务器,应用服务器,负载平衡器等)背后的好处。如果您在机器集群上运行这些服务,则很容易以低开销移动这些容器。我不明白容器化数据库的目的是什么?数据库连接到持久存储在特定硬盘中的数据卷。由于状态的原因,实际移动数据库容器并不容易,效率也不高。那么,谁能看到为什么对数据库进行dockerdocker完全有用?


问题答案:

“那么,有谁能看到为什么对数据库进行码头处理完全有用?”

好问题Keeto。容器化数据库的主要原因之一是,您可以为整个应用程序(而不只是无状态部分)在开发,登台和生产中都拥有相同的一致环境。一致的环境是docker的承诺之一,但是当您的数据库不在此模型范围内时,存在很大的差异,无法在测试中解决。另外,通过容器化数据库以及应用程序的其余部分,您更有可能在托管提供商之间移动整个应用程序(例如,从AWS到Google
Compute)。例如,如果您使用Amazon RDS,则即使您可以将Web节点移动到Google,也将无法移动数据库,这意味着您严重依赖于云提供商。

容器化数据服务的另一个原因是性能。对于服务提供商(所有数据库即服务产品,例如机架式云数据库,都在容器中运行)尤其如此,因为容器允许您提供使用虚拟化无法实现的服务保证,并且每台物理机运行一个数据库是在财务上不可行。您可能没有运行数据库托管服务,但是如果您在裸机上运行并且想要使用容器而不是VM进行进程隔离,则这种类比也有类似的含义。由于在VM中运行数据库时遇到的众所周知的I
/ O攻击,您将获得更好的数据库性能。

我并不是说您应该对数据库进行容器化,但这是为什么它有意义的一些原因。

完全公开,我为clusterhq工作,这是Mark
O’connor在回答中提到的那个新项目。我们有一个名为Flocker的开源项目,该项目使在主机之间迁移数据库及其卷变得更加容易,这样,您在问题中提出的缺点并没有完全抵消我上面提到的好处。



 类似资料:
  • 我在我的项目中使用postgres docker映像。对于初始化,我使用以下命令来创建和初始化我的数据库(表、视图、数据…) 复制sql_dump.sql /docker-entrypoint-initdb.d 容器停止和删除后是否可以保留这些数据?例如,当我运行postgres的图像时,它将使用这些数据创建数据库,而每次容器启动时都没有加载脚本。只需加载第一次运行创建的数据。 我做了一些研究,发

  • 我使用在docker容器上运行的Cassandra docker映像和Spring Boot服务,并使用Datastax Java驱动程序。 我可以连接Cassandra,也可以查看日志,下面是docker compose文件, 我的密钥空间查询是, 以及使用, Cassandra已经启动并运行了,并且验证了它, 问题是在一开始, 我使用了来创建键空间,得到了以下错误: 然后配置和

  • 我想从Dockerfile创建一个具有初始数据库及其表的MySQL容器。 我还有一个特定的etc/mysql/mysql。conf.d/mysqld。cnf文件(我可以在Dockerfile中简单地使用添加指令。) 我希望Dockerfile创建一个MySQL映像,其中包含一个名为DBNAME的数据库,并包含以下表格: 我已经在这里寻找解决问题的方法,但没有找到解决方法。

  • 我知道Redis从内存中提供所有数据,但它是否也可以在服务器重新引导时持久存在,这样当服务器重新引导时,它将从磁盘中读取所有数据到内存中。或者它总是一个空白存储,只存储数据,而应用程序运行没有持久性?

  • 如果我分割成多个数据库,所有的东西仍然是单线程的,而且我仍然只能使用一个核心。如果我只是在同一个盒子上启动另一个Redis实例,我将使用一个额外的核心。最重要的是,我不能给Redis数据库命名,也不能给它们任何更符合逻辑的标识符。那么,说完所有这些,为什么/什么时候我会想要使用多个Redis数据库,而不是仅仅为我想要的每个额外数据库构建一个额外的Redis实例呢?与此相关的是,为什么Redis不尝

  • 本文向大家介绍Android 使用ContentObserver监听数据库内容是否更改,包括了Android 使用ContentObserver监听数据库内容是否更改的使用技巧和注意事项,需要的朋友参考一下 Android 使用ContentObserver监听数据库内容是否更改 ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它