暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

OpenGauss数据库学习体会8小时训练营

原创 熊强 2021-09-15
833

**OpenGauss学习心得体会
**

一、OpenGauss是什么?
OpenGauss一款高性能、高安全、高可靠的企业级开源关系型数据库。

二、OpenGauss适用于哪些应用?
GaussDB(openGauss)是华为云深度融合在数据库领域多年的经验,结合企业级场景需求,推出的新一代企业级分布式数据库,支持集中式与分布式两种部署形态。在支撑传统业务的基础上,持续构建竞争力特性,为企业面向5G时代的挑战,提供了无限可能。
金融互联网交易
适合各中小银行互联网类交易系统,比如移动APP类、网站类等,具备兼容业界主流商业数据库生态、高性能、安全可靠等特点,推荐主备形态。
优势
安全可靠
支持SSL加密连接和KMS数据加密等功能,确保数据安全;支持数据库主备架构,主机故障时,备机自动升级成主机,确保业务连续性。
超高性能
高性能、低延时的事务处理能力,典型配置下sysbench性能数据高出开源数据库30%到50%。
政企OA/办公
适合政府和企业里OA/办公等管理支撑系统业务,兼容业界主流商业数据库生态、安全可靠、易使用等特点,支持单机和主备形态。
优势
安全可靠
支持SSL加密连接和KMS数据加密等功能,确保数据安全;支持数据库主备架构,主机故障时,备机自动升级成主机,确保业务连续性。
简单易用
支持丰富的SQL、存储过程、自定义函数,提供丰富的API接口,高度兼容业界主流商业数据库生态

三、OpenGauss有哪些硬核能力?
未来云数据库会朝多元化、开放融合、云原生分布式方向发展,智能运维与自治数据库会大有可为,OpenGauss的云原生、分布式、自治与智能运维能力,突显硬核优势和能力。
华为云数据库产品总监张昆,曾经分享过,华为云数据库GaussDB的产品革新与实践。他提到,云、AI、5G等技术驱动数据库行业新需求,云数据库不断演进升级。依托华为云与华为云Stack,通过全栈软硬件优化,华为云GaussDB进行了进阶与革新,以统一的分布式架构,支持关系型与非关系型的数据库引擎,并分享了GaussDB在金融、电商、游戏等行业中的优秀实践。在关系型领域,GaussDB除支持华为开源生态openGauss外,也100%兼容MySQL和PostgreSQL开放生态,存储容量更大,性能更优,适用于企业多样化的数据库应用场景。非关系型领域,GaussDB 100%支持MongoDB、Cassandra、Redis、InfluxDB等NoSQL协议接口,提供极致性能、企业级可靠性、灵活全托管等服务能力。
华为云数据库资深内核专家范逸鸣,曾经分享过,华为云GaussDB(openGauss)社区及商业版的关键特性。GaussDB(openGauss)是华为云深度融合数据库领域多年经验,结合企业级场景需求,推出的新一代企业级分布式数据库。openGauss社区版以集中式主备部署为形态,继承GaussDB稳定可靠、高性能、丰富特性等优势,同时积极参与openGauss社区,保持长期演进。GaussDB(openGauss)商业版架构上着重构筑传统数据库的企业级能力和互联网分布式数据库的高扩展和高可用能力,在支撑传统业务的基础上,持续构建高性能、高安全、生态兼容等竞争优势,为企业面向5G时代的挑战,提供了无限可能。
华为云数据库将持续构建技术硬实力和优秀解决方案,催化行业数字化转型,致力于中国数据库技术腾飞辉煌的明天!
四、OpenGauss技术架构怎么样?

1.jpg
2.png

3.png

从OpenGauss的体系架构来看,应用与数据库的连接支持,链接的驱动支持基本上都能满足常见应用的需求,JDBC是java类应用的数据库连接驱动,ODBC是标准化的数据库连接。
GaussMaster线程、gaussdb线程,从字面上的意思理解,线程和轻量级纤程,只适用于windows系统,而高并发正是衡量数据库是否真正适合于大型企业业务系统的关键,OpenGauss通过线程池化,空间换性能的办法,提升对高并发的支撑能力。
Pagewrite线程,页面写,尤其是大页的支持,在整体性能的优化中作用比较重要。
Bgwrite线程、walwriter线程、checkpointer线程都是数据库的基本功能线程。
Instance实例的内容与 oracle数据库比较相似。后台辅助线程,提升和扩展了OpenGauss的能力。
数据库文件类型定义齐全,离线数据保护有Archived WAL、审计有pg_audit等等。配置文件与按不同的需要详细分类,即做到了功能齐全,也做到了分类合理。
OpenGauss逻辑模块
4.png

OpenGauss高可用保障

5.png

