近两年,随着云环境的成熟,很多企业的业务都在向云端迁移。于是,“云数据库”成为最时髦词汇之一,被AWS、微软、阿里、华为等大厂推崇。那么,对于用户来说,他们如何看待云数据库的发展现状,到底哪些因素才是他们选型的关键点?老王的经历,或许能从一定程度上说明中国云数据库发展现状。
老王的心路历程
A网站,是国内大型社交媒体之一,老王是这家网站的DBA。像很多人说的一样,好的架构从来都不是设计出来的,而是演进出来的,数据库也是如此。从商业数据库到开源数据库,再到云数据库,老王是数据库变革的最直接见证者和推动者。
起初,A网站日活跃用户达到1.5个亿。用户注册时,需要给每一个用户分配独立的ID,并保存用户名、密码、出生日期、单位等信息。另外,登录后要对消息、关注、查找、评论、转发等进行管理。这家网站的数据库采用的是标准结构,按照读写分离设计,主库承担写,从库承担访问,如果访问压力过大,就通过扩容从库的数量获得扩展能力。并且,所有业务按照用户、内容和关系进行垂直划分,使用单独的数据库。
之后,随着移动互联网的快速发展,A网站注册用户数也跟着疯涨,原有的数据库呈现前所未有的压力。为了支持业务高速发展需求,只能采购性能更好的硬件设备,对各功能模块分别独立存储,并对海量业务数据进行二次拆分。由于没有时间进行架构改造,只能通过购买硬件设备来支撑核心业务。那时,feed系统重度依赖MySQL,最高并发的时候,MySQL写入QPS飚到过4W。由于数据库性能问题,直接导致网站瘫痪,用户流失,当时的场景,老王至今记忆犹新。为了保障查询的性能指标,老王及其团队成员对索引和内容进行了拆分,各自分了很多端口,每个端口分出了很多的DB。
经过改造后的数据库,已经逐步趋于稳定,但是当峰值出现的时候,MySQL依然有查询慢的问题。并且,对于运维人员来说,运营维护不够自动化。为了解决这些问题,老王开始研究云端迁移的问题。
自建云端MySQL,还是选择成熟的云数据库?
为了保持数据的一致性,老王最开始考虑的是在云服务器上自建MySQL数据库。
毕竟MySQL是一个有着20多年历史的开源数据库,也是最流行的互联网开源数据库。尤其是MySQL升级到MySQL 8.0后,已经做了很多优化,有很多新特征。比如:支持了json的数据类型,实现了json数据类型的读取和访问,支持NoSQL接口等。
自建云端MySQL,便拥有了云的特征,包括:高可用,可弹性扩展,可简化运维等。但是,自建云端MySQL的弊端也非常明显:首先,云服务器成本太高,需要做软、硬件的配置。其次,自建数据库需要DBA自己来维护,安全性很难保证。尤其是由硬件故障导致的安全隐患,很难控制。还有,DBA的水平问题,也决定了数据库的稳定性。其三,部署周期太长,需要采购硬件,找机房托管,重新部署。对于老王来说,他们没有更多的人力、物力来解决这些问题。自建云端MySQL,无异于在给自己“挖坑”。
所以,老王决定还是直接选用成熟的解决方案。于是,“云数据库”跳入他的眼帘。
放眼望去,市场上可选的“云数据库”有很多。包括:AWS的Amazon Aurora,阿里的PolarDB、华为的云数据库MySQL等。如何去选型?
老王综合评估了下,认为有几点很重要:
第一,必须选择大品牌。A网站是大型社交网站,数据库就是企业的全部价值,老王不能拿网站的命运和自己的职业生涯做赌注。所以,云数据库产品必须位列前三。而AWS是全世界靠前大云计算提供商,占据了大部分市场份额。
第二,必须选择成熟的解决方案。选择把数据库迁移到云端,就是为了获得更好的性能,但是更高的性能要是以可靠性为代价,老王宁愿保持现状。况且,云数据库在中国毕竟是一个新概念,如果没有成熟的案例,老王不能去当这个“小白鼠”。从这点考虑, Amazon Aurora无疑最占优势。Amazon Aurora发布于2015年,经过三年的验证,已经得到了Autodesk、TIBCO、亚利桑那州立大学、通用电气、BMC、每日新闻等诸多客户的肯定。
第三,要在具备更高性能的基础上,兼容MySQL。Aurora的性能,毋庸置疑,作为云数据库领域的优异代表作,其吞吐能力多数比不上。很多数据库产品都把Aurora当做标杆,参考Aurora的架构去做。另外,做数据库最大的挑战就是兼容性。如果兼容性差,会让迁移成本高出很多倍,这也是为什么说中间件和分库分表是反人类方案的根本原因。Aurora恰好具备兼容性特点,完全可以覆盖MySQL和PostgreSQL。
第四,可托管。老王希望使用云数据库以后,可以减轻数据库维护压力。无需担心硬件、软件补丁、设置、配置或备份等数据库管理任务。并且,云数据库解决方案能提供自动监控功能,能够自动持续监控并将其备份到存储服务中,可以实现更精细的时间点恢复。在这一点上,Amazon Aurora也完胜同类解决方案。
第五,在数据库迁移过程中,不能影响业务运行。Amazon Aurora能快速启动,可直接连接到源数据库和目标数据库,能把停机时间缩到最短。用户可通过AWS DMS 创建表、加载数据并使其保持同步,随时将应用程序切换到目标。
如何迁移?
从本地MySQL到云Amazon Aurora,老王是如何迁移的呢?
从Amazon官网的迁移手册来看,Amazon Aurora有多种不同的迁移方法。A网站选择的是Percona XtraBackup备份工具,能支持全备及增量备份等。对比MySQLdump,XtraBackup 备份的是数据库的二进制数据及日志,并且文件可压缩得更小。这样,无论是备份和还原,速度都更快。
安装完备份工具后,再备份MySQL数据库,然后将备份 MySQL 文件上传到 Amazon S3。最后,在 Aurora Console 中还原备份文件到 Amazon Aurora。
数据库实例和实例监控
为了进一步优化成本并满足多个应用程序的额外要求,A网站执行了以下步骤:
1,根据 CPU 利用率自动调整 Aurora 副本的数量。不再持续运行多个副本,仅在需要时增加副本。
2,为所有集群部署Aurora快照工具,从而自动复制快照并实施30天的快照保留规则。使用控制台操作快照注入,Binlog复制的只读副本,DMS也可以访问数据库,并设置为源或者目标。
3,采用全量MySQLdump加增量Replication方式。但是,在 MySQLdump 导出数据并复制到目标数据库这段时间内,主库要设置为只读,避免新数据写入。
4,启用 CloudWatch Logs,创建 CloudWatch 指标和警报,从而持续监控 Aurora 数据库集群中的活动。
5,在决定迁移前,要做兼容性测试。我们可以定义Aurora的Master节点容量大小,临时测试环境可以使用t系列的机型,生产环境可以使用r系列的机型。可根据生产的压力选择合适大小的机型。
最终,A网站非常成功地把MySQL上的数据迁移到了Amazon Aurora。综合来看,在性能上高于原来的5倍,的确不只是传说。Amazon Aurora大大提高了原有数据库的性能和可扩展性,并且优化了成本。在峰值期间,系统能收到高于原来至少10倍的请求。
性能表现
自此,老王终于可以松一口气了。未来,他想把更多的关注点放在更有价值的业务上,而不是每天被各种纷繁复杂的琐事,忙得焦头烂额。
写在最后:
Amazon Aurora,一个最有魅力的极光女神,创造了全球云数据库之最。对于中国用户来说,很多人可能不怀疑他的技术能力,但是对于本地服务是否给力,心存疑虑。其实,AWS早已在布局中国市场,由光环新网运营的AWS中国(北京)区域和西云数据运营的中国(宁夏)区域提供与全球各地的其他 AWS 区域相似的技术服务平台。开发人员可以在中国境内轻松、高效地部署基于云的应用程序,使用相同的 API、协议和与 AWS 全球客户无差别的操作标准。
如今,AWS正在向中国用户大力推广Amazon Aurora,如果您想体验云数据库带来的极致体验,点击这里即可申请AWS 中国区域账户 >>