云计算:云数据库
2019-03-15 22:01:47云上的关系型数据库
关系型数据库的应用在业界是最普遍的,也是云数据库首先进入的领域。这里的先行者同样是 AWS,早在 2009 年就发布了 RDS(Relational Database Service),后来其他的厂商也纷纷开始跟进。
云数据库在外部交互的层面上,保持了和传统“原版”数据库几乎完全一致的编程接口和使用体验。
比如说,你针对 MySQL 编写的 SQL 代码和应用层连接代码,包括你很熟悉和经常会使用的连接管理工具,除了要更改连接字符串和参数之外,都能够几乎不经修改地在云数据库的 MySQL 服务上运行。
另外,针对某个数据库的某个具体版本,云厂商们会把它的功能、内部机制完整地保留下来,以求获得最大程度的兼容性。早期比较简单的云数据库实现原理,是充分利用云上已经提供的虚拟机、云磁盘等 IaaS 层面的资源,在隔离的环境下进行数据库镜像的安装。而后来技术实力比较强大的厂商,还能够做到对数据库源码和模块的深度定制,在保证兼容性的前提下,进行许多对用户透明的云端适配和优化。
所以,云数据库尽管是一个受限的 PaaS 环境(比如它通常无法让你直接访问底层的服务器),但在使用体验上和传统数据库是相当一致的。你大可放心,之前积累的 MySQL 和 PostgreSQL 的知识,在 RDS 上也大都可以适用。在云上,你也同样能够找到和安装一些数据库的常用插件,来增强 PaaS 数据库的功能。
云数据库和传统数据库又很大的区别,这是指在搭建、运维、管理层面,云数据库提升了一个层次,实现了相当程度的智能化和自动化,极大地提升了用户友好度,降低了使用门槛。比如灵活的性能等级调整、详尽的监控体系、攻击防护机制等等,这些许多在传统数据库中需要借助额外工具或产品的功能,在云数据库服务是默认内置,可以开箱即用的。
除了这些基本能力外,还有两个最具代表性的云上关系型数据库的高级特性:
- 支持读写分离。当并发数量上升时,关系型数据库容易出现性能瓶颈。这时比较有用的办法,就是实现基于多库同步的读写分离。云数据库在产品后台略加操作,就可以启用这个功能:从创建从库到建立同步,再到读写流量分发,云数据库都能自动完成。
- 支持自动调优。对于数据库来说,同样和性能有关的一个重要工作,就是性能的调优。以前我们经常需要手动地观测性能瓶颈,找出热点查询,再考虑是否有改进性能的办法。而在现代云数据库中,都自带有性能分析与改进的模块,能够自动地发现性能热点,甚至还能够智能地给出调整建议,比如进行个别语句的调整,甚至添加额外的索引等等。这个性能分析和自动调优的能力,是将生产运行数据和服务内置的 AI 模型进行了结合,是真正的智能化运维,毫无疑问,这大大增强了云上数据库的竞争力。如果你有线上的云数据库,一定不要忘记观察它自动给出的结果和建议,很可能会给你带来惊喜和帮助。
新一代云原生数据库
出于生态发展和降低学习难度的需要,绝大多数的云原生数据库仍然保留了 SQL 等常见接口(有的还支持不同 SQL 方言的选择),但除此以外,云原生数据库大都进行了全面革新和重新设计,有的云会大刀阔斧地改造开源代码,有的甚至脱离了现有包袱,完全重新构建。
如下图,按照厂商和云数据库的类型进行了梳理和比较。其中,标红的部分是相当值得你关注的自研云原生数据库。
云原生数据库在使用时,有什么优势和特点呢:
- 更强的可扩展性
得益于原生设计的计算存储分离架构,云原生数据库可以支撑更大规模的数据量,突破了传统关系数据库服务的单机单库限制。比如说,关系型云原生数据库能够脱离典型的数 TB 的容量上限,达到单库数十 TB 甚至百 TB 的级别。这和它单独专门为云设计的存储架构是分不开的。
算力方面也同样如此,云原生数据库可以利用云快速地进行水平扩展,迅速调整、提升数据库的处理能力。在分布式架构的加持下,它相比以前单机数据库的计算查询能力有了成倍的提升。所以,云原生数据库往往善于处理大并发的负载,可以提供很高的 QPS。其次,更高的可用性和可靠性。 - 更高的可用性和可靠性
和传统 RDS 服务不同,云原生数据库往往默认就是多副本高可用的,数据同步、读写分离等高级特性是作为原生机制的一部分天生存在的。像 Amazon Aurora 中的存储部分,就自动包含了分布在 3 个可用区、多达 6 份的数据副本。
得益于原生数据同步机制的底层设计,云原生数据库还能很方便地支持跨区域的实例复制,在进一步增强冗余的同时,还能便于就近服务全球用户。 - 多种数据模型(multi-model)的支持
除了兼容关系型数据库外,云厂商还会针对不同的场景进行针对性的研发和优化,结合数据库业界最新的流行趋势,推出适合不同形态和查询范式的云数据库,与 NoSQL 数据库进行积极竞争。
比如说,AWS 的键值型数据库 DynamoDB 和图数据库 Neptune,都是相应领域中非常优秀的产品。而 Azure 的 Cosmos DB,则采用了另外一种做法,在一个数据库产品中同时内置了多种数据模型的支持,也同样取得了成功。