热闹的春节假期彻底结束了,因为儿子今年要高考,所以春节正好窝在深圳。春节期间,在儿子的要求下,去看了电影-《流浪地球》。电视上没什么可看的,只有便秘《三体》这样的更新速度值得一看。看完两部电影,剧情大相径庭。地球人驾驶地球,穿越2500年时空,前往三体人家园捕捉太阳。宇宙的另一端,三体人穿越浩瀚宇宙,劫掠地球,我不知道那群人做出了技术误判。每天写点东西,这是我最近一直在想的事情。春节假期放飞自我。想的问题不多,写的话题也不多。正好在春节假期的最后几天,我在写研究报告的提纲,还在思考一些技术问题。其实春节前我也写过这个话题,就是国内商业数据库上云的问题。让我们从另一个角度来谈谈这个话题。数据库上云一般有四种方式:数据库服务器云管理、云主机部署、RDS服务、容器云。云管理只是最低级别的云管理。实际上,数据库和云还是完全分开的。今天我们先看看其他三种方式。将数据库部署在云主机上是最早的数据库上云方式。利用云平台的ECS和云主机模板,以及云平台的资源编排能力,可以实现数据库在云端的快速部署和变更。数据库的部署可以做成云主机模板,按小时交付。这已经是周交付效率的革命性提升。但是,这种部署方式存在很多问题。首先,交付和运维仍然是分离的。数据库运维的模式还是传统模式,自动化程度不高。其次,部署在云主机上的数据库性能还存在一些问题。数据库往往需要外部集中存储来解决IO性能问题;第三,稍微关键一点的数据库经常会因为云资源的过度供应而受到干扰,需要独立的归置组进行资源隔离,避免其他云组件。性能影响;最后一点,还是需要提高投放效率。RDS是目前最主要的数据库上云方式之一,也是对云主机部署的一种改进。RDS一般以裸机形式部署。一台服务器上部署多个数据库实例,通过资源管理模式限制资源使用。RDS部署的数据库使用服务器本地磁盘作为存储介质,可以使用SATAHDD、SASHDD、SATASSD、NVMESSD等多种存储介质。一些云供应商还提供高性能的云存储作为存储介质。在这种裸机部署模式下,数据库的性能损失较小。因此,在同一个数据库上,RDS的性能往往优于部署在云主机上的数据库。但是受限于单机容量,RDS的规模受限于PC服务器的物理限制。CPU、内存、存储容量的扩展存在一定的限制。CPU和内存的限制在其他部署模式中也相同。容量限制是比较麻烦的事情。不过,裸机云也有一些突破容量限制的方案。比如INTEL的RSD可以动态分配磁盘等资源给某台服务器,实现分钟级的资源调度。阿里的神龙就是类似的裸机云方案。除了存储容量的限制,RDS在资源隔离方面也并不完善。使用同一个操作系统的多个数据库服务仍然会在一定程度上相互干扰,所以有时会出现一些莫名其妙的性能问题。RDS数据库的高可用和备份可以使用数据库的原生模式,比如通过MHA、MGR等搭建主从环境,或者使用云平台底层存储快照、副本复制等技术来实现数据库复制,或者通过底层云平台先进的CDP/CDM技术实现数据的可持续保护,但是这些方式的实现成本都比较高,大部分用户还是通过传统的数据库主从复制来获得高可用性。第四种云迁移模型是近几年流行的容器云。在容器中运行数据库是很常见的。一些公司构建了DEVOPS工具链,不仅可以快速交付数据库,还可以快速交付整个应用。数据库的容器云一般部署一个小规模的数据库来支持不太复杂的业务。如果一个企业有数百个规模和业务负载相近的数据库,或者一些规模较大的业务可以拆分成几十个这样的数据库,容器云可以节省大量的部署和运维成本。大家要注意,我说的是“规模相似”。我为什么提到这个词?因为如果可以使用同一个容器镜像部署多个数据库,那么容器云的成本是最低的。构建几十个独立镜像的成本不低。另外一个需要注意的问题是,容器云必须要有一个高层运营商来支撑。如果一个应用拆分成几十个数据库,每个数据库都需要一个DBA来做精细的运维,那用这几十个数据库还不如。将数据库合并成一个大数据库,每个小数据库作为一个数据库或数据库的模式。容器云中大量小型数据库的运维90%以上甚至99%以上应该通过算子实现自动化,这样才能真正节省运维成本。我之前帮用户优化过容器里面的数据库,因为他们的镜像都是从网上下载的,根本没有按照他们的应用需求重新构建。因此,当数据库出现问题时,很多指标无法采集,问题的分析非常困难。不方便,运行在这样的容器中的大型数据库一旦出现问题,定位就如同大海捞针。今天时间有限,先把这道题的前半部分写出来吧。其实今天我们只讨论了几种数据库上云的方式。对商业数据库云化之路及存在问题的探讨是本文的重点。明天下一集再说吧。最后祝各位读者新年快乐。
