牟宇航:百度OLAP数据库——Palo

专家视野 | 牟宇航:百度OLAP数据库——Palo

https://mp.weixin.qq.com/s/q8_kdDPdCPwIjI2BCETPZw

3月28日,在工业和信息化部的指导下,为期两天的“2017大数据产业峰会”在北京国际会议中心召开。本次会议由中国信息通信研究院和中国通信标准化协会共同主办,数据中心联盟大数据发展促进委员会承办。

百度研发经理牟宇航在29日上午大数据产品和应用创新论坛上发表了题为《百度OLAP数据库——Palo》的演讲。



以下是内容实录:

大家好,我叫牟宇航,来自百度大数据部。现在负责百度大数据部在线系统的研发管理,在线系统简单来说就是大家用的数据库。今天来这里给大家分享一个在云上售卖了一年,而且准备开源的数据库。



在讲数据库之前先给大家讲一下我们面向的场景,第一个是百度统计,是为其他第三方站长提供流量分析的工具。它的形式是提供一个脚本,其他的站长嵌入到自己的网站代码里面,最后百度会通过这个脚本获取第三方网站的用户行为,然后出第三方网站的分析报表。这个产品量非常大,首先有450W网站站长去使用它,它的查询频率非常大,基本上峰值OPS会到2000以上。数据量也非常大,我们初步统计了一下每天结构化的数据会到1-2T。


这种场景是在线报表场景,可以看到左侧栏是主题,右侧栏包括了指标列和过滤条件,比如说可以根据时间过滤,可以根据其他方式过滤,每个主题是不一样的。


第二个场景是我们经常在业务上会出现的一个场景,就是数据集市。数据集市一般面向业务为主题,这里举例是百度糯米的数据集市,它是集运营、业务分析、订单管理、会员管理、客户关系、管理等一体的综合数据平台。这种数据集市场景多样化,一方面刚刚提到的在线报表,比如说渠道人员想看一下几个渠道的运维情况,这有一个报表。再有产品经理想多维分析下产品传单的情况。比如说新上线一个活动,运维人员想看一下新上线活动的情况,它的查询非常灵活。

在这种数据集市里面除了场景比较复杂,另外使用它的角色很多,所以这个里面涉及到多租户的管理。


这里拿了另外一个多维分析系统,初步看它的样子跟在线报表比较像,如果仔细看会不一样。它的左侧栏是个维度,包括像操作系统、时间浏览器维度,这些维度可以下展很多级别。右边这些栏首先是查询指标,另外是过滤维度的条件。



这种场景是典型的在线多维分析场景,以上三种场景就是今天要讲的数据库Palo的主要场景,在线报表、多维分析、机器查询。这个名字很好记,当时想这个名字就是面向多维分析的数据库,用一句话形容Palo就是A:MPP-based Interactive Data Analysis SQL DB。面向数据量是百TB到PB级别。

讲了这么多的OLAP,OLAP概念分为两个维度,第一个是中间的A,A相当于Transactional Processing。第二个维度是Online相当于Offline,下面列了一张图但凡所有的大数据应用和面向C端B端的架构都是这样的架构,首先前端是客户端,后面是服务端。



App Client加上App Server再加上Transaction,在大数据时代产生了很多数据,我们希望把这些数据提取出来,挖掘其中的价值,这就是AP角色的事情,它可以做很多的事情,可以做转换,可以做数据挖掘,这都是广义的概念。在大数据时代,AP变得越来越重要,变得越来越庞大。TP核心价值在于业务逻辑,AP核心逻辑在数据本身,我们要从数据本身挖掘更多的价值。OLAP是面向AP的,这个里面也提了在线概念。拿购物举例,离线像仓库的概念,在线像小超市的概念。离线面向数据开发人员和数据建设者,在线面向数据消费者,比如说产品经理、管理者、营销人员、运维人员,可能他不太懂数据怎么玩,但是用了这个系统就会玩了。我们看到在大数据时代越来越多人使用数据,在线这一部分的重要性变得越来越重要。



这个里面详细列举了一下OLAP和OLTP的区别,OLAP的场景比如说分析一个全量的历史数据,这个历史数据可能涉及一年可能涉及很多,它的数据量会非常大,数据量大也就导致很多不一样,比如说导入方式、侧重点,我们评估OLAP性能的方式不太一样。最后是数据组织,一般来讲OLTP是完全遵循三范式的,而OLAP就不一样,它是五范式的。



刚才提到AP在大数据时代变得越来越重要,在2000年之后整个业界在AP领域涌现出来了知名的数据厂商和数据产业。


在开源界大概在2010年左右发力,这里介绍了Palo的区别和定位。首先,最显著的区别是Palo的成本比较低,那些看到的开源产品基本是在百万美元的量级,一套产品就这么贵。而Palo用的是普通的X86服务器,百度统计的业务也不过用了60台,大家可以算一下这个成本很大的。



第二个是Palo的高可用和异用性,还有高性能,这是我们和其他竞品最核心的区别。







在讲Palo之前,我们先看Palo是怎么用的?长什么样子?首先我们在MySQL 的选择上语句不同,包括会增加一些在MySQL 比较有用的语句。这些增加的语句怎么用呢?我们通过直接输入XP就能看到语句包括参数怎么使用。上面是Palo,因为兼容MySQL协议。



言归正传,看一下Palo的架构。首先说一下Palo的设计理念,Palo的设计理念强调要优雅、简洁,这个里面大家看我们的架构很简单,每个颜色代表一个进程,蓝色是客户端,不是Palo内部的东西。在这里面我们部署时前端和后端是分离的,在部署时一台机器上只需要部属一个进程就可以了,部署非常简单。前端首先负责源数据的管理,前端还可以负责接收产品请求,包括建表、建数据库,包括数据导入、管理,包括复本管理,数据请求。包括查询界定都是在前端完成的。比方说,前端是Palo的大脑,后端是Palo的躯干,可以干活。一般来讲前端节点稍微少一点,后端节点比较多。

为什么前端节点有3-10个呢?为什么不是10个呢?相当于元数据的架构,这个里面列了元数据的管理架构。



第一个是中心架构,最典型的代表最近开源很火的,它的优点:第一,实现很简单,这是中心架构。跟它对应的是对称架构,它的优点是可靠性比较好,缺点是当元数据更新频率高的话,如果Palo采用这种数据元数据更新比较高时,网络容易成为瓶颈。



Palo的元数据管理分三类,一个是Leader,一个是Follower,一个是Observer,Leader和Follower会参与主节点的竞选。参与选举,让大家去选,这会带来一个问题,在元数据更新时要求大量的元数据同时更新,当你元数据很多时,性能会出现瓶颈,所以我们增加了Observer,它只负责接受元数据更新,这种方式可以最大程度节省元数据更新所带来的网络瓶颈。这种结合了高可靠,高QPS和可动态的扩缩容,支持频繁的元数据屏障。

业界有些数据库元数据直接存在类似于MySQL系统里面,为了对元数据的查询和保证。但是对于Palo来讲这种方案不太适合,在Palo第一版本时也是这种方案。但是在百度整个的数据量比较大前提下,整个的元数据访问比较复杂,而且我们对比了一些复杂工具之后,会有变态的情况出现。比如说一个查询语句、一个点击查询,会翻译成成千上万的语句。如果一下翻译出来成千上万语句时,你把它都执行完,可能访问性会存在瓶颈。



我们的内存如果BUG掉怎么办?Checkpoint保证说如果内存挂掉的话,还可以同步进其他的内存,这样保证了元数据的可靠性。数据可靠性和元数据可靠性大同小异,在这里Palo也支持做副本,也可以自动修复。之前发现了一个用户在导入数据时只测了一部分,他想导入更快一点,占用存储机更小一点,等他把数据都导进去时,他扩展成了三个副本,这都是利用Palo修复的功能,把单副本扩展成三个副本。



这个是MPP,它是把查询计划与查询执行物理分离。我要说一下Palo的MPP架构和OLTP MPP是不一样的,我们为了保证整个的查询执行不影响查询计划,所以把物理分离了。



很多同学会问我Palo底层用什么实现?Palo是一个高度集成系统,是查询与存储一体的数据库系统。在这里里面,它比较易于实现一致性保证。在一致性提到两个维度,一个是单调一致性,还有Consistent View,它是高性能的,最后是易部署,易调试。像Palo去部署的话一天就部署好了,像一些大的开源系统依赖的环境和条件比较多,一旦花了几个月做好,容易出问题,出了问题去定位比较复杂。


