GaussDB NoSQL架构设计分享
摘要:文章总结了当前数据库的发展趋势、GaussDB NoSQL关键技术解密以及核心竞争力。
本文分享自华为云社区《华为云GaussDB NoSQL云原生多模数据库的超融合实践》,作者:华为云数据库GaussDB(for 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概况
接下来介绍这次分享的主角——云原生多模数据库GaussDB NoSQL。
当前GaussDB NoSQL已经支持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提供超融合数字化解决方案
华为云GaussDB NoSQL的多模特性,提供高并发、低时延的Redis,助力秒杀、推荐、热搜等场景;提供大容量、高频写的Cassandra,助力海量存储以及检索等场景;提供非结构化、灵活扩展的MongoDB,助力大数据分析、交易等场景;提供时序特征的InfluxDB,助力边缘计算、工业生产、实时监控等场景。
以上场景涵盖数字工业的方方面面,提供了完整的一体化解决方案,方便用户一站式使用。

本文整理自华为云数据库NoSQL架构师余汶龙的专题分享——云原生多模数据库GaussDB NoSQL架构设计,总结了当前数据库的发展趋势、GaussDB NoSQL关键技术解密以及核心竞争力。
GaussDB NoSQL架构设计分享的更多相关文章
- iOS网络层架构设计分享
前言 前些天帮公司做了网络层的重构,当时就想做好了就分享给大家,后来接着做了新版本的需求,现在才有时间整理一下. 之前的网络层使用的是直接拖拽导入项目的方式导入了AF,然后还修改了大量的源码,时隔2年 ...
- 分享二:架构设计分享一:关于API分布式服务提供方式
一:基于HTTP协议的Web API 1:RESTful API http://www.ruanyifeng.com/blog/2011/09/restful 二:
- Java进阶专题(十八) 系统缓存架构设计 (下)
前言 上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因.很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等.这 ...
- 一套海量在线用户的移动端IM架构设计实践分享(含详细图文)(转)
1.写在前面 1.1.引言 如果在没有太多经验可借鉴的情况下,要设计一套完整可用的移动端IM架构,难度是相当大的.原因在于,IM系统(尤其是移动端IM系统)是多种技术和领域知识的横向应用综合体:网络编 ...
- ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)
点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...
- sns社区架构设计案例分享
今天看了个社区,了解了一下该产品的架构设计,做一下分享. 内容来源:http://www.jinhusns.com/Document/FrameworkDocument/?type=cc 一. 架构使 ...
- web架构设计经验分享(转)
本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...
- Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享
Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...
- 字节跳动前技术总监开源分享《Android架构设计权威指南》,YYDS!
架构就像是一场进化史,根据不同时期的需求,演变出不同的架构,车轮滚滚,到今天,移动端框架百花齐放,让人目不暇接.但是其中的本质是磨灭不了的,换言之根本没有磨灭而是隐藏到了人们所看不到的地方,但是依旧发 ...
- 分布式抽奖秒杀系统,DDD架构设计和实现分享
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.用大项目,贯穿知识体系 写CRUD.堆API.改屎山⛰,熬多少个996也只是成为重复的螺丝 ...
随机推荐
- ELK-日志收集-Kibana WEB安全认证
1.ELK收集MYSQL日志实战: 日志收集存放目录位置: /usr/local/logstash/config/etc/ 1)日志采集-存入redis缓存数据库:mysql-redis.conf ...
- Unity 代码调用重新生成csproj文件
结论 先放结论:editor代码中直接调用 Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll(); 原因 在一些操作后,比如修改csc.rsp的内容之 ...
- P9482 [NOI2023] 字符串 题解
\(36pts\) \(O(tqn^2)\)暴力即可 \(40pts\) 对于最朴素的暴力优化,从头到尾扫,如果已经当前位字符比出优先级,那么直接能判断了,没必要往后跑了,第15个性质B的也给跑过了, ...
- uni-app小程序项目发布流程
uni-app小程序项目发布流程开发工具:HbuilderX编辑器.微信小程序开发工具1.小程序开发工具就可以点击发行版本了 2.登录开发者平台配置域名白名单 在开发者设置里完成服务器域名配置(域名白 ...
- Windows Terminal 简单美化
需要用到的软件/插件 oh-my-posh posh-git PSReadLine 安装 oh-my-posh oh-my-posh 是 shell 主题引擎,使用 winget 来安装 oh-my- ...
- nginx的location与proxy_pass指令超详细讲解及其有无斜杠( / )结尾的区别
本文所使用的环境信息如下: windows11 (主机系统) virtual-box-7.0环境下的ubuntu-18.04 nginx-1.22.1 (linux) 斜杠结尾之争 实践中,nginx ...
- [cnn]cnn训练MINST数据集demo
[cnn]cnn训练MINST数据集demo tips: 在文件路径进入conda 输入 jupyter nbconvert --to markdown test.ipynb 将ipynb文件转化成m ...
- C# 提取PDF中指定文本、图片的坐标
获取PDF文件中文字或图片的坐标可以实现精确定位,这对于快速提取指定区域的元素,以及在PDF中添加注释.标记或自动盖章等操作非常有用.本文将详解如何使用国产PDF库通过C# 提取PDF中指定文本或图片 ...
- MybatisPlus高级特性之SimpleQuery工具类
1.是很么? SimpleQuery可以对selectList查询后的结果使用Stream流进行操作,使其可以返回指定的结果,简洁了api的调用 2.怎么玩? 案例演示 (1) list操作 /** ...
- 1、GO语言入门-环境准备
1.Windows开发环境准备 (1)Golang编译器下载 golang中文网:https://studygolang.com/dl 或者:https://go.dev/dl/ (2)下载解压,找到 ...