你还在docker中跑mysql?恭喜你,可以下岗了!

Java技术栈 Java技术栈     2023-01-03     449

关键词:

来源:toutiao.com/i6675622107390411276/

容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。

目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库 MySQL 是否需要容器化

认真分析大家的各种观点,发现赞同者仅仅是从容器优势的角度来阐述 MySQL 需要容器化,几乎没有什么业务场景进行验证自己的观点;反过来再看反对者,他们从性能、数据安全等多个因素进行阐述 MySQL不需要容器化,也举证了一些不适合的业务场景。之前推送过一篇文章:

下面,我们就聊一下 Docker 不适合跑 MySQL 的 N 个原因!

数据安全问题

不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。当容器被rm掉,容器里的数据将会丢失。

为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。

性能问题

大家都知道,MySQL 属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低 MySQL 的读写性能。

在一次Docker应用的十大难点专场上,某国有银行的一位架构师也曾提出过:“数据库的性能瓶颈一般出现在IO上面,如果按 Docker 的思路,那么多个docker最终IO请求又会出现在存储上面。现在互联网的数据库多是share nothing的架构,可能这也是不考虑迁移到 Docker 的一个因素吧”。

其实也有相对应的一些策略来解决这个问题,比如:

1)数据库程序与数据分离

如果使用Docker 跑 MySQL,数据库程序与数据需要进行分离,将数据存放到共享存储,程序放到容器里。如果容器有异常或 MySQL 服务异常,自动启动一个全新的容器。另外,建议不要把数据存放到宿主机里,宿主机和容器共享卷组,对宿主机损坏的影响比较大。

2)跑轻量级或分布式数据库

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

3)合理布局应用

对于IO要求比较高的应用或者服务,将数据库部署在物理机或者KVM中比较合适。目前腾讯云的TDSQL和阿里的Oceanbase都是直接部署在物理机器,而非Docker 。

状态问题

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

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

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

资源隔离方面

资源隔离方面,Docker 确实不如虚拟机KVM,Docker是利用Cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。

需要的隔离级别越多,获得的资源开销就越多。相比专用环境而言,容易水平伸缩是Docker的一大优势。然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。

难道 MySQL 不能跑在容器里吗?

MySQL 也不是全然不能容器化。以下几种场景还是适合的。

1)对数据丢失不敏感的业务(例如用户搜索商品)就可以数据化,利用数据库分片来来增加实例数,从而增加吞吐量。

2)docker适合跑轻量级或分布式数据库,当docker服务挂掉,会自动启动新容器,而不是继续重启容器服务。

3)数据库利用中间件和容器化系统能够自动伸缩、容灾、切换、自带多个节点,也是可以进行容器化的。

典型案例:同程旅游、京东、阿里的数据库容器化都是不错的案例,大家可以自行去查看。

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2021最新版)

2.别在再满屏的 if/ else 了,试试策略模式,真香!!

3.卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.5 重磅发布,黑暗模式太炸了!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

你在docker中跑mysql?恭喜你,可以下岗了!

...何保证软件能够正常运行”这一问题。目前,容器和Docker依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以 查看详情

你在docker中跑mysql?恭喜你,可以下岗了!

...何保证软件能够正常运行”这一问题。目前,容器和Docker依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库MySQL是否需要容器化?认真... 查看详情

你还只会用atomicxxx?!恭喜你,可以下岗了!(代码片段)

...ff0c;栈长介绍了LongAdder的使用,性能实在太炸了,你还在用AtomicInteger、AtomicLong吗?如果你还不知道LongAdder,赶紧看我之前写的那篇文章。上次也提到了,在JDK8+中的atomic包下,还有另外一个兄弟类:... 查看详情

你还只会用atomicxxx?!恭喜你,可以下岗了!(代码片段)

...ff0c;栈长介绍了LongAdder的使用,性能实在太炸了,你还在用AtomicInteger、AtomicLong吗?如果你还不知道LongAdder,赶紧看我之前写的那篇文章。上次也提到了,在JDK8+中的atomic包下,还有另外一个兄弟类:... 查看详情

有docker谁还在自己本地安装mysql?(代码片段)

引言自己在个人电脑上开发项目或脚本时,经常会遇到数据存储的问题,咱们工作项目中Mysql是常用的业务数据库,如果要存储数据,难道除了在我们个人电脑安装Mysql服务就别无他选了吗?No,No,你还有一种选... 查看详情

