数据库到底能不能跑在容器里,如果不能,那么那么多的云服务商的云数据库产品不都跑在容器里面吗?

一、一种声音:认为不能。

1、对于有状态的担忧

        数据库一般是有状态的,对于容器的快速扩展十分不利,除非存储服务单独提供,同样对于产品的设计难度要求更高。

2、对于数据安全的担忧

        主要是担心容器被rm掉时,容器里的数据会丢失,即使使用数据卷挂载存储数据,由于容器数据卷对Union FS 镜像的持久存储依赖,数据安全缺乏保证,同时如果容器崩溃时,若数据库未正常关闭,可能会损坏数据。

3、对于性能的担忧

        数据库一般对IO要求较高,一台物理机上的多个数据库容器将提升对服务器的IO压力。为便于理解,数据库可以抽象为“程序”和“存储”两层,程序层和数据层同时作用于宿主机,对于宿主记的压力降比较大,容易出现故障,IO稍微高一些的场景就会造成数据库的承载能力指数级下降。

4、其他

        其他因素也包括大家对于资源隔离、网络的担忧,通过cgroup实现资源隔离的docker仅仅做了上限值限制,并没有做下限值保证,所以其他程序依然可能会影响到本身,对于数据库来说资源的隔离级别不能保障的话,读写效率势必受到影响,而且数据库又是对客户来讲最敏感的软件设施,不容有失;容器的网络和安全性一直是比较复杂的内容,网络的虚拟化技术具有较高的门槛,不那么容易被掌握。

二、云数据库:我行,我能

        以上提到的数据库容器化存在状态兼容、性能和安全等的问题,给大家带来了担忧。没错,这些问题在单纯的容器面前确实无法避免,对于重型业务单纯的容器化肯定是不行的。

        这里我想说的是一个生态的概念,或者叫平台的概念,这个平台就是“云”,与其说运行在容器里的数据库,不如说“跑在云上的数据库”,因为云是一个囊括了“容器”又不仅仅只有“容器”的容器,这是广义的概念。

1、云平台具备最基本的资源管理、资源调度能力,且是自动化的。

云数据库对用户来说是一种“即开即用”的数据库,并不需要做硬件选配、软件部署和调测等工序,其高可用、数据容灾、监控告警等功能已经存在,无需用户关心资源背后的真相。对于用户来讲首先十分友好,研发团队和运维团队都可以省下大的精力去专注业务发展;

2、云平台的短平快迭代,支持新特性快速享用,新问题无感规避。

云数据库基本功能支持,以及高可用、备份容灾、安全审计等功能均可以实现对客户无感升级,且更新节奏可以做到“天”的级别,客户的研发团队不需要去针对旧版本开源数据库寻找升级版本,在做停服升级,这一点也是非常有诱惑力的,大家都知道一旦一个架构选定了一款数据库,基本都不会再去愿意改变,哪怕数据库问题很多,也不愿意动一下,除非性能严重衰减到无法使用,收到客户投诉的情况,而使用云数据库的话,升级工作交给最专业的数据库运维工程师负责,出错的概率极大降低。

3、云数据库周边生态齐备,数据传输功能齐备。

我们企业里面,往往使用数据库最多的场景就是“增删改查”,个别的使用到“触发器、存储过程”等高级特性,但是对于需要实现数据同步或者数据传输的场景,或者需要把数据通过一个消息队列传给其他团队或应用时,基本上首选思路就是写一个中介程序,通过“读出来”和“写进入”的方式来进行了,传输的性能、安全性、容错性都得不到保证。而使用云数据库,云数据库周边的生态工具比较完备,数据传输DTS、数据快递等功能原生与数据库兼容,且多支持开源数据库和其他品牌数据库,甚至支持异构同步,比如从mysql到tidb,从mysql到kafka,这个也是显著的优势。

另外可以通过DTS产品实现两个独立数据库组建成一个高可用甚至双活的数据库集群,支持MySQL双活、Redis双活不在话下,这个能力的支持线下数据库能轻易做到吗?

三、说结论:适合才是最好

两个方面决定结论:

1、云服务商的实力,头部玩家放心用

比如你用的是TOP10的云服务商,比如阿里云、华为云、腾讯云、移动云、天翼云、AWS等大型云服务商的产品,无疑产品研发迭代效率、研发团队规模等都可以得到保障,放心大胆的取用云数据库,如果你对数据库性能和隔离性要求特别高,那么选择使用他们的私有云或者专属云也是可以的。小型云服务商建议不要用,因为云服务商的竞争下,主动有一大批云服务商要退出舞台,最后剩下的依然是“头部玩家”,要么以阿里云为代表的顶级选手,要么是以“中字号”的超级选手。

2、如果你所在的企业本身就有专门的云事业部,那么也可以放心大胆的使用,但也要留一手,因为你不是“他真正的客户”

比如美团、京东等,都有自己的云事业部,甚至对外提供服务,那么也没啥问题;不过,不过也要给自己留下余地,企业的裁员随时进行,最好给自己找一个“坚强靠背”,你的数据不会因为你用了自己公司的云而提供更高级的SLA,反而在“契约化的市场行为”下,更能得到周全负责的服务保障;

3、如果企业本身是小型企业,那么你的业务可以开始向云迁移了。

数据库上云,先从非敏感性业务(分析、搜索、广告等),再到核心轻量业务(订单、物流、发货等),最后到核心重型业务(用户、财务、交易等),同时开展面向云业务的研发和运维团队构建,通过1-2年的时间完成全部业务的迁移,过程中云化的人才得以锻炼,云数据库所释放出的成本、弹性、安全、容灾、运维、生态能力将彻底改变业务研发的模式,DevOps甚至是DevSecOps不在是“听别人讲讲”,云原生应用的春天来了。

欢迎讨论和投票:你认为数据库跑在容器里面靠谱吗?

推荐文章:

云卷云舒:云原生数据库和普通数据库的区别_云原生数据库具有强一致性和高可扩展性等特点,而普通数据库则采用的是分布式数据-CSDN博客

云卷云舒:算力网络+云原生(中):探索构建算力网络数据库_云卷云舒 csdn-CSDN博客

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