- 高防服务器 HOT
-
产品中心
- 服务保障
- 代理加盟
字节云数据库架构分为四层,示意图如下:
DBEngine 层:我们对外会提供完备的数据库,兼容全面的数据库生态,包括 Mysql、PG、ES、Mongo 等;同时我们也支持混合负载,即 HTAP。
DB-Cache 层:这一层会存储两类数据,一类是日志流,另一类是用户数据的缓存。我们在这一层引入一些新的硬件进行加速,为用户提供极致的性能体验。
DB-Store 层:这一层是低成本、跨 AZ、多格式的 DB-Store 层,用于存储用户数据。DB-Store 层是一个分布式的存储平台,它支持插件式的存储格式,比如 veDB 中的行存格式、 ByteHTAP 的行列混合格式;它也支持 Segment 级别的 PITR 特性,提高数据的可用性;它还支持压缩 和 Tail Segment 的特性,来极致降低存储成本。
Store 层:这一层是冷数据存储层,用于存储备份数据或者分层的冷数据。
Severless:目前 veDB 部署在字节内部虚拟机上,同时我们支持在火山引擎上进行容器化部署。我们希望通过当前正在探索的 Serverless ,为用户提供 pay by usage 的计费模式,提供自动 scale up 和 scale down 能力,来充分提高空闲资源的利用率。
Brian:这是数据库的“大脑”,负责提供 AI 能力。
字节云数据库架构的特点是支持三个分离,一是存储与计算的分离,二是日志和数据的分离,三是缓存与计算的分离。
业界的很多产品证明了 veDB 云原生数据库架构具有着强大优势,如下:
但是这种存储与计算分离的架构也有一定的劣势:
存储和计算分离后,我们将存储拉到远端的分布式存储系统上,会导致计算和存储之间的延时增加。之前 MySQL 在本地访问 nvme,访问时间大概在微秒级别,但是经过网络延时后,访问时间在毫秒级别。因此我们提出一个设想,是否有一个能和本地 NVME-SSD 同样快且稳定的存储层?新硬件的持久化内存和 RDMA 的出现为上述设想提供了可能。
在过去几十年间,计算机系统已经实现了如下金字塔型存储结构。
金字塔上层是易失存储,容量小,延时低;金字塔下层是非易失存储,容量大,延时高。对于 DRAM 及以上的易失存储,CPU 可以通过 Load 和 Store 指令直接访问,响应时间大致在几十纳秒到 100 纳秒级别。对于 SSD 及以下的非易失存储, CPU 就无法直接访问,企业级 SSD 的响应时间可以达到 10 微秒到 100 微秒的级别。由此可以看出 SSD 和 DRAM 之间存在差不多 100 多倍的性能差距,在访问时延上存在一个很大的跳变,但是持久化内存的出现弥补了它们之间的性能鸿沟。
持久化内存(PMEM)位于 DRAM 和 SSD 之间,它具有以下几个核心的特性:
在数据库领域,持久化内存目前主要有两种使用模式,模式一:将其作为一个单机的持久化层,用来加速单个计算节点的性能;模式二:把它拉远做一个分布式的持久化池。作为 veDB 产品的扩展,字节数据库团队在架构上是将 PMEM 作为分布式的共享存储池,用于加速 veDB 的性能。相对于第一种单机模式,拉远的存储池存在一个缺陷:它仍旧需要通过网络来访问,性能低于单机的持久化内存。但是 RDMA 的出现能够有效弥补该缺陷。
RDMA 是一种远程直接内存访问的技术。在传统的 TCP/IP 协议中,数据传输时会经过多次的数据拷贝,以及经过 CPU 的内核上下文切换。数据需要经历从用户态到内核态,从内核态再拷贝到网卡。同时,TPC/IP 协议会有一些处理开销,包括 Buffer 管理,协议栈管理,以及发送完之后系统中断引起的开销。RDMA 技术能够帮助计算机直接存取另外一个计算机的内存。
RDMA 具有以下三个核心优势:
基于以上 PMEM 和 RDMA 的新硬件加持,存储系统能够提供极低的延时,非常适用于对性能要求很高、容量无需很大的场景,比如存储系统中的 Cache、WAL 日志、内存数据库等。
基于 AEP + RDMA 硬件,数据库团队设计了分布式、高性能存储系统——A-Store。A-Store 对外提供的语义是 Append-only 写接口和随机读,支持 RDMA 单双边的消息。
从图中可以看出,A-store 架构包含三个模块:
最后,A-store 架构具有三个核心特点:一是高性能,硬件直通设计,旁路 Server 软件栈,IO 路径是完全无锁化的设计,也没有拷贝;二是分布式,底层的 Server 层可以扩展;三是高可用,存储在 AEP-Server 的数据,一般都支持多副本部署,目前我们一般部署三副本,保证数据的高可靠性。
A-Store 主要有以下两个应用方向:
在之前的 veDB 部署中, Redo 日志是通过 Logstore 的组件,将数据写到了远端的 Append only 的分布式系统。当我们引入 A-Store 之后,我们将会替代原来的 Logstore 的组件,将 A-Store 的 SDK 集成到 DB Engine 内部。相比之前的 Logstore 实现,A-Store 具有两个优势:
Redo 日志的写速度,对于写负载是非常重要的。在我们目前的测试中,替换成 A-Store 之后,对于纯写的场景,性能能够提高 20% -30%;线上真实 Workload(write-heave),性能提升 2 倍+。
原生的 mysql 处理查询都是单线程的处理模型,访问数据时都要先去判断数据是否在 Buffer Pool 中,如果不在,我们需要通过同步的接口把数据从远端存储拉到 Buffer Pool。如果数据没有命中 Buffer Pool,比如数据量很大,Buffer Pool 线上最多开 100 G ,对于用户的请求,请求延时就会增加。为了缓解拉取远端存储的性能下降问题,我们扩展了原生的 Buffer Pool 设计,将 A-Store 作为一个远程分布式的二级缓存,来扩大缓存空间的大小。它的一个主要优势是:延时更低,容量更大。
除此之外,A-Store 还提供 Hot 特性。主节点在故障宕机,进行主备切换之后, 备机可以直接使用远端 AEP Buffer pool 的数据,缩短冷启动时间。我们在纯读、纯写的场景下都进行了测试,性能提高 30% - 70% 左右。
第二个应用方向是提供特性增强。字节未来的发展方向是提供数据库的纵向融合探索,重塑应用缓存和数据库之间的边界。基于 A-store 设计,我们正在开发一款内存数据库引擎 MemTable,对外兼容 SQL 协议。
MemTable 架构
MemTable 架构也采用计算与分离的思路,中间通过 RDMA 进行通讯,它与当前的 veDB 存在几点不同。一是,MemTable 在计算层引入编译执行技术来大幅度提高 SQL 的执行速度;二是存储和事务的处理与 InnoDB 不同:在索引结构上,我们目前采用 ART 索引结构;另外我们采用 MVOCC 并发控制算法进行事务控制;最后我们采用 Record 粒度的数据组织格式。
MemTable for veDB 架构
MemTable 出现之后,veDB 的整体架构如上图所示,MemTable 将作为 MySQL 的插件式存储引擎。同时,它会与 InnoDB 形成互补,InnoDB 可以满足业务容量型需求,MemTable 则可以满足业务高吞吐低延时需求,预计性能可以达到 InnoDB 的 10 倍 +。
HTAP 概念早在 2014 年由 Gartner 提出。HTAP 强调以下两个核心理念:
以上是业界提出 HTAP 的背景,在字节跳动,我们希望进行横向融合探索,通过对外提供 everything is SQL 的接口;在内部,不管是 TP 还是 AP,PG 还是 MySQL,通过设置统一的处理层来简化业务应用数据管理体系。
ByteHTAP 架构主要基于以下三个核心目标进行设计:
基于以上核心目标,数据库团队设计了如下的 ByteHTAP 整体架构。
目前业界存在很多 HTAP 产品,比如 Memory SQL 系统 、HANA 系统、还有在 TP 系统中扩展 AP 能力、或者在 AP 系统中扩展 TP 能力。2017 年 ACM 发表的一篇关于调研 HTAP 的论文将 HTAP 大致分为了两类,第一类是 Single Engine 系统,这类系统有一个统一的查询处理引擎,比如 Memory SQL 系统。第二类 Separate Engine 系统,这类系统使用分开的查询处理引擎进行 TP 和 AP 的处理。对于 ByteHTAP 而言,它具有以下三个核心特性:
数据库团队分别根据三个核心目标研发了对应的核心技术。针对实时查询,我们提供了以下三个核心技术,达到时延 < 1sec 的目标:
针对强一致性,涉及以下三个核心技术点,实现 SI 隔离级别:
最后针对高性能,涉及以下三个核心技术点,实现更新/复杂查询:
ByteHTAP 可以被应用到以下两个典型应用场景: