数据库真的适合容器化吗,也许不是

本文讲的是数据库真的适合容器化吗,也许不是【编者的话】本文主要评估了数据库容器化的可行性和必要性并最终提出了建议和解决方案。

容器概念(特别是Docker)非常火热。但是,在把数据库包装到一个全新的容器之前,有一些事情需要先在脑海里过一下。

本文评估了Docker和其他容器解决方案在数据库环境下的可行性。

几周前,我写了一篇相对概括的关于容器的文章。它介绍了你什么时候该考虑使用DockerrktLXC等容器技术。方便的话不妨先浏览一下。这是一个很好的方式,在迁移到新技术架构前先了解一些需要考虑的方面。而这也引发了我们解决方案工程师团队的一次内部讨论。你的团队应该也会有一个相同的困惑:客户应该把数据库跑在容器里吗?

在开始之前,我们先得认可一个事实:Percona正在使用容器。Percona监控和管理(简称PMM)提供的全部优美的图表和查询分析都是通过运行一个Docker容器承载的。我们做出这个选择是因为组件之间的集成即是我们可以为用户提供最大价值的地方。Docker使得我们可以很酷的分发一个准备好的单元。简而言之,它在企业环境的应用端拥有巨大的潜力。

然而,对于数据库来说...这里有几个建议。

临时应急

决策 = 不做数据库的容器化(保持现状)

这并不是说每个环境都这样。而是默认情况下我们认为最建议绝大多数客户采纳的做法。请记住,我只是建议你对数据库这样做而已。如果今天你的应用已经实现了微服务化,那么依赖于数据库的负载特点、扩展需求以及工程师们现有的技能集来实施数据库的容器化可能会更有意义。

为什么?

缺乏协同

先别发火,不妨花点时间回想下我们的初衷吧。首先,人们设计出来的容器解决方案是为了处理有临时数据的无状态应用。容器快速建起一个微服务,然后销毁它。这囊括了该容器的所有组件(包括它的缓存和数据)。容器的瞬时特质决定了该容器的所有组件和服务都被认为是该容器的一部分(基本上全是,或者都不是)。通过在容器上打孔的方式为容器提供一个属于底层操作系统的数据卷本身可能会很有挑战。现有方案对于绝大部分数据库系统来说都太不可靠了。

投入到各种解决方案的绝大多数开发力量脑海中都有一个目标:无状态化。有很多方案可以帮助你的数据持久化,但是它们仍处于快速迭代中。可以说,使用它们会引入很高的复杂度,上升的运维复杂度(和风险)也否定了容器化所带来的效率上的收益。之前我们在回顾有关容器(特别是Docker)使用时的一些“真实世界”的反馈所得出的结论也确实例证了这一点。

它们还不够稳定

这些容器方案的本意都是为了快速开发和部署那些被拆解成众多微小组件:微服务的应用。通常,这些应用在那些软件/工程师驱动的组织里发展的非常快。这似乎也是这些容器解决方案(再次强调,尤其是Docker)被开发出来的原因。新功能在经过少量测试和设计之后便推送出来。主要的焦点似乎被放在最新的功能集,还有最先推向市场。它们不再向用户“征得许可“,取而代之的是事后的”乞求宽恕“。除此之外,它们将向后兼容性(从我们之前所说便可以得知这一点)优先级排的很远(甚至还有所夸大)。这意味着你将不得不打算去建立一个成熟的持续交付和测试的环境,以及一个对于容器而言广为人知并经过测试的镜像仓库。

市面上的确有一些很酷的工具用在了正确的用例上,但是他们有的是时间,金钱,资源还有经验。就我们多数顾客来说,作为一家企业这不是他们该考虑的地方。他们的业务并不是围绕软件开发设计的,他们也没有足够的钞票来支撑保持这些机器运转所需的资源。相反,他们只想弄出一个稳定和高性能的服务,可以让他们的用户7*24小时开心地用着服务。

我知道,如果我们将数据库从容器剥离出来的话是可以给他们提供一个高性能、高可用的环境,并且不用怎么操心。

