He3DB 系统架构03

He3DB的架构:

白板上写着字

描述已自动生成

核心能力评估:

性能: 100W,TPS>10 w

He3DB 参考Aurora的论文。实现log is database:

  • 计算引擎仅写wal日志,不写数据页,也就是计划引擎往存储引擎只写日志,存储引擎异 步回放日志变成数据页,并给计算引擎提供多版本数据页(区别于MVCC多版本,这个是数据页多版本)
  • 为了进一步降低WAL 日志量,我们关闭WAL full page write. PG为了解决半页写的问题,checkpoint 后的第一次页修改,WAL日志会记录整个数据页。 关闭fpw以后,由数据页的原子写由底层存储引擎保证

写性能: 高并发写数据时,因为只写WAL,相对单机PG,磁盘利用率能够提升2倍以上,对应数 据库,磁盘IO一直是制约写吞吐最重要的因素。通过这种优化,评估写TPS提升2-3倍 主备之间没有日志同步,WAL日志数据写入到底层高性能存储层,由存储层通过RAFT算法 实现WAL日志的多副本存储,相比传统的PG主备WAL流复制同步数据方式,主节点负载更低(只有一个写节点,主节点做的工作越少越好) * RAFT同步算法相比PG传统的流复制方式,性能优化空间更大。例如leader节点收到WAL数据后,会同步本地持久化存储,同时并发往其它follower节点同步wal日志(如果是PG,使用串行的方式同步日志,先写本地盘,然后再同步其它备节点)

通过这种优化,HE3DB的写性能完全能够实现TPS>10w的指标

读性能:

  • 控制主备绝对时延<30S:备机实现WAL delay replay(只回放内存中有的数据页)技术。实现日志回放由磁盘IO转化为内存IO的优化。
  • 智能中间件:中间件跟计算引擎交互过程中,能够精准知道主备数据差异,根据用户访问的数据,选择最佳读节点,保证读强一致性的同时尽量保证每台备机负载均衡。最终实现通过增加备机,线性增加读吞吐能力
  • 冷热分层设计:实现支持不同的备机能够设置缓存不同的表数据,对应每个备机的date buffer(内存)缓存不同的表数据。当备机回放WAL时,只会回放内存中存在的数据页. 通过这种设计,能够把不同备机的Date Buffer串联起来,变成一个大的内存池,加上冷热数据设置,保证内存缓存中始终最热的数据。从而解决大数据量时,内存命中率低的问题(只要是热数据,HE3DB就能够保证整体命中率保持在一个比较高的水平)

关于内存池的设计,我们也看到一些论文把计算引擎中的内存拆解出来,通过RDMA组合所有的内存形成一个内存资源池。我们认为这种设计并不太适合HE3DB:

  1. 增加成本(使用RDMA的成本);
  2. 技术实现复杂,也不够成熟,不利用快速推向市场;
  3. 基于新硬件,不利于开源 关于通过中间件提供读一致性,其实很好理解,如果中间件能够知道精准的感知主备delay,中间件收到请求后,就能选择正确的备节点,并保证一致性读。例如:一个数据库实例,只有少部分表更新频率比较高,如果用户读那些更新频率慢的表,那么备机上的数据绝大部分时间是最新的。所谓智能中间件,只是通过中间件把这种选择变成一个自动化的过程,并且对用户透明(如果用户通过中间件访问数据库服务),后续我们会有专门的文章介绍这部分的设计

备份:

  • 备份过程对业务零影响:He3DB的备份模块单独拆解出来,实现直接操作S3存储完成备份过程,所以备份动作可以任意时间启动,根本不需要任何时间窗口,对业务也没有任何影响
  • 备份速度:部分速度主要取决于存储引擎的吞吐,因为存储引擎是分布式的,所以能够并行进行,很容易实现10G/S,相比单机备份速度提升非常明显

低成本:

三个方面控制成本,总体思路以serverless的方式提供数据库服务:

成本跟使用的资源密切相关,He3DB的资源使用被切分成三层(计算层,高性能存储层,低性能持久层),每一层能够基于负载情况,单独完成扩缩容:

  • 计算引擎:通过中间件感知业务负载,基于业务实时负载,实现秒级扩缩容,未来中间件会进化成大脑,协调各种资源的扩缩容,甚至数据冷热感知
  • 高性能存储层: 虽然HE3DB一直强调是低成本,但是高性能也是我们给用户的承诺。为了兼顾高性能,低成本。存储层进一步细分出高性能存储层:这一层主要用于写同步路径,以及缓存热数据。高性能存储层通过缓存热数据,保证资源利用率最大化,相比缓存所有的数据,同样达到节省成本的目的,
  • 低性能存储层: 主要用于持久化存储所有的数据,这一层主要存储冷数据,所以会启动极致压缩,使用低成本硬件。唯一要保证的就是数据高可用能力。

从上面HE3DB的设计解读来看,冷热分层是HE3DB最核心的设计(解决内存命中率低的问题,高性能的问题,低成本的问题)。下面我们详细介绍这部分的设计思路, 在设计冷热分层架构之前,我们先以一些问题展开思考?

什么数据是冷数据,什么数据是热数据,如何界定冷热数据?

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: