GaussDB NoSQL 架构设计分享
摘要:文章总结了当前数据库的发展趋势、GaussDB NoSQL 关键技术解密以及核心竞争力。
本文分享自华为云社区《华为云GaussDB NoSQL云原生多模数据库的超融合实践》,作者:高斯 Redis 官方博客。
数据库发展趋势
1. 行业市场
中国信通院最新研究透露出两个重要信息:
未来几年,中国数据库市场将保持 23.4%的年复合增长率,中国数据库市场在全球的份额,将从 2020 年的 5.2%提升到 12.3%;
中国的国产数据库产品虽然以关系型为主,非关系型为辅,但从 2000 年以后,以图、时序等为代表的非关系型产品发展势头越来越好,截止 2020 年底,国产 NoSQL 数据库厂商已经占到了 40%。

2. 行业趋势
受大环境的影响,国内金融、电信、政企等行业为防止潜在的供应链风险,技术层面存在国产化需求,这使得我们的国产数据库产业进入蓬勃发展的初期。
但我国数据库行业发展还面临 2 个核心问题:
如何缩小“高要求的存量数据应用”与“仍处于发展初期阶段的供给能力”之间的差距;
如何匹配“创新型数据应用”与“数据库技术演进”的合理映射关系。
如何回答上述两个问题,可以从中国信通院最新的趋势总结里找到答案:“多模实现一库多用,简化开发运维成本”、“云原生降低硬件依赖,更方便的享受新兴技术红利”。
因此,为了更好的兼容历史数据应用(比如原先用 Redis),并支持好未来的创新应用(新增 Influx),可以在多模与云原生领域提前做好相关布局。

3. 云原生数据库演进方向
数据库的发展,按传统物理机部署到云化,大概经历了三代。
第一代是纯物理机、裸硬盘部署,从业人员必须关心硬件的各种细节,包括机型、系统、硬盘、组网等等;
第二代是云化的初级阶段,从业人员把数据库部署从物理机,迁移到虚拟机 VM,把物理硬盘,换成了云盘 EVS。但这一代有个明显的缺点,EVS 是个 3 副本可靠的服务,再加上数据库自身的高可用,那么存储成本就放大了 3 倍;并且备机其实是资源浪费的,没有提供服务;
第三代是云化的高级阶段,这个阶段将数据库的资源,彻底分成存储和计算两层,其中计算资源部署在更轻量级的容器之上,而存储资源部署在分布式存储池之上。很显然,这是与云原生结合更彻底的方式,充分享受了架构的弹性、便捷,而且轻松实现了多点读写的全负荷分担能力。

4. 存算分离,分而治之
云原生数据库有两个重要的特点。首先是存算分离。
存算分离是一种分层的设计思想:
从逻辑到功能进行明确的划分,让计算层更聚焦服务、产品、协议处理等事件;
存储层更聚焦数据本身的复制、安全、扩缩容等等。

5. 多模归一,一生万物
云原生数据库第二个重要的特点,是多模。
多模实际上是一种“归一”,也是一种“派生”。以大家熟悉的 NoSQL 为例,MongoDB 是有 Mongod/Mongos/Config 等组件,而对应的 Cassandra 其实也有 Coordinate Node/Data Node 等组件。虽然这些组件名字不同,但背后做的事情是一样的,即:集群管理、副本管理、扩缩容管理、以及管控等功能。
其实,完全可以把这些功能抽象成统一的架构,即“多模归一”。在这套统一架构之上,我们再新增别的引擎就很容易了。可以快速复用当前的成熟架构,提供不同的协议接口即可,即“一生万物”。

6. GaussDB NoSQL 概况
接下来介绍这次分享的主角——云原生多模数据库 GaussDBNoSQL。
当前 GaussDBNoSQL 已经支持 MongoDB、Cassandra、Redis、InfluxDB 等 4 款引擎;全球客户 1000+,足迹遍布金融、政府、电信、互联网等行业;总数据量超过 10PB,每日新增超过 10TB。
GaussDB NoSQL 关键技术
1. Compaction 卸载
GaussDB NoSQL 采用 LSM 做存储引擎,正常情况下,前台的读写会受到后台的 Compaction 任务的影响,从而导致时延抖动。
因此,我们设计了单独的 Compaction 任务节点,通过共享的方式,访问用户的数据并进行 Compact,再将 Compact 的结果应用到用户的可见版本中。这样做的话,就将用户前台的 IO 和后台 IO 分离,解决了时延抖动问题。

2. Flush 卸载
根据 LSM 引擎的写入流程,可以知道,一个数据要写入 DB 中,需要经历两次 IO:
写 WAL
flush memtable
而这两次 IO 写的其实是相同数据,完全可以省掉一次。因此,我们借助共享存储的能力,独立出一个后台任务节点。当用户前台节点需要 flush memtable 的时候,由后台任务节点读取 WAL,并转化成 L0 层的 SST,再应用版本,并通知前台删除 memtable。这样就极大节省了用户前台的 IO 开销。

3. 分裂
GaussDB NoSQL 在分片策略上,采取的是 Hash + Range 的结合方式,因此扩容或处理热点的时候会很灵活。
比如,当 chunk 数量足够多时,只需要移动 chunk 就可以扩容;而当某个 chunk 成为访问热点时,对它做分裂就可以解决局部热点问题。

4. 3AZ 容灾
作为数据库产品,容灾特性是很重要的,它可以避免极端情况给用户业务带来的灾难性损失。
GaussDB NoSQL 有统一的容灾设计,即存储和计算可以实现 3AZ 部署,同时存储层数据实现 3 副本强一致复制。因此在任意时间,挂掉了任意机房的存储,都不会丢数据;而挂掉计算,也会被其他 AZ 的计算节点接管元数据,不会让访问完全中断。

以 Redis 为例看 GaussDB 竞争力
接下来,以使用最广泛的 NoSQL 引擎 Redis 为例,具体介绍 GaussDB NoSQL 的优势。
1. 强一致
社区版 Redis,主从复制是异步的,容易造成数据堆积,也有宕机丢数据风险。
GaussDB(for Redis)(下文简称高斯 Redis)则是采用强一致同步的,当用户的数据写入高斯 Redis 并收到返回 OK,这意味着高斯 Redis 已经实现了强一致的复制,数据的安全性很高。当然,这里的复制过程采用了组提交、用户态文件系统、RDMA 等技术来降低同步复制的时延。

2. 高可用
高斯 Redis 的数据存储是共享的,即 Shared Everything,因此可以容忍最多 N-1 个节点故障,而不影响数据的访问。

3. 弹性伸缩
高斯 Redis 实现了分层弹性,将资源准确的划分成计算资源、存储资源,真正做到了按需扩容:
当用户的计算不足时,只需要扩展计算节点;
当存储空间不够时,只需要扩展存储空间即可。
同时,扩容过程也足够流畅:
计算扩容的过程,不需要拷贝数据,只需要修改路由映射即可,对业务侧的影响很小;
存储扩容更简单,只需要修改配额即可,对业务侧零影响。
所以计算、存储的扩容都足够轻量级,可极速完成且对业务干扰极小。

4. 全负荷分担
存算分离的设计,让我们把数据复制交给了存储,计算层则完全解放。
每个节点都可以承担用户的读写请求,这跟开源 Redis 的主上读写来比较,实现了 2 倍扩展。

总结
云原生是技术趋势
云原生是大势所趋,越来越多厂商和从业者都在提倡云原生,而华为云 GaussDB NoSQL 不仅仅基于云原生,还实现了多模架构,实现了多副本强一致、高可用、弹性伸缩、高性能等能力,以及具备资源复用、开发运维统一等好处。
华为云 GaussDB NoSQL 提供超融合数字化解决方案
华为云 GaussDBNoSQL 的多模特性,提供高并发、低时延的 Redis,助力秒杀、推荐、热搜等场景;提供大容量、高频写的 Cassandra,助力海量存储以及检索等场景;提供非结构化、灵活扩展的 MongoDB,助力大数据分析、交易等场景;提供时序特征的 InfluxDB,助力边缘计算、工业生产、实时监控等场景。
以上场景涵盖数字工业的方方面面,提供了完整的一体化解决方案,方便用户一站式使用。

本文整理自华为云数据库 NoSQL 架构师余汶龙的专题分享——云原生多模数据库 GaussDBNoSQL 架构设计,总结了当前数据库的发展趋势、GaussDBNoSQL 关键技术解密以及核心竞争力。
本文作者:华为云数据库 GaussDB(for Redis)团队
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/5fa18b43ef0243a67ea945574】。文章转载请联系作者。
评论