摘要:7月27日,云栖社区、阿里中间件举办了首届阿里巴巴中间件技术峰会,揭秘阿里10年分布式技术干货。在首届阿里巴巴中间件技术峰会上,阿里巴巴中间件技术专家焦方飞为大家分享阿里巴巴海量数据场景下的OLAP解决方案,此外还对阿里新推出的高性能时序数据库进行了简单介绍,精彩不容错过。
本次分享的主题是阿里巴巴海量数据场景下的OLAP解决方案,主要是也为大家介绍一下阿里巴巴OLAP存储的一款产品——HiStore。大家都知道海量数据,包括大数据和数据仓库这些在当下都是非常热门的话题,大家都比较关心这个领域,所以这个领域也成为了各大厂商的必争之地,为什么?原因很简单,就是在未来,大家的不同就在于对于数据理解的不同,换句话说就是未来属于能够真正地读懂数据的人。
本次的分享将主要围绕以下四个方面进行:
一、HiStore产品的由来以及它所能够应对的场景以及能够解决的痛点
二、结合现实已经落地的成功案例帮助大家 理解HiStore的应用场景以及HiStore能够为业务带来什么样的价值
三、HiStore在目前海量数据、大数据以及数据仓库领域的定位
四、HiStore的核心技术、架构设计以及优化思路
一、Why HiStore?
业界的痛点
现在提到大数据,其实大家第一反应就是Hadoop体系的产品非常之多,让人眼花缭乱。在这里也为大家简单地梳理一下Hadoop技术栈的主要产品:第一代的HDFS、MapReduce产品,可以说太慢了,逐渐引进到第二代,第二代就是通过内存cache等增加吞吐量的方式产生了Spark等产品,这时候性能得到了进一步的提升。再往后就是如果想要实现一个复杂任务的话,使用MapReduce就会是一个比较复杂和麻烦的事情,那么就会考虑到是不是使用脚本或者SQL的方式就会更简单呢?因为SQL比较简单,那么就产生了Hive和Pig,而且现在逐渐比较流行了,到了这一步就已经引入了SQL了。SQL已经比较好用了,但是这时候在某些场景下实际的性能还不够,应该怎么办呢?其实性能还不够的原因在于之前的MapReduce以及Spark这种模型做的太通用、太健壮、太保守了,实际上我们应该在某种程度上更激进地获取数据,实际上这时候就产生了一些计算层的产品,比如Presto,Drill,Impala。
实际上就是Hadoop体系从下往上看就是从最底层的HDFS或者其他的一些分布式文件系统,到上层的第一代的MapReduce、Spark,在往上就是到Pig或者Hive;另外就是HDFS或者其他文件系统上直接跑Presto,Drill,Impala;那大规模数据处理的另外一个领域——大规模分布式MPP架构,比如SAP的HANA,HP的Vertica,开源的GreenPlum等等。
集团内的痛点
什么是HiStore
为了解决前面提到的业内以及集团内面临的痛点,HiStore产品就应运而生了。HiStore产品的定位是分布式低成本OLAP分析型数据库产品,是一款基于独特的知识网格技术的列式数据库,定位于海量数据高压缩比列式存储,是低存储成本,低维护成本,海量数据OLAP存储引擎;有效的解决了海量数据存储的成本问题,以及在百亿数据场景下支持实时高效的多维度自由组合的检索。而且通过近两三年的发展,HiStore在阿里内部已经应用于多个核心应用,包括菜鸟、 B2B、阿里妈妈、聚划算、天猫等,也应用于很多外部用户,比如在人社部,上海新能源汽车,新零售等超大数据量测试环境都取得了令人信服的结果,无论成本、性能、稳定性都表现完美。
HiStore提供哪些特性来解决相关问题呢?HiStore所具有的特性如下图所示:
基于上面的这些特点,HiStore具有如下的这些优势:
- 海量数据存储: PB级数据大小,百亿条记录,数据量存储主要依赖自己提供的高速数据加载工具(TB/小时)和高数据压缩比(>10:1)。
- 高压缩比:平均压缩比>10:1,远高于常规压缩算法,甚至可以达到40:1,极大地节省了数据存储空间。
- 基于列存储:无需建索引,无需分区。即使数据量十分巨大,查询速度也很快,用于数据仓库、查询性能强劲、稳定:亿级记录数条件下,同等的SELECT查询语句(这里主要是聚合查询,多维查询等等),速度比MyISAM、InnoDB等普通的MySQL存储引擎快数十倍。
- 高性能数据导入:基于MySQL协议的并行导入,以及专门的数据预处理入库工具。
- 多维分析查询:实时性的多维度数据检索;海量数据聚合秒级计算;为实时业务提供保障。
- 线性扩展:用户可以轻松实现存储容量和处理能力的线性提升。
- 系统易用:迁移成本低,无其它依赖独立部署,MySQL工具及应用可直接无缝运行其上。
- 快速响应复杂的聚合类查询:适合复杂的分析性SQL查询,如SUM, COUNT, AVG, GROUP BY。
二、案例分析
接下来会借助一些成功落地的案例帮助大家深入地理解HiStore产品的使用场景。首先看下图将HiStore产品的应用场景做了简单的分类,这部分场景包括数据分析与商业智能、用户画像和用户行为、历史数据、分析应用与广告数据、日志,轨迹,记录,监控,归档、数据仓库、物联网数据、存储成本敏感等。
案例1:高德热力图
接下来结合几个实际的案例来分析,第一个案例就是高德热力图。大家都知道高德的产品是与地理相关的,它可以拿到每个人的地理信息,那么通过这种人地关系以及用户画像相结合,就可以实现如下图中右侧所示的界面这样的显示出用户的职业、性别、年龄、教育水平、资产等的用户画像。高德能够将地理位置与用户画像结合起来,那么就能够迸发出很多的商业价值,比如在确定了目标人群之后,对于商铺或者商品而言就可以通过这样的应用分析出潜在的客户,这样的产品目前也是高德目前的拳头级产品。那么对于这样的产品而言,在技术实现上有哪些难点呢?第一就是数据量大,万亿级别,导入速度要求高;除此之外就是想要在这么大的数据量上进行这样多维度聚合查询得出趋势和结论,传统的MySQL数据库将无法完成,简单来说传统MySQL数据库的InnoDB引擎是B+树的改进,B+树实际上是磁盘不友好的数据结构,其在数据查询和导入的时候会产生大量的随机IO,而且随着数据量的增加,B+树的分列会越来越多,就会导致数据导入越来越慢,查询起来也会越来越慢,甚至无法得出结果。
案例2:御膳房项目
御膳房策略中心项目是阿里巴巴集团“品销全营销,unimarketing”项目中的一部分,产品定位是品牌商品牌发展策略的支持平台,通过从淘宝、天猫、聚划算等平台收集的海量实时数据,帮助品牌商更高效,更明智地做出品牌发展相关的商业决策。
案例3:蚂蚁体验平台
我们再来看一个例子-蚂蚁体验平台,这个产品是为了构建一套包含“问题收集、分析、推进、协作、价值衡量”的体系,帮助蚂蚁金服自己的产品做良性的改进;方便蚂蚁小二对集团的数据进行分析,比如对花呗的几千万上亿的会员进行画像分析,从而对于产品做一些改进,这是用户行为分析以及商业智能的又一个典型的场景。
案例4:全链路追踪系统EagleEye
EagleEye是集团内一款应用广泛的分布式调用跟踪系统,主要帮助用户方便地查看应用的实时数据及快速定位线上问题,为全链路压测、跨单元分析、链路梳理提供数据支撑。而EagleEye系统日志量非常之大,大到每天近万亿条,大概每天会产生数千TB的数据,这个数据量在业内也属于顶级的一个水平了。另外就是EagleEye系统的数据峰值很高可以达到数千万的TPS,如果使用传统的MySQL成本太高,这样是吃不消的。
三、竞品分析
接下来为大家简单介绍一下大数据领域以及数据仓库领域,HiStore产品的定位以及竞品分析。
以下是针对于MPP架构的同类产品分析:
四、核心技术
下面简单介绍一下HiStore的架构和一些核心的技术点:
列式存储引擎
数据组织结构
整体架构
下面这张图大家可以从左上角开始看起,标准的MySQL客户端以及标准的JDBC和ODBC客户端都可以进来,其下面就是Parser以及Optimizer,也就是解析和优化器根据HiStore独特的数据结构来进行优排。再往下就是KG Manager,也就是知识网格和MetaData,这块内容也是数据结构最为核心的部分,也是高速数据导入最核心的部分,也包括Succinct Data。Succinct也是最近比较火的一个技术,它可以实现更好的数据压缩以及基于压缩包的检索,也就是说它可以在不需要解压数据的前提下就进行检索,HiStore中对于Succinct Data的数据结构实现了其C++版本。再往下的Memery Manager,也就是对于内存进行更加高效的加载,使得更多的数据存在内存里以实现更高效的数据查询和导入,然后右边这部分就是一些并行计算,比如sharding,也就是一条SQL语句进来之后如何实现分片,以及在分片之后进行并行处理。因为现在机器高配都是多磁盘的,那么可以实现充分利用多核、多磁盘以及这种并行计算的硬件优势。再往下就是压缩、解压,包括LZ4或者是PPM这种压缩解压算法。到最底下的落盘,HiStore支持与MySQL相同标准的Binlog以及自己的Hilog,这样可以方便的通过DRC以及阿里内部的精卫等进行数据同步,同步到其他数据源都是没有任何问题的。
接下来为大家分享一下HiStore的核心技术点。
核心技术1:HiStore查询优化器
大家可以从下图中看到从上面的HiStore查询优化器下来之后到中间有三种过滤器,也就是前面提到的KG部分,包括位图索引,bloom filter过滤器,以及直方图,可以更好地实现粗糙集过滤。实际上在查询的时候最高效的就是这三个部分:位图索引、bloom filter过滤器以及直方图,这部分都是在内存里面可以过滤大部分无效的包,真正可以被命中的压缩包才会从磁盘中被读取出来,然后进行解压去寻找。
核心技术2:执行优化
核心技术3:压缩数据实时检索
核心技术4:高性能数据写入
核心技术5:MVCC无锁读事务
核心技术6:硬件加速
核心技术7: 聚合计算(group by)查询优化
核心技术8:生态兼容
技术部分就先分享到这里,那海量数据OLAP产品HiStore也就分享到这里。
那么除此之外,我还想借此机会分享另外一个产品,就是高性能时序数据库HiTSDB。大家知道,目前在监控以及IoT场景下,时序数据库是一个非常热门的话题,在这样的背景下,阿里也推出了一款产品叫做HiTSDB,也就是Hi-performance Time Series Database,并且在7月31日在阿里云公网上已经开始进行公测了,大家可以在阿里云官网上留意一下。
HiTSDB主要解决的是时序场景,那么什么是时序场景呢?实际上就是在时间上分布的一系列数值,其实这个场景也非常多,比如股票、气温变化以及网站的PV、UV、IOT的工业传感器数据以及整个服务器监控的数据、硬件指标等等以及车联网等基于时间维度的一系列数值。
时序数据有以下这些特点:
- 持续产生大量数据,每秒上百万数据点
- 数据产生率平稳,无明显的波峰谷
- 近期的数据关注度更高
- 时间久远的数据,极少被访问,甚至不再需要
- 数据存在多个维度的标签
- 展示或使用时往往需要对数据做聚合计算
专用的时序数据库与传统数据库关注点就不太一样了,时序数据库非常关注写性能的优化,HiTSDB可以达到每秒千万级别的写入,尤其是这种顺序时间写入,另外一个就是更关注读延迟而非QPS,存储的成本可以根据时序场景特定的算法进行优化,比如插值采样等。
HiTSDB在时序场景下做了很多的增强,包括了如下内容:
- 写回方式的内存缓存,写入的数据先在内存中压缩和缓存,积累一段时间后写回磁盘,极大优化了写入性能;
- 高压缩内存缓存可以保存比较长时间的数据,查询热数据时性能大大高于磁盘,降低了读延迟;
- 时间序列标签和时间点数据分开存储,减少数据重复,提高存储效率;
- 在时间序列标签建立倒排索引,极大提升多维度查询的性能;
- 磁盘数据也使用高压缩存储,大大降低了磁盘的效率;
HiTSDB最主要的应用场景有两个方面,一个是应用性能监控,另外一个就是物联网IoT,包括了车联网、智慧交通、智能制造、智慧医疗以及石油化工等领域,其中IoT在时序方面要求非常突出。
这里也给大家看两个案例,鉴于篇幅,这里就不一一详述了。
案例1:应用监控&系统监控
最后,我的邮箱是 fangfei.jff@alibaba-inc.com ,大家有问题或者有兴趣的话可以发我邮件来讨论一下,同时也热情邀请有识之士加入我们,共同在数据库领域开疆拓土,谢谢大家!