docker问题集锦(12)-你还在一个挨一个的删除镜像文件吗?

目录问题解决查看镜像文件查看镜像文件ID执行删除操作 查看详情

你还在担心期末复习没有题目做?爬虫帮帮你(代码片段)

你还在为期末复习没有题目做?前言题库刷题暴力输出结果展示前言Python数据分析与可视化期末复习,因为是学校第一年考试,只能去互联网上找题啦!给大家推荐一个宝藏级的考试系统,里面有各种计算机... 查看详情

大家都已经实现办公自动化了,你还在依靠手动处理业务?

清晨,很多人喜欢用一杯咖啡唤醒昏昏沉沉的自己,以开启美好的一天。以前,你需要磨豆子、冲泡咖啡,全神贯注的忙碌至少5分钟。现在,有了胶囊咖啡机,你只需要一秒钟就可轻松享用醇香的咖啡了。你的工作也是如此,... 查看详情

别闹了,你还在记密码?|1password备忘&教程

每个人在网上或电脑离线软件上都会有一些账号和密码。这些账号,如果你设置成一个呢,不安全,尤其是如果你很多地方的账号密码都是同一套的话,如果在一个安全系数比较低的地方被盗号了,那其他地方也瞬间都不安全了... 查看详情

游戏目录

你还在为找游戏而烦恼吗? 你还在为不会安装而头痛吗?你还在等什么拍高级会员,就是我们店的VIP我们有专业人员一对一帮你远程解决问题。技术扣扣:778198208 注意:聊天内不能有游戏名出现。比如:有没有雯雅婷5... 查看详情

++操作你还在使用加锁去保证线程的安全吗?确定不了解一下cas机制?

什么是CASCAS(Compareandswap),字面意思可以理解为“比较和交换”:它其实就是假设内存中原有的数据为V,旧的预期值为A需要修改的值为B,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地... 查看详情

目前最火招商平台新商所招商你还在犹豫什么,尤雅

咨询qq:2434991083电话:18068555621 尤雅  关于新增合约的公告各会员单位及交易客户:   为了推动市场发展,拓展投资渠道,应广大客户的强烈要求,经新商所研究决定:于2016年10月27日在实盘上线聚丙烯品种,... 查看详情

你还在为文件读写而烦恼?python已经轻松帮你解决了(代码片段)

不管是Java还是Python,都有相关文件读写操作!很多小伙伴们都困扰于读写文件的各种模式(如阅读、写入、追加等),以及搞不清open、read、readline、readlines、write等方法的使用。小编写这篇文章就是要告诉伙... 查看详情

活久见:都2203年了,你还在使用word调试api

随着信息技术的发展,API变得无处不在,无处不用。但令人费解的是,都2203年了,竟然还有很多人使用word调试API?今天,西红柿将带领大家打开新世界的大门,放下诺基亚,抄起智能机!!... 查看详情

此刻你还在为跳槽而纠结烦心吗?这篇1000道batjava面试题分享你,看你掌握多少,有无资本跳槽

...兄弟我只想说,今年啥情况啊,外面很多人找不到工作,你还想着裸辞,珍惜这还真是应验了我们近期讨论的那句话:“上班的人不想上班,没工作的想上班”当然如果发现公司形势不好,那你也确实可以考虑下.但是你得具备... 查看详情

jenkins+docker,容器中跑docker服务(代码片段)

1.宿主机:安装docker 2.启动jenkins服务dockerrun-itd-p8080:8080-p50000:50000--namejenkins--privileged=true-m1500M-v/data/jenkins_home/:/var/jenkins_home-v/usr/bin/dos2unix:/usr/bin/dos2unix-v/var/run/.sock: 查看详情

都2021年了,你还在写es5?快醒醒吧,这份es6超全教程拯救你(代码片段)

...古人学问遗无力,少壮功夫老始成〞都2021年了,你还在写ES5?快醒醒吧,这份ES6超全教程拯救你,作为JavaScript语言的下一代标准。ES6其实在2015年就已经发布了,很多人并不清楚ES和JavaScript之间的关系࿰... 查看详情

时间复杂度你还在担心时间复杂度太高吗?

  在如今的比赛,能否写出题已经是一个大问题了,就算暴力写出来也全是超时,时间复杂度如何压缩?这是小编自从写并查集以后开始重视的问题,如果在相同的水平下,而你却写法不同,说不定能拿更高的分数且只高不减... 查看详情