为什么不建议在Docker中部署数据库

说明
近些年来,docker凭借着容器化技术和便捷的操作征服了大多数开发者的心,恨不得将所有的软件环境,应用都部署到docker容器中,但数据库真的适合容器化吗?这是一个值得思考的问题,下面讨论和列举数据库不适合部署到容器的若干理由,仅供参考。

一、数据安全问题
入门docker的都知道,容器是可以随时创建和销毁的,当执行rm操作删除容器时,容器内的数据就会丢失。而为了避免丢失数据,我们可以使用数据卷挂载的方式来存储数据。

然而容器的数据卷 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。

另外,容器里共享数据卷组,对物理机硬件损伤也比较大。即使你要把 Docker 数据放在主机来存储 ,它依然不能保证不丢数据。

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

二、网络问题
要理解 Docker 网络,您必须对网络虚拟化有深入的了解。数据库需要专用的和持久的吞吐量,以实现更高的负载。未解决的 Docker 网络问题在 1.9 版本依然没有得到解决。把这些问题放在一起,容器化使数据库容器很难管理。你需要花多少时间解决 Docker 网络问题?将数据库放在专用环境不会更好吗?节省时间来专注于真正重要的业务目标。

三、性能问题
MySQL 属于关系型数据库,对 IO 要求较高。当一台物理机跑多个时,IO 就会累加,导致 IO 瓶颈,大大降低 MySQL 的读写性能。在一次 Docker 应用的十大难点专场上,某国有银行的一位架构师也曾提出过:“数据库的性能瓶颈一般出现在 IO 上面,如果按 Docker 的思路,那么多个 Docker 最终 IO 请求又会出现在存储上面。现在互联网的数据库多是 share nothing 的架构,可能这也是不考虑迁移到 Docker 的一个因素吧”。

不同性能问题有着不同的解决方案:

①数据库程序与数据分离

如果使用 Docker 跑 MySQL,数据库程序与数据需要进行分离,将数据存放到共享存储,程序放到容器里。如果容器有异常或 MySQL 服务异常,自动启动一个全新的容器。

另外,建议不要把数据存放到宿主机里,宿主机和容器共享卷组,对宿主机损坏的影响比较大。

②跑轻量级或分布式数据库

Docker 里部署轻量级或分布式数据库,Docker 本身就推荐服务挂掉,自动启动新容器,而不是继续重启容器服务。

③合理布局应用

对于 IO 要求比较高的应用或者服务,将数据库部署在物理机或者 KVM 中比较合适。

目前 TX 云的 TDSQL 和阿里的 Oceanbase 都是直接部署在物理机器,而非 Docker 。

四、资源隔离
资源隔离方面,Docker 确实不如虚拟机 KVM,Docker 是利用 Cgroup 实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。

如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。需要的隔离级别越多,获得的资源开销就越多。

相比专用环境而言,容易水平伸缩是 Docker 的一大优势。然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。

五、状态
在 Docker 中打包无状态服务是很酷的,可以实现编排容器并解决单点故障问题。

但是数据库呢?将数据库放在同一个环境中,它将会是有状态的,并使系统故障的范围更大。下次您的应用程序实例或应用程序崩溃,可能会影响数据库。

知识点:在 Docker 中水平伸缩只能用于无状态计算服务,而不是数据库。

Docker 快速扩展的一个重要特征就是无状态,具有数据状态的都不适合直接放在 Docker 里面,如果 Docker 中安装数据库,存储服务需要单独提供。

目前,TX 云的(金融分布式数据库)和阿里云的 Oceanbase(分布式数据库系统)都直接运行中在物理机器上,并非使用便于管理的 Docker 上。

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

数据库(特别是关系型数据库)对 IO 的要求较高。一般数据库引擎为了避免并发资源竞争而使用专用环境。

如果将你的数据库放在容器中,那么将浪费你的项目的资源。因为你需要为该实例配置大量额外的资源。在公有云,当你需要 34G 内存时,你启动的实例却必须开 64G 内存。在实践中,这些资源并未完全使用。

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

小结
并不是可以把数据丢失不敏感的业务(搜索、埋点)就可以容器化,利用数据库分片来增加实例数,从而增加吞吐量。Docker 适合跑轻量级或分布式数据库,当 Docker 服务挂掉,会自动启动新容器,而不是继续重启容器服务。数据库利用中间件和容器化系统能够自动伸缩、容灾、切换、自带多个节点,也是可以进行容器化的。

发布者:小站,转转请注明出处:http://blog.gzcity.top/4614.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年6月24日 15:57
下一篇 2022年6月24日 16:39

相关推荐

  • 【云原生】Spring Cloud微服务学习路线汇总

    Spring Cloud是什么?简单来说Spring Cloud是一系列框架的组成集合。主要利用的我们现在主流应用的Spring Boot框架开发便利性、巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以利用Spring Boot的开发风格做到一键启动和部署。Spring Cloud没有重复制造轮子…

    2022年6月24日
    28630
  • 识别并修复 Web 应用中的 XSS 漏洞

    什么是跨站点脚本? 跨站点脚本 (XSS) 是一个代码注入漏洞,当开发人员在将用户输入插入 HTML 模板之前未对用户输入进行足够好的审查时,就会在处理 HTML 的应用程序中发生该漏洞。它允许攻击者将任意 JavaScript 代码插入模板并在用户的上下文中执行它: 在上图中,开发人员未能清理“姓氏”div 的内容,这导致用户能够通过操纵其姓氏来包含恶意脚…

    2023年6月11日
    683760
  • Java复制文件&文件夹工具类

    Java复制文件&文件夹工具类 package cn.utils; import java.io.*; /** * 复制文件夹 * */ public class CopyDirUtil { /** * 复制文件夹 * * @param resource 源路径 * @param target 目标路径 */ public static void c…

    2022年6月17日
    22.9K49320
  • Python实战:用Selenium webdriver 爬取网页数据 webdriver,爬取隐私政策地址

    Python实战:用Selenium webdriver 爬取网页数据 webdriver,爬取隐私政策地址 import os.path import requests import sys import time from selenium import webdriver from bs4 import BeautifulSoup from flask…

    2023年6月2日
    2.4K1170
  • 2022年Web前端开发流程和学习路线(详尽版)

    前言 前端侧重于人机交互和用户体验,后端侧重于业务逻辑和大规模数据处理。理论上,面向用户的产品里,所有问题(包括产品、设计、后端、甚至看不见的问题)的表现形式,都会暴露在前端,而只有部分问题(数据问题、计算问题、安全问题等)暴露在后端,这就意味着前端起到了至关重要的承载和连接作用。前端技术的更新日新月异;前端框架的技术选型百家争鸣;视觉审美的潮流不断更替;可…

    2022年7月6日
    33940

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)

  • أنابيب PEX-AL-PEX
    أنابيب PEX-AL-PEX 2024年9月25日 17:09

    Polybutylene Pipes in Iraq Elite Pipe Factory specializes in top-tier polybutylene pipes, which are known for their flexibility, lightweight nature, and resistance to corrosion. These pipes are an excellent choice for a variety of applications, including residential and commercial plumbing systems. As one of the most reliable and innovative factories in Iraq, Elite Pipe Factory ensures that our polybutylene pipes meet the highest quality standards, providing long-lasting and efficient solutions. Discover more about our polybutylene pipes at elitepipeiraq.com.