整体的架构是这样的,下面我讲一下后端节点存储结构是什么样的?



首先是列存,这个概念大家都很熟悉,我不会讲太多。只讲一点OLTP都是行存的,OLAP可能是对全量数据的某几列进行分析,所以把它一列存在一起更好一点。列存的优点很方便做压缩很方便做索引。



这里着重讲Palo很特色的地方,它可以支持很多的数据模型。数据模型建表时会考虑很多的列式,比如说多少列。在Palo建表时首先考虑一个问题,我的哪些列是指标列,哪些是维度列。维度列是Time、Id、Country,而指标列是Clids、Cost。我们的数据库首先存在序列,然后进行排序,Palo会做一个事情保证全局唯一。



首先已经有这样一份数据存在Palo里面,一共有三行,T是这样的。又新来一份数据,新来的数据第一行它的T列跟之前T列不一样,它是20140101,1、US。存到T列之后首先把T列不一样的单独存一条,T列相同的把Value列进行合并。



如果T列重复类很大,使用Palo之后其实存的数据量非常小。

查询时会进行很多的具体操作,这一部分操作在存储过程中已经做完了,也就是说这个数据模型可以极大提升做指标维度列的表查询。除了这个具体数据模型之外,我们也当然支持非具体模型。



第二个是物化视图,它有两种优化方式和优化思路。第一个是物化视图把这些表按照某些T进行存储。一个原始表可以对应很多的物化视图,查询过程中具体应用哪个物化视图,这个是Palo进行选择的。物化视图本身概念是时间换空间的技术,然后讲一下查询的优化。



第一个是向量化执行,一个是LLVM。向量执行是行式执行引擎问题。但是LLVM有一个问题,它在编译时有一个固定的编译开销,这个大概在百毫秒左右。



下面讲一下存储的小技巧,所有的分布式系统都会分片存储,这样有可能会导致某些分片会很大,无论是用哪个方式进行分片,可能每个分片都很大。另外,做分片分列优化时又会很麻烦,Palo用两级分片解决的。通常出现用户第一级分区是用一个月分区,第二级分区是用SATA进行分区。在两级分区基础上,我们为了高效利用硬件性能,我们知道SSD数据非常好。



再讲一下数据导入,刚才提到的OLTP和OLAP的区别,OLTP有一个很关键的指标是每秒数据量。OLAP是讲数据吞吐量。鉴于此Palo有两种导入方式,一个是批量导入,一种是小批量导入。批量导入是利用Hadoop的系统,先把批量梳理好再进行导入。第二种是不批量导入,利用查询执行框架进行导入,它的好处做的频率好一点,多导入事务提交。具体的运行方式也和MySQL不一样,这两个命令都是异步的命令,因为批量导入不可能马上完成,异步命令有一个生效问题,因为Palo在业务过程中有很多没有对一致性要求,我们在一致性上做了很多改进。比如说每一批导入都附上版本号,MySQL是不用的。再比方说我们导入的一个批次数据,怎么往主版本里面去合?



这里面就给出了导入一个批次怎么往主版本合的?这里面列出了0-60,61、62都是导入的版本号。先假设主版本里面存的是0-60数据,如果往主版本合的时候,首先想一下把主版本的数据读出来,然后再写进去。通过版本合并可以极大减少数据量,但是版本合并的原则就是不能影响线路查询。



最后是资源隔离,刚才提到Palo在百度内部也应用了200多个业务,我们不可能建200多个集群。我们的大多数业务都是在一个共享集群里面,资源隔离有两层概念。第一层是用户之间建立的资源隔离,不同用户不能相互影响。第二,同用户之内设资源优先级隔离,可能我的分析类查询要优于Udhome查询。



这是Palo的发布,Palo2013年10月份发布了第一个版本。2014年发布百度云OLAP引擎。2015年进行了拍卖,实际上已经面向上市了。



这是在云上的部署方式,类AWS redshift,

on-demand provisioning。这是在云上的一个界面,浏览器去进行集群管理,增添的界面,很简单,一共没有几步。



这里再说一下未来的Palo Road map,我们希望在这基础上开源,希望有更多对数据库感兴趣的同学能够跟我们一起开发,一起活跃这个产品。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容