由于X-Engine分层存储的架构特点,该引擎特别适合某些业务负载特征的业务,本文介绍X-Engine的典型应用业务场景。
X-Engine的分层存储架构特别适合具有如下业务负载特征的业务:
- 数据访问具有鲜明的时间特征。例如大部分读取及修改操作集中在最近写入的数据上,而历史数据较少被访问。X-Engine通过将最新写入的数据缓存在内存中并通过高效数据结构进行索引,可以实现极高的性能,而较少访问的历史数据则保存在磁盘,提供稍逊的读写性能。
- 库表数据量特别大。传统InnoDB引擎迁移到X-Engine后,依据数据特征不同,存储空间可降低至10%~50%;迁移到X-Engine之后,很多业务可以免除分库分表的需求,使用单库即可承载近10TB的数据存储服务。
作为中国领先的电子商务服务提供商,用户体量庞大,阿里内部有非常多的在线业务承受非常大的存储成本压力。接下来为您介绍阿里巴巴集团内部使用X-Engine解决业务需求的几个典型案例。
说明 关于X-Engine的介绍请参见X-Engine引擎使用须知。
淘宝/天猫交易订单信息库
淘宝/天猫存储用户交易数据的数据库,需要保存用户所有的历史交易记录以供查询,当前交易记录数据库集群现状如下:
- 数据条目超过万亿级,磁盘容量达到PB级。
- 在大促时面临极大的写入压力。
虽然可以通过水平拆库,实现性能的和存储能力的水平扩展,但是由于体量巨大,在单实例存储的数据容量无法提高的前提下,拆库导致数据库集群规模过大,会导致运维和管控操作日益复杂,同时整体存储成本的日益上涨也是一个无法忽视的问题。
在交易数据库迁移为X-Engine之后,因为X-Engine所采用的紧凑物理页存储格式以及高效的压缩算法,阿里实现了在单库上存储及处理20TB的原始数据集。相对原有采用InnoDB引擎的实例,单实例处理的数据量提升了3倍。
同时因为交易信息库的访问特征是:最近产生的交易记录会更频繁的被更新和读取。非常适合X-Engine的冷热分离架构,最新产生的交易记录总是保存在内存中并被高效索引,可以保证极高的处理速度和极低的访问延时。
钉钉聊天记录信息库
钉钉作为中国领先的企业IM工具,在中国有超过亿级别的用户。不同于传统的微信等用户级IM工具。 企业IM需要实现聊天记录的永久保存,并且提供多端漫游功能。在用户量持续爆炸性增长的前提下,聊天记录的永久保存给钉钉业务带来极大的成本压力,同时在数据爆炸性增长的前提下保证聊天记录的读写性能不降低也是一个极大的挑战。
在初期采用InnoDB引擎并面临存储的压力时,钉钉考虑了多种候选方案,例如Hbase等NoSQL服务。但是企业IM对数据一致性有比较苛刻的需求,同时业务类型的多样化,也对诸如二级索引等数据库的功能有比较强的依赖。
在采用X-Engine之后,相同原始数据,所需的磁盘空间比使用InnoDB引擎减少了62%。同时继续保有了对事务以及二级索引等数据库特性的支持。业务代码不做任何修改即可以迁移到使用X-Engine引擎的集群上。
阿里图片空间信息库
阿里巴巴集团图片空间是淘宝智能图片中心面向商家提供的免费图片存储管理服务,由于淘宝/天猫主站上累积的用户图片数据量非常大,图片空间业务也面临非常巨大的存储空间和写入性能压力,尤其每年双11之前,商家大量更新商品库存保有单位SKU(Stock keeping Unit),此时数据会急剧增长。
由于图片空间业务存储的图片元信息大部分为文本内容,特别是一些URL属性,非常适合X-Engine引擎中使用的前缀压缩算法。再结合X-Engine中的紧凑数据页和通用压缩算法。迁移到X-Engine引擎之后的图片空间业务,所使用的磁盘空间只有使用InnoDB引擎的1/7。这意味着PB级别的空间节省。
在达到空间节省目标的同时,X-Engine引擎所能承载的TPS相对InnoDB没有降低,且响应时延也完全满足在线业务的要求。