有希望吗?

当然有,事实上,可不仅仅只是有希望而已。现今有很多企业已经在大规模运行容器(包括数据库)!这些公司的典型特点都是拥有非常成熟的流程。他们的软件开发是业务规划的核心部分并主导了价值取向。我所说的这些你大概知道:UberGoogleFacebook(还有很多,这里只是一部分)。还有一个很好的选择,那便是你可以通过使用Joyent来获得容器数据的持久化。但是正如我之前所说,要保证必要的数据存留和可用性(数据库绝大多数最基本的用途)随之带来的复杂度实在是太高了。我个人的观点是,当容器拥有一个更好和更稳定的持久存储卷解决方案时他们也就离成功只有一步之遥了吧。即便如此,在大多数组织内部,如果不是支撑大规模部署(超过50个节点)并且工作负载变化很大的话,可能也无需容器化数据库。

不要吊我们胃口...

我知道,”你可能还没准备好容器化数据库“这种话并不能构成一个解决方案。所以在这里:解决方案工程师团队(简称SoIEng)给出了解决方案。Dimitri Vanoverbeke正在编写一套很赞的关于配置管理的系列博客。配置管理解决方案可以极大地提高基础架构的可重复性,并确保你的IT/App开发流程在自己环境的物理配置中也是可重复的。自动化这个过程可以带来巨大的收益。而成熟的开发/测试流程应当成为整个应用开发生命周期的一部分。流程和技术的结合可以缔造出稳定的应用从而让客户开心。

除了将配置管理作为改进方案,有一些服务也可以让运维团队的日子好过些。第一个想到的便是服务发现和健康检测。我最喜欢的是Consul,我们用在PMM里做扩展,完成配置和服务元数据的管理。Consul可以确保前端应用和后端基础架构所工作的服务状态每时每刻都是一个快照。

结论

在管理一个环境,尤其是当应用快速迭代的时候需要考虑的事情很多。通过采用可选的解决方案,你可以减少每次发布的开销。此外,你还可以提高应用的弹性能力及可用性。

原文链接:Is Docker Good for Your Database? (Probably Not)(翻译:吴佳兴)

原文发布时间为:2017-01-04

本文作者:吴佳兴

原文标题:数据库真的适合容器化吗,也许不是

时间: 2024-10-25 01:56:44

数据库真的适合容器化吗,也许不是的相关文章

DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结

本文讲的是DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结[编者的话]本文分享了唯品会数据库Docker的异地容灾项目实践经验,项目中针对用户数据库的异地恢复场景的需求进行开发和测试,整合了网络,存储.调度.监控,镜像等多个模块.在实施完成后,从技术上总结关于选型.开发.踩坑.测试等方面的经验. 项目背景 数据库Docker的异地备份恢复容灾项目,针对用户数据库的异地备份恢复场景的需求进行开发和测试,整合了容器网络.存储.调度.监控.镜像等多个模块.同时针对数据库的日

DockOne微信分享(七十六):容器化ICT融合初体验

