zoukankan      html  css  js  c++  java
  • Pinot: Realtime OLAP for 530 Million Users

    传统的TP库难以应对AP的需求

    如果要应对AP的需求,

    现在有几种做法,

    列存,列存可以降低数据传输量,而且让压缩更有效

     NewSql,Hybrid TP/AP,一般都是内存数据库

     离线数据库,Hive,Presto,Spark,无论快慢,它自己本身不存储数据的,只是一个执行引擎和查询引擎

    预聚合cube,直接查询结果,问题是牺牲flexibility,而且不是什么数据都可以聚合

    典型的系统kylin

    最后一种,Pinot和druid

    称为,异步实时消费分析库,

    其实说白了,是实时数仓的简化版本,因为他依赖实时消息队列来接clients发来的数据,然后实时的消费队列的数据构建索引

    这样做的好处,架构简单,接实时流量是个很麻烦的工作,保障高可用,数据还不能丢;

    关键,这样可以批量load,因为对于建索引,或Pinot号称Cloud-friendly,最关键的是你不能一条条load,否则性能肯定跟不上;这里很难设计,自己buffer,如果先返回会丢数据,不返回client等超时;现在有了个实时队列,完美解

    这种架构的坏处,异步意味着不是实时可见,队列里面的数据是不可查询的

     那么Pinot说他比druid好的地方,就是对于简单查询,可以接受很高的qps

    架构

    数据模型上,

    有Table,固定schema,

    Table由segments组成,replicated,immutable,columnar的,大同小异

    模块上,分成Controller,Broker,Server,MInion

    Server,用来放Segments和处理查询,真正的worker

     

    Controller控制节点,最关键的是要记录下segments和servers之间的对应关系;当然可以做一系列的管控操作,listing,add,delete segment

    metadata是存在ZK上,各个组件和segment的状态是由Helix来管理 

     

     Broker,就是router,把query发到合适的server上,merge结果返回

    Minion,任务流管理,比如进行数据过期

    Zookeeper

    保存所有的状态和meta,和节点间的信息交互,上一个看到这么干的是storm

     

    UpLoad和Load过程,

    Segment进入系统,需要upload,Upload通过Controller,把meta和data分别存到Zk和Object Store上

    然后开始Load Segment,这里有个问题,如果选择Server来加载这个segment,他后面搞了一章来水这个问题,其实就是随机贪婪算法,脑补一下就可以

    选好server,server会去download meta和data,完成后通知Controller,把这个segment加入Broker的路由

    这时这个Segment的状态就变成Online,这个系统的对象的状态管理都是依赖Helix,简单的理解就是一个,分布式状态机框架,你可以定义状态和desire 状态,以及转移的函数,然后Helix会保证尽量让集群称为你想要的desire state

    查询,

    首先他的查询是可以Partial的,这个有些意思,如果部分查询失败了,还是会返回给用户,用户可以凑合看看,也可以重发查询

    Piont可以支持,lambda架构,好久没有听到这个名词了,尤其是linkedin发表的论文,异样的感觉

    Pinot可以建立Hybrid表,查询的时候会自动merge,overlap的部分数据

    副本建立,各个副本是独立从kafka消费和构建的,通过offset来保证各个副本数据一致

    后面说了一堆,如果发生不一致,他提供了一堆命令去同步各个副本的状态,感觉简单问题复杂化了

    前面也说了,之所以能cloud friendly,是因为他做的事情本来就简单

    前面依赖了消息队列

    这论文最大的价值,related work写的还不错,然后引入Helix进行集群管理

  • 相关阅读:
    raid讲解 转
    更换EMC VNX系列存储故障硬盘的检查步骤
    dwarf是怎样处理的栈帧?
    栈帧啊栈帧
    perf record -c
    perf使用的问题,再看perf record,perf record 设置的采样频率,采样频率是如何体现在
    perf中branch-filter到底是干嘛的?
    perf打印调用栈的过程
    再看内核的frace架构, tracepoint宏扩展(二)
    再看内核的frace架构, tracepoint宏扩展
  • 原文地址:https://www.cnblogs.com/fxjwind/p/12214507.html
Copyright © 2011-2022 走看看