Dockerize(Containize)数据库是否有意义?
-
21-12-2019 - |
题
我可以了解Dockerizing无状态服务后面的本金,如Web服务器,AppServers,Load Balancer等...如果您在一组机器上运行这些服务,则非常容易将这些容器移动到低电平高架。我不明白的是包含集装箱数据库的目的?数据库连接到在特定硬盘中持久的数据卷。由于状态,实际移动数据库容器并不容易,而且不高效。所以任何人都可以看到为什么换下数据库可以有用?
解决方案
“所以任何人都可以看到为什么换下数据库都可以有用?”
keeto好问题。集装箱数据库的主要原因之一是,您可以为整个应用程序提供相同的一致性环境,而不仅仅是无状态部分,横跨开发,暂存和生产。一致的环境是Docker的承诺之一,但是当您的数据库生活在此模型之外时,在您的测试中会有很大的差异。此外,通过对您的数据库以及其余的应用程序进行集装箱,您更有可能能够在托管提供商之间移动整个应用程序(从AWS到Google Compute)。例如,如果您使用Amazon RDS,即使您可以将网络节点移动到Google,您将无法移动数据库,这意味着您依赖于云提供商。
集装箱数据服务的另一个原因是性能。这对于服务提供商(所有数据库为服务提供者来说尤其如此,例如
我并不是说你应该容纳你的数据库,但这些是它会有意义的原因。
完整披露,我为ClusterHQ工作,那个标记O'Connor的新项目在他的答案中提到。我们有一个名为flocker的OpenSource项目,使迁移数据库更容易迁移数据库及其在主机之间的卷,以便您在问题中提出的否定的否定的益处不完全超过。
其他提示
不确定我会同意您对效率的评论......与本地安装它相比,下载并运行数据库容器更容易。 Docker文档描述了如何在有状态容器和数据之间实现清洁逻辑分离:
但是......你是正确的,那个有状态容器将被绑定到它的主机服务器,除非有一些机制也可以将数据移植到周围。一个明显的解决方案是在可能运行数据库的所有主机上安装共享存储卷。
下面的文章讨论了一个非常创新的解决方案,其中一个像BitTorrent的客户端用于复制主机之间的数据容器。
最后一个名为flocker的新项目正在尝试通过管理有状态容器及其关联的ZFS卷来解决这个问题:
这是一个很好的线程,并且最近的SQL Server克隆的进度将增加使用克隆的容器的额外功能。这解决了大数据集的一些问题问题。完整披露,我为Windocks工作,我们已经释放了2.0,使用具有集成数据库克隆的SQL Server容器。