首页 存档 技术 查看内容

数据库不适合Docker及容器化的7大原因

2018-3-30 13:00 |来自: 互联网 247 0

摘要: 导读:所有的服务都开始了容器化升级,在一切皆容器的主流思想下,无状态的服务采用容器化已经是大势所趋,常常困扰架构师的一个问题是,数据库是否需要容器化,本文作者 Mikhail Chinkov 提出了自己否定观点,由高 ...

导读:所有的服务都开始了容器化升级,在一切皆容器的主流思想下,无状态的服务采用容器化已经是大势所趋,常常困扰架构师的一个问题是,数据库是否需要容器化,本文作者 Mikhail Chinkov 提出了自己否定观点,由高可用架构翻译。


如果我们观察 2017 年技术行业,容器和 Docker 依然将是最热门的流行语。我们开始在每个领域的 Docker 容器中打包开发的软件。从小型初创公司到巨大的微服务平台都在使用容器技术。从 CI 平台到 Raspberry Pi 。从数据库到……

数据库?您确定要将数据库放在容器中吗?

不幸的是,这不是虚构的场景。我看到许多快速增长的项目将数据持久化到容器中。并且将计算服务和数据服务放在同一台机器上。笔者希望有经验的人不会用这个解决方案。

下面是我的观点,数据库容器化从今天来看是非常不合理的。

数据库不适合容器化的7大原因


1. 数据不安全


即使你要把 Docker 数据放在主机来存储 ,它依然不能保证不丢数据。 Docker volumes 的设计围绕 Union FS 镜像层提供持久存储,但它仍然缺乏保证。

使用当前的存储驱动程序,Docker 仍然存在不可靠的风险。 如果容器崩溃并数据库未正确关闭,则可能会损坏数据。


2. 运行数据库的环境需求


常看到 DBMS 容器和其他服务运行在同一主机上。 然而这些服务对硬件要求是非常不同的。

数据库(特别是关系型数据库)对 IO 的要求较高。 一般数据库引擎为了避免并发资源竞争而使用专用环境。如果将你的数据库放在容器中,那么将浪费你的项目的资源。 因为你需要为该实例配置大量额外的资源。 在公有云,当你需要 34G 内存时,你启动的实例却必须开 64G 内存。在实践中,这些资源并未完全使用。

怎么解决? 您可以分层设计,并使用固定资源来启动不同层次的多个实例。 水平伸缩总是比垂直伸缩更好。


3. 网络问题


要理解 Docker 网络,您必须对网络虚拟化有深入的了解。也必须准备应付好意外情况。你可能需要在没有支持或没有额外工具的情况下,进行 bug 修复。

我们知道:数据库需要专用的和持久的吞吐量,以实现更高的负载。我们还知道容器是虚拟机管理程序和主机虚拟机背后的一个隔离层。然而网络对于数据库复制是至关重要的,其中需要主从数据库间 24/7 的稳定连接。未解决的 Docker 网络问题在1.9版本依然没有得到解决。

把这些问题放在一起,容器化使数据库容器很难管理。我知道你是一个顶级的工程师,什么问题都可以得到解决。但是,你需要花多少时间解决 Docker 网络问题?将数据库放在专用环境不会更好吗?节省时间来专注于真正重要的业务目标。


4. 状态


在 Docker 中打包无状态服务是很酷的,可以实现编排容器并解决单点故障问题。 但是数据库呢? 将数据库放在同一个环境中,它将会是有状态的,并使系统故障的范围更大。下次您的应用程序实例或应用程序崩溃,可能会影响数据库。


5. 数据库不适合使用主要的 Docker 功能


考虑容器中的数据库,我们来思考它的价值。 我们先看看 Docker 官方对其的定义:


Docker 是为开发人员和系统管理员构建,分发和运行分布式应用程序的开放平台。 Docker 包括 Docker Engine(便携式,轻量级运行时和打包工具)以及 Docker Hub(用于共享应用程序和自动化工作流的云服务),Docker 使应用程序能够以组件快速组装,并消除开发,QA 和生产环境之间的不同。 因此,IT 可以更快地分发程序,并在笔记本电脑,数据中心虚拟机和任何云上运行相同的应用程序。


根据该答案,我们可以很容易定义 Docke r的主要特性:


  • 易于构建新环境

  • 易于重新部署(持续集成)

  • 容易水平伸缩(从实践得出)

  • 易于维护环境一致


让我们开始思考这些功能如何适应数据库世界。

容易设置数据库? 让我们看看,容器化或者在本地运行数据库,在运行上是否有巨大的差异。

docker run -d mongod:3.4

对比:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部