来源:AustinDatabases



为了应对图1中显示的122倍峰值,阿里巴巴采用了OLTP数据库的共享无关体系结构,其中分片用于将实物分布在多个数据库实力之间,并在峰值到来之前增加数据库实力的数量,尽管这样方法有效,但由于需要的实例的数量之多,他会带来巨大的经济和工程成本。
我们通过改进存储引擎的单机容量来解决这个问题,存储引擎是OLTP数据库的核心组件之一,从而减少给定的峰值和吞吐量所需的实力数量,或者在固定的成本下提高可事先的吞吐量。在线促销活动在电子商务交易中制造了高峰时段,于飞高峰时段相比,这些交易包含了更多的写入操作,尽管近年来主内存容量稳步在增长,但在双十一,需要更多更新的交易记录,这些仍然超过设计的容量,因此我们必须利用RAM SSD HDD 组成有层次结构的存储来解决问题。X-engine ,通过利用这种层次结构,根据数据的温度降数据防止在不同的层次中,并使用新的内存技术,这就像通过主机增加水库来排放刘聪的洪水一样,LSM 树结构来加速写操作的常见技术,这里还包括了日志的数据结构的追加方法,优化基于树结构存储方式,以及两者的混合形式等,我们发现其中任何一种方法都不能满足电子交易的写入性能,一些列存储,不适合写入密集交易,其他一些提升了写入性能,但亿牺牲点查询和范围查询性能为代价,不适合混合读写的电子商务工作负载,LSM树结构包含一个存储在内存中的组件,我们可以对其应用追加方法,以事先快速的插入,病包含多个磁盘的组件,每个组件都包含级别,组成一个树状的结构,其中每个级别的大小明显大于其上一级,这种数据结构非常适合分层存储,有助于解决我们数据流涌入引起问题的处理。
快速流动的当前问题在对于大多数数据库工作负载尤其在告诉产生数据记录的业务中,在固定的时间段中有较强的空间特性,在双11购物节这样的重大促销活动中,如全天都会举办不同类别的品牌的秒杀活动,以刺需求并引起客户的注意,和购买不同的商品。这意味数据库缓存中的热数据会不断地变化,任何记录的温度也可以从热转温,在转冷。如果将数据库缓存视为水库,底层数据视为海洋,这将产生一个冷热数据的快速交换的过程,任何方向移动于非常深的底部,如X-engine ,存储引擎需要确保新出现的热数据能尽快从深层检出并有效的进行缓存。
X-Engine 是一个基于LSM树用于OLTP数据库的存储引擎,主要是为了解决阿里云巴巴电子商务平台面临的挑战通过多核心的处理器线程的并行性,在主内存中处理大部分请求将写操作与事务解耦使其异步进行,并且将长时间的写入分成多个步骤来进行,在多个通道中进行,增加总的数据吞吐量,为解决数据洪水的问题,X-engine 利用分层存储的方式在不同的层级之间移动数据,利用精细化的LSM树状结构和优化的压缩算法。最终我们通过锚定当前数据流大量涌入的问题,通过多版本源数据索引,在数据库写入的时候进行更新,加快我们在分层存储中的数据提取的速度,而不需要考虑数据的温度。
这里我们做了相关的工作如下并解决了我们识别了面向电子商务中的OLTP存储引起面临的三个挑战,针对这个三个挑战我们开发出基于lsm tree 下的x-engine,引入了一套优化的方法,解决问题,如降息后LSM树的数据结构,PFGA加速压缩,事务中异步写入多阶段流水线和多版本的元数据索引。
通过使用标准基准测试和实际的业务我们对 X-Engine进行了广泛的评估,通过测试,结果中展现在促销期间,通过x-engine在电子商务工作负载中的性能优于 innodb, rocksdb 这样的数据库引擎。
系统设计,X-Engine 是一种基于优化的LSM树结构的分层OLTP的存储引擎,基于电子商务失误工作负载中的数据的温度不断的变化,我们将记录放置在不同的存储层,亿分别提供不同的状态的记录的访问的方案,这使得x-engine 可以根据记录的热度,来灵活的设计数据机构和访问方法,同时我们在设计中也发现LSM树并不能完全支持电子商务工作负载,在X-EGINE中我们设计并应用了一套优化方案来解决之前确定的需要解决的问题,作为 POLARDB 的一部分,X-Engine 可以部署在POLARDB 上的POLARFS上,PolarDB FS 采用了许多新的技术,以实现超低延迟的文件系统,如使用RDMA 和 NVMe .