6.png
如果应用的大并发为10万,则后台需要的线程就要与之相对应。
在内存与CPU的开销、IO的队列都要求与之相匹配。
7.png
从第一点看,使用的就是长连接的形式,用空间来换取稳定性。
从第二点看线程复用,其前提是一个事务完全结束,如果要保证事务的完整性和可回朔性,线程复用,一定要有另外一种机制来保证事务的可回朔性,类似于有oracle 闪回查询的功能,或使用和oracle数据库一样的闪回数据库日志和快照的方法,用空间来换稳定性和安全性。

从第三点来看,高并发需要有连接池和 线程池结合起来使用,说明架构的设计应该是以三层架构为基础。

CLOG日志即事务提交日志,用来记录事务的最终状态,是XLOG日志的辅助,用来加速通过日志判断事务状态的过程,存在四种事务状态。IN_PROGRESS COMMITED ABORTED SUB_COMMITED
每条日志占2bit ,clog需要存储在磁盘上,一个页面8K ,按照页面分区加锁。
我在想如果一个页面分区8K,如果是OLAP系统,如何能够优化海量的数据读并减少海量数据的读次数,如果可以调整默认的 8K,是不是更适合于OLAP。

针对事务的完整性来看,拥有事务槽也是事务可回朔的重要保障。

ThreadPoolControler:线程池总控,负责线程池的初始化和资源管理
ThreadSessionControler :会话生命周期管理
ThreadPoolGroup:线程组,可以定义灵活的线程数量和帮核策略
ThreadPoolListener: 监听线程,负责事件的分发和管理
ThreadPoolWorker: 工作线程

  1. 客户端向数据库发起连接请求,PostMaster线程接收到连接请求并被唤醒求。PostMaster线程创建该连接对应的socket,以及创建session数据结构。遍历当前所有的Thread Group,找到当前活跃session数量最少的Thread Group,并把最新的session分发给该Thread Group,加入到该Thread Group 的epoll列表之中。
  2. Thread Group的listener线程负责监听epoll列表中所有的客户连接。
  3. 客户端发起任务请求,listener线程被唤醒。Listener线程检查当前的Thread Group 是否有空闲worker线程,如果有,则把当前session分配给该worker线程,并唤醒该worker线程;如果没有,则把该session放在等待队列之中。
  4. worker线程被唤醒后,读取客户端连接上的请求,执行相应请求,并返还请求结果。在一次事务结束(提交、回滚),或者事务超时退出的时候,worker线程的一次任务完成。worker线程将session返回给listener线程,listener线程继续等待该session的下一次请求。worker线程返还session后,检查session等待队列,如果存在等待响应请求的session,则直接从该队列中取出新的session并继续工作;如果没有等待响应的session,则将自身标记为free状态,等待listener线程唤醒。
  5. 客户端断开连接时,listener线程被唤醒,关闭连接,同时清理session相关结构,释放内存和fd等资源。
    五、OpenGauss数据库如何保持事务强一致性?

1、 事务的持久性主要通过预写式日志WAL算法实现。在事务提交时,采用预写式日志方式,把REDO日志写到磁盘。
2、 检查点:将脏缓冲队列上的全部数据写出到数据文件 。

  1. 每一个脏数据库块都会被记录到脏页队列,按照第一次对此数据块修改时日志的LSN顺序来排列,如果一个数据块进行多次修改,该数据块在脏页队列中的顺序并不会发生变化。

  2. 在执行增量检查点时,把一定LSN之前的脏页刷盘,不需要把所有dirty buffer 全部写到磁盘。

  3. IO均分到各个阶段,性能更加平稳。

  4. Checkpoint点效率和频率更高,减少宕机恢复时间,降低RTO。
    保证强事务的一致性。

六、OpenGauss企业应用场景

1、联机事务处理(OLTP): 存储/检索业务应用中活动的数据以支撑日常的业务活动;
2、联机分析处理(OLAP):存储历史数据以支撑复杂的分析操作,侧重决策支持;

OpenGauss同时支持行列混合存储,行查询、列查询,在技术上已经超越了某些数据库的能力。

OpenGauss在金融风控领域的使用也是非常成功的,高并发、低时延、可业务编程。

1、图灵奖获得者Micheal Stonebraker:磁盘架构70%左右指令在等待锁/闩,仅不到30%CPU做有用功。
2、内存数据库在保证ACID的前提下,以Lock-free无锁方式实现事务处理,能有效规避磁盘架构缺点:
CPU利用率高,一般可达80%以上,提升硬件投资回报;
时延低,没有锁/闩等待,事务处理延迟低,满足实时业务;
8.png
① 高度优化的全内存免锁存储引擎
② 基于全内存优化实现的免锁索引
③ 高度优化的并发访问控制
④ 针对NUMA优化的内存管理,预缓存对象池
⑤ 针对NUMA高度优化的组提交
如果没有锁, 如何做到写不影响读,保证事务的高并发和事务的一致性,这个我暂时还没有想透。
许多人在同时读或写一张表时,表不加锁,如何能保障事务的致性、完整性、可用性、有效性,等有时间再深入的研究和测试一下。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论