本文讲的是DockOne微信分享(七十六):容器化ICT融合初体验[编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上线和自动扩缩容,最大化IT基础设施资源利用率并降低总体拥有成本(TCO).未来的网络正在向IT化.云化方向发展,容器与微服务技术,完美契合"网络即服务".网络切片等发展理念,将有助于实现更加灵活.智能.高效和开放的5G新型网

DockOne微信分享(七十五):应用容器化之Kubernetes实践

本文讲的是DockOne微信分享(七十五):应用容器化之Kubernetes实践[编者的话]本次分享主要以ZooKeeper.Redis.Kafka.MongoDB等应用容器化在Kubernetes平台上面实践.从计算.网络.存储方面解析应用在集成中的问题,以及部分传统应用在容器化过程中设计的应用二次开发等问题.首先介绍应用Docker化的需求和局限.接着介绍基础平台,整体环境包括Kubernetes和ECP,然后介绍具体应用如ZooKeeper在集成中的实践,最后介绍部分开源应用在容器化过程中

DockOne微信分享(一一七):沪江容器化运维实践

本文讲的是DockOne微信分享(一一七):沪江容器化运维实践[编者的话]沪江目前容器技术主要应用场景:OCS课件业务无状态应用:基于Apache Mesos+Marathon实现沪江容器系统调度管理:Consul + Consul Template + Nginx实现服务自动发现和注册:Prometheus + Grafana + Alertmanager报警实现容器监控报警.本次分享将从以下几方面来讲解: 选择容器技术缘由 容器技术选型 容器存储 容器网络 监控报警 镜像管理 调度管理 服务

DockOne微信分享(一零九):中小型团队的容器化之路

本文讲的是DockOne微信分享(一零九):中小型团队的容器化之路[编者的话]GrowingIO是基于用户行为的新一代数据分析产品,提供全球领先的数据采集和分析技术.企业无需在网站或APP中埋点,即可获取并分析全面.用数据驱动用户和营收的增长.为了应对高速变化的业务增长,我们在系统设计之初就采用了微服务的架构,获得良好的可扩展性.随着时间的推移,微服务的缺点也渐渐体现,人肉运维的成本太高,导致研发效率下降.作为一个中小型团队,我们经过了半年的探索,使用容器相关技术来搭建团队内部的私有PaaS,取

暴走漫画基于阿里云的全面容器化架构实践

标题有所修改. 很高兴能和大家分享一些暴走漫画基于公有云的容器化架构的实践经验. 基于之前在暴漫的经验,我到了扇贝以后,大概用了一个月的时间,就将扇贝的产品成功迁移到了容器环境中,并做了很多改进,也有了更多的思考. 暴走漫画(以下简称"暴漫")相信大家都不陌生,它应该算一个互联网应用.先简单介绍一下背景:暴漫主要做App和网站,后端主要是Ruby,也有一些Python.Scala的异构化系统.整体架构是标准的互联网应用架构.包括负载均衡.Nginx.应用服务器.数据库(MySQL),等

阿里巴巴开源移动容器化框架Atlas的技术演进之路

摘要:在2017云栖大会深圳峰会开源专场上,阿里巴巴手淘技术部资深技术专家倪生华(玄黎)做了题为<Atlas-容器化演进之路>的精彩演讲,玄黎从Atlas的发展.特性.技术原理以及开源运作等四个方面为大家分享了手淘的移动容器化框架Atlas的技术演进之路.面对All in手淘的航母战略,如何实现组件化?本文不容错过. 以下内容根据嘉宾演讲视频以及PPT整理而成. 本次分享将主要分为以下四个部分: Atlas的发展 Atlas的特性 Atlas的技术原理 Atlas的开源运作 一.Atlas的发

容器化MYSQL集群在Uber系统中的应用

本文讲的是容器化MYSQL集群在Uber系统中的应用[编者的话]Uber使用的Schemaless存储系统支撑了Uber最重要的服务,如,Mezzanine等.Schemaless 是一个构建在MySQL集群上,可扩展高可用的数据存储.但管理Uber数据量庞大的数据库集群服务需要应用Docker技术. 当集群节点数为16个时,集群管理非常容易,但若集群规模超过1000,并运行了4000多个数据库服务,就需要另一种工具了.之前所有的集群都由 Puppet来管理.大量的临时脚本,以及人工操作已无法满

Hadoop真的适合你吗?

许多公司都在为管理海量数据不断努力.以前,他们都使用数据仓库平台,用这种传统架构在处理来自内部和外部数据源的数据时有很大困难,这些数据的结构和内容类型通常非常多样化,但Hadoop可以对此场景提供帮助.Hadoop是一款分布式处理架构,专门用来处理复杂的海量大数据,处理结构化.非结构化和半结构化数据混杂的场景. Hadoop的部分优势在于,它有许多种开源组件和相关工具,可以完成数据捕获.处理.管理和分析工作.为了帮助用户利用好该框架,许多供应商提供了商业版Hadoop分布式产品,它们在Hadoo