前言
随着互联网和大数据技术的发展,企业面临着越来越多的数据存储和处理需求,传统的关系型数据库已经无法满足这些需求。传统的单机数据库在面对大规模数据量和高并发访问时,往往会面临性能瓶颈和可靠性问题。云原生分布式数据库可以有效地处理大规模和复杂的数据,可以将数据分布存储在多台机器上,实现数据的水平扩展,从而提高了系统的整体性能和容量。同时,分布式数据库可以通过数据复制和容错机制来提高系统的可靠性,即使某一台机器发生故障,整个系统仍然可以继续运行,从而避免了单点故障带来的风险。另外,分布式数据库还可以支持跨地域、跨数据中心的部署,提高了系统的可用性和灾备能力。因此,引入分布式数据库可以有效解决单点故障和性能瓶颈的问题,提高系统的可靠性、可用性和扩展性。
BigInsights是贝克迈思根据当前大数据时代的需求开发的新一代高性能分布式数据库。与传统数据库不同,BigInsights采用异构计算平台,通过分布式的架构设计来实现高性能和高可用。BigInsights作为一个分布式数据库系统,具有很强的容量和性能。它可以很好地支持海量数据的高并发处理与访问。这就满足了许多企业对于可靠和高效的数据存储与处理能力的需求。在本文中,我们将从几个重要方面来介绍BigInsights是如何同时实现高性能和高可用的。包括它的分布式架构设计、动态扩缩容机制、负载均衡策略、存储引擎优化、缓存设计、支持新的硬件等技术,以及其内部采用的高性能事务处理方法等。希望通过阐述这些技术原理,让读者更好地了解BigInsights的特点。
BigInsights采用云原生分布式架构“计算与存储分离”,每一部分都可以独立缩扩容,满足用户的按需使用、降低使用门槛,利用“极致弹性”满足互联网时代下企业业务的快速发展需求。
BigInsights的存储层主要以分片方式管理数据,其中BM-Server负责存储用户数据分片,Master负责元数据管理。每个数据分片对应一个 Raft 组,可配置分布在多个节点上,以此保证高可用性。元数据除了数据分片的位置信息外,还包括表结构等信息。Master 本身也依靠 Raft 保证高可用性。
BigInsights采用云原生分布式架构,实现了计算与存储的分离,使每个部分都能独立缩扩容,满足用户按需使用的需求,降低使用门槛,并利用极致弹性满足互联网时代下企业业务的快速发展需求。
在无状态的计算资源方面,BigInsights能够实现分钟级的编排与升级,大大缩短了运维导致的业务不可用时间。对于有状态的存储资源,借助分布式文件系统、分布式一致性协议、多模态副本等关键技术,实现了存储资源池化、数据安全和数据库强一致性需求。同时,可扩展的通信资源确保了计算和存储之间有足够的带宽,满足高吞吐、低延迟的数据传输需求。
快速横向扩缩容和自动负载均衡
Raft协议能够轻松实现动态成员资格更改。当节点被删除时,只需要重新运⾏受影响分⽚的Raft领 导者选举,并由BM-Master主导重新创建复制副本以实现完全复制。当节点被添加到集群后,BMx2;Master会根据每个BM-Server上持有的分⽚数和分⽚领导数⾃动进⾏负载再平衡,将分⽚移动到新加 ⼊的节点上。这种⽅式实现了快速的横向扩展和缩减,提升了读写负载的性能。
如图3所示,我们将新节点4添加到具有三个节点和四个分⽚的群集时究竟会发⽣什么。节点1有两个领导者,Tablet1-Leader和Tablet4-Leader。
- 将向集群添加新节点4。
- BM-Master Leader察觉到集群的变化并启动负载均衡操作。这涉及到领导者(例如Tablet4-Leader)离开节点1。
- 为了实现完全的负载平衡,⼀些追随者也会从节点2和节点3移动到节点4。需要注意的是,所有的移动都是以公平的⽅式进⾏的,没有⼀个现有节点承担填充新节点的负担 ,集群中的所有节点都按照公平的份额计算,因此集群永远不会受到压⼒。
- 下图展示了最终的完全负载平衡的集群,每个节点都有⼀个领导者和三个追随者。
BigInsights的架构设计实现了快速的横向扩容和缩容,确保了集群的⾼可⽤性,并提升了读写性能。 它通过将读写负载均衡到其他节点上,充分利⽤整个集群的硬件资源。这种设计使得BigInsights能够灵活地适应不同的⼯作负载,并实现⾼效的数据处理能力。
高性能读取
鉴于在写⼊时已经完成了确保⼀致性的重要任务,BigInsights的Raft实现确保读取请求可以以极低的延迟提供服务,⽽⽆需使⽤任何仲裁。此外,它允许应⽤程序客户端选择从Leader读取(⽤于强⼀致性 读取)或从Follower读取(⽤于时间线⼀致性读取)。 BigInsights甚⾄允许从异步更新的集群中取读副本,这些副本不参与写⼊路径。从 Follower中读取副本可以显著提⾼系统的吞吐量,因为Follower⽐Leader多,⽽且如果Leader恰好位于不同地区,甚⾄可以减少延迟。
高性能的存储引擎
BigInsights底层存储采用的是高性能的嵌入式键值存储引擎RocksDB,它具有以下几个优势:
- 高性能:RocksDB 采用了 LSM 树(Log-Structured Merge Tree)的存储结构,能够提供非常高的写入性能,同时也具有较好的读取性能。这使得 RocksDB 在处理大规模数据时能够保持高效的性能表现。
- 低延迟:RocksDB 的存储结构和优化算法使得它能够提供低延迟的数据读取和写入操作,适用于需要快速响应的应用场景。
- 可压缩:RocksDB 支持数据的压缩,能够有效地减小存储空间占用,特别适合存储大规模数据。
- 可定制性:RocksDB 提供了丰富的配置选项和插件接口,用户可以根据自身需求对存储引擎进行定制和扩展,以满足特定的应用场景需求。
- 内存管理:RocksDB 对内存的管理非常灵活,能够有效地利用内存资源,提高数据操作的效率。
日志结构合并树(Log-Structured Merge Tree,LSM-tree)这一名称取自日志结构文件系统。LSM-tree 的实现如同日志文件系统,它基于不可 变存储方式,采用缓冲和仅追加存储实现顺序写操作,避免了可变存储结构中绝大部 分的随机写操作,降低了写操作带来的多次随机 I/O 对性能的影响,提高了磁盘上数 据空间的利用率。它保证了磁盘数据存储的有序性。不可变的磁盘存储结构有利于顺 序写入。数据可以一次性地写入磁盘,并且在磁盘中是以仅追加的形式存在的,这也使得不可变存储结构具有更高的数据密度,避免了外部碎片的产生。 由于文件是不可变的,所以写入操作、插入操作和更新操作都无须提前定位到数 据位置,大大减少了由于随机 I/O 带来的影响,并且显著提高了写入的性能和吞吐量。
总的来说,RocksDB 作为存储引擎具有高性能、低延迟、可压缩、可定制等优势,特别适合于需要高效处理大规模数据的应用场景,如大数据存储、实时分析等领域。
高效的缓存设计
我们知道,Cache是实现有限内存对磁盘热数据的高效缓存,是提高读性能的最重要DB组件。LRU(Least Recently Used,最近最少使用)是一种常见的缓存淘汰算法。LRU算法的基本思想是根据数据的访问历史记录来淘汰最近最少使用的数据,以便为新的数据腾出空间。
LRU算法适用于需要根据访问模式来淘汰数据的场景,例如缓存系统和页面置换算法。但DB的Scan操作是不利于这个LRU算法。当DBScan时,一时间会产生大量的数据并进入到链表的热头,虽然这些Scan数据如果只被用到一次,最终会通过链表冷尾驱逐出去,但是,它因为消耗内存特别大,导致一些热数据被不当的驱逐出链表,从而降低了读性能。
对于熟悉RocksDB的同学,都知道其API接口既支持点查找Lookup,也支持范围查找Scan。早期的RocksDB的缓存只支持block形式缓存,即缓存的单位是block(block大小可设,最小是4KB,但一般是几十KB)。这就存在一个浪费,比如:我们需要的是点查Lookup,访问一个4KB的某个key/value,其key/value大小之和假设只要100字节,那么为了这么一个100字节的kv,我们却至少需要缓存4KB大小的一个block,即浪费率是 (1 - 100/4000) * 100% = 98%。RocksDB在后续版本加入了row cache,针对key/value的更细粒度的缓存。因为存在范围查询,所以,block cache和row cache都提供,让程序员根据应用类型work load来选用,或者组合使用。
这就带来了新的问题,内存大小是一定的,block cache和 row cache应该设置比例是多少。假如当前初始设置在比例是1:1已经是最优选择。但是随着时间推移,用户在work load发生了变化,点查和scan查询的比例发生了变化,这样就不能最有效利用缓存。
还有另一个问题,一个数据分片持有一个RocksDB实例。一个节点持有多个分片,假如每个分片都独自管理自己的cache。那么就会因为有的分片数据冷,有的分片数据热。这样冷的分片的cache就没有得到有效利用。
BigInsights采用智能的统一cache管理,根据当前work load负载情况,动态调整row cache和block cache大小比例。同时统一管理调度cache,防止出现cache孤岛出现。根据访问情况把cache分为多个等级,防止scan 引起不应该的hot key被淘汰。
图7是BigInsights优后的缓存算法和RocksDB传统LRU算法效果对比:
新硬件架构设计
数据库是用于存储和管理数据的系统,可执行数据的增删改查等操作。传统数据库通常使用磁盘存储数据,但随着科技的发展,新型存储设备如NVMe被引入数据库系统中。NVMe是一种用于连接闪存设备的通信协议,能够提供更快的数据传输速度和更低的延迟,从而显著提高数据库的性能和响应速度。
BigInsights存储引擎搭载NVMe新型存储设备,将温热数据存储在NVMe设备上,冷数据存储在传统存储设备上。这种做法可以提高数据库的读写性能,加快数据的处理速度,提升系统的整体性能,并且节省硬件成本。此外,BigInsights存储引擎是基于Log-Structured Merge-Tree(LSM-tree)的低成本、高性能存储引擎,其组成部分包括热数据层和冷数据层。热数据层存储在内存中,包括活跃内存表、固化内存表和缓存,而冷数据层则存储在持久化磁盘上,采用多层次结构。活跃内存表具有高插入性能,而固化内存表则会逐渐转储至持久化存储介质SSD。
从内存中转存而来的Immemtable中的记录会按照数据块的格式被插入L0中。当L0被填满后,其中的部分数据块会被选中,通过异步的合并操作(Compaction)和L1中的数据块合并,并从L0中移出。同理,L1中的数据块最终会被合并到L2中。BigInsights存储引擎采用将L0层的数据保存在NVMe设备上,L1层及以下的数据保存在传统存储介质上SSD/HHD。
对于OLTP型业务,由于对访问延迟非常敏感,云厂商通常采用本地SSD或ESSD云盘作为存储介质。然而,对于流水型业务(如交易物流、即时通信等),大部分数据在生成后访问频次逐渐降低,甚至不再被访问。将这些冷数据与热数据一样存储在NVMe、SSD等高速存储介质上,会显著降低整体性价比。BigInsights存储引擎通过分析负载的访问特征,实现精准的冷热数据分离,并结合混合存储架构自动归档冷数据,为用户提供极致的性价比。
高性能的事务处理
BigInsights的事务处理机制可以在满足 ACID 特性要求的情况下,结合多核处理器与内存的硬件特性,实现极高的事务处理性能。增、删、改、查数据库中的记录是事务处理所需要的基础能力,我们可以将这一系列操作视为写路径和读路径。
如图8所示,为了在 DRAM 内存掉电易失的情况下保证数据库中存储数据的持久化,对数据库记录的所有修改操作都要先记录在WAL预写日志中并存储在NVMe快速存储介质上。然后再存入内存的活跃内存表中。然后再通过两段式 Read/ Write Phase 和 Commit Phase 的衔接配合来保障一个事务对记录所做的修改符合 ACID 特性,并在完成提交后对其他事务和查询可见。活跃内存表存满后被转为固化内存表,稍后再被 Flush 落盘完成持久化。
读路径。如图9所示,X-Engine 引擎中的查询操作按照活跃和固化内存表(Memtables/Immutable)、行级缓存(Row Cache)、块级缓存(Block Cache)和磁盘的顺序依次查询数据。内存表采用的多版本跳跃链表结构可以降低热点记录查询的开销。行级缓存和块级缓存可以分别缓存磁盘中的热数据记录或记录块,可以减少磁盘访问的布隆过滤器(Bloom Filters)和相应索引块(Index Block)。
如图10 BigInsights引擎为处理每一条分布式事务设计了两阶段的并行事务处理流水线,具体分为准备阶段和提交阶段。准备阶段完成所有所需的查询和计算操作,然后将所需要进行的修改暂存入事务缓冲区中。
在提交阶段,多个准备线程负责将事务中要写的内容写入无锁的任务队列(Task Queues)中。随后,多阶段流水作业消费线程会处理相应的任务,包括写WAL日志、日志落盘、写入RocksDB内存表,最终完成事务提交。不同阶段的任务通过事务缓冲区交接数据,实现了并行执行,同时处理不同数据。这种交叠执行时间的方式提高了每个线程的指令缓存命中率,最终提高了系统的吞吐率。在提交阶段中,每个任务队列由一个后台线程负责管理,而任务队列的数量受系统中可用I/O带宽等硬件条件的限制。
在图11所示的分阶段事务流水线中,针对每个阶段的特性,我们分别优化了其并行粒度。具体而言,第一阶段的写日志缓存(收集一个任务队列中所有写入内容的相关日志)和第二阶段的日志落盘由于存在数据依赖,因此由单一线程串行完成;第三级的写内存表则由多个线程并发完成对内存表的写入;第四级的提交负责释放相应的资源(如所持有的锁和内存空间等),使所有修改可见,由多个线程并行完成。所有的写入线程采取主动拉取工作的方式,从任意级别中获取所需执行的任务。这种设计允许我们分配更多的线程来处理带宽高、延迟低的访问内存的工作,同时适用较少的线程完成带宽相对较低、延迟相对较高的写入磁盘工作,从而提高了硬件资源的利用率。同时,各个阶段内的任务相同,可以批量处理任务,大大提高了任务的处理能力。
综上所述,BigInsights高性能分布式数据库,通过合理的架构设计和技术选型,可以实现高性能、高可靠性和高扩展性的分布式数据库系统,为企业提供可靠、高效的数据存储和处理能力,助力企业实现数据驱动的业务创新和发展。




