亿级下ApsaraDB HBase Phoenix秒级内RT在大搜车实践

一、前言

大搜车业务线众多,对于数据的需求也各种各样,本文将介绍其中之一的大搜车车商客户实时数据需求,例如车商PC|H5端店铺、车辆、分享等实时流量数据报表;随着数据量级的增长,目前数据量级在亿级以上,原有以mysql提供查询服务不再适合此场景,经过多方面的考虑,存储最终选择Aliyun HBase,同时为了几乎0成本的切换,采用Phoenix On HBase Sql中间件,它管理着HBase的二级索引并且它对sql的支持友好,本文也将介绍Phoenix和HBase结合场景下的压力测试。

二、数据系统架构

  • 实时数据来源为采集PC|H5端访问日志,通过Flume收集这些日志,并按照业务场景需求,通过流试计算清洗、过滤、统计,使用Phoenix api实时推送到HBase。
  • 由于Phoenix管理HBase二级索引,使用Phoenix api推送数据索引表的也会被更新,这样对于编码成本很低。
  • 原始的日志同时会通过Flume 持久化至HDFS,方便离线计算数据分析。
  • 统一通过数据网关提供业务查询。

    架构图:

三、压测

  • 数据准备

    • 使用阿里云数据集成 服务将mysql数据导入至PHoenix,不过它使用的HBase原生api导入,所以索引数据需要在导完之后再重建。
    • 使用MapReduce的方式,这种更友好,直接导出为HFile文件,不必走HBase API,这样会减少集群的负载以及网络消耗,速度更快。但使用的是阿里云HBase,依赖的Hadoop集群不对外。
    • 使用Phoenix提供的 psql.py脚本以csv文件的方式导入。

    考虑到是一次性的工作,本次压测数据我采用Phoenix提供的脚本的方式导入数据。

  • 数据表、sql模板、索引建立
    • 表建立 参考

      CREATE TABLE FLOW.SHOP_DATA_BY_SALER_CAR_V2 (
          PK varchar primary key,
          INFO.DATE_STR BIGINT,
          INFO.STORE_ID VARCHAR,
          INFO.CAR_ID VARCHAR,
          INFO.SELLER_ID VARCHAR,
          INFO.SHARE_PV INTEGER,
          INFO.SHARE_UV INTEGER,
          INFO.FLOW_PV INTEGER,
          INFO.FLOW_UV INTEGER,
          INFO.CALL_PV INTEGER,
          INFO.CALL_UV INTEGER,
          INFO.APPOINT_PV INTEGER,
          INFO.APPOINT_UV INTEGER,
          INFO.LAST_UPDATE_TIME DATE
      ) COMPRESSION='SNAPPY',DATA_BLOCK_ENCODING='DIFF';
      
    • 模拟真实查询sql模板,sql查询时间范围为1个月的数据。
      SELECT info.seller_id,
          sum(info.share_pv) as sum_share_pv,
          sum(info.flow_pv) as sum_flow_pv,
          sum(info.call_pv) as sum_call_pv,
          sum(info.appoint_pv) as sum_appoint_pv
      FROM FLOW.SHOP_DATA_BY_SALER_CAR_V2
      WHERE info.store_id = '%s'
          AND info.date >= %d
          AND info.date <= %d
      GROUP BY info.seller_id
      ORDER BY sum_share_pv DESC
      
      SELECT sum(info.share_pv) as sum_share_pv,
          sum(info.flow_pv) as sum_flow_pv,
          sum(info.call_pv) as sum_call_pv,
          sum(info.appoint_pv) as sum_appoint_pv
      FROM FLOW.SHOP_DATA_BY_SALER_CAR_V2
      WHERE info.store_id = '%s'
          AND info.date >= %d
          AND info.date <=  %d
      
      SELECT sum(info.share_pv) as sum_share_pv,
          sum(info.flow_pv) as sum_flow_pv,
          sum(info.call_pv) as sum_call_pv,
          sum(info.appoint_pv) as sum_appoint_pv
      FROM FLOW.SHOP_DATA_BY_SALER_CAR_V2
      WHERE info.store_id = '%s'
          AND info.date >= %d
          AND info.date <=  %d
          AND info.seller_id = '%s'
      
      SELECT info.seller_id,
          sum(info.share_pv) sum_share_pv,
          sum(info.flow_pv) sum_flow_pv
      FROM FLOW.SHOP_DATA_BY_SALER_CAR_V2
      WHERE info.car_id = '%s'
          AND info.date >= %d
          AND info.date <=  %d
          AND info.share_pv <> 0
      ORDER BY info.seller_id
      
    • 针对sql模板场景,建立索引表,索引类为覆盖索引 Secondary Indexing
      CREATE INDEX SHOP_DATA_BY_SALER_CAR_V2_INDEX
      ON FLOW.SHOP_DATA_BY_SALER_CAR_V2 (INFO.STORE_ID, INFO.DATE_STR)
      INCLUDE (INFO.SELLER_ID, INFO.CAR_ID, INFO.SHARE_PV, INFO.FLOW_PV, INFO.CALL_PV, INFO.APPOINT_PV)
      COMPRESSION='SNAPPY',DATA_BLOCK_ENCODING='DIFF'
      
      CREATE INDEX SHOP_DATA_BY_SALER_CAR_V2_INDEX1
      ON FLOW.SHOP_DATA_BY_SALER_CAR_V2 (INFO.CAR_ID, INFO.DATE_STR, INFO.SHARE_PV)
      INCLUDE (INFO.SELLER_ID, INFO.FLOW_PV, INFO.CALL_PV, INFO.APPOINT_PV)
      COMPRESSION='SNAPPY',DATA_BLOCK_ENCODING='DIFF'
      
    • 数据样例的选择:sql查询时间范围均为1个月,查询条件由挑选出这1个月中按车商、销售、车辆各个分组总条数在前300、300、300的数据按照模板随机组合查询。保证sql查询都能命中数据,同时也排除每次都是量很大的数据。数据样例见最后。测试表的数据量级在亿行以上。
  • 系统情况

    • ECS:4CPU8GB。
    • HBase节点信息:Master(4CPU8GB) Core(4CPU8GB) 数据盘都为云盘。
  • 压测分别从10 ~ 100并发之前压测,以10为累加单位进行压测,压测时间为10分钟。目前我们业务场景每秒并发数在50 ~ 80左右,高峰期高于80。
    • 压测的场景模拟线上的请求,查询基本是都是单表比较复杂的聚合操作。
    • 压测结果分别从TPS(每秒处理任务数)、RT(平均响应数据)两个指标衡量。
    • 以下挑选了并发数在100的时候应用GC、HBase系统负载情况。
      • 应用GC情况 左边为应用日志 右边为GC(对应列分别为S0 S1 E O M CCS YGC YGCT FGC FGCT GCT),应用本身GC状态良好。
      • HBase负载,**从HBase 两台数据节点负载看得出压测的时候已经完全将HBase负载压到极限之上,所以不难得出如果在系统资源充足的情况下,并发数相同的情况下,TPS、RT远远比目前的结果要好**。

四、写在最后

  • 进过压力测试,以及上线了一段时间,ApsaraDB HBase Phoenix能满足我们的业务场景的使用。同时Aliyun HBase支持横向扩展以及靠谱的运维能力,也为后面支持更高的并发提供夯实的基础。
  • 结合我们业务场景,基本都是单表的复杂聚合操作,对IO消耗比较大,因此最近迁移了HBase,把云盘换成了SSD盘。提高IO的能力。迁移工具 同时期待Aliyun HBase的数据迁移能更加完善。
  • 数据样例, ps:数据集经过特殊处理。
    • 车商数据集

      010140548,001106040,001109847,001104443,001106241,001101049,001110943,001131047,001119549,001121749,001102043,001142748,001118444,001108248,001111340,001108240,001151942 .......
      
    • 车辆数据集
      Cg6f7hXsfkqffgWHsafk,adfu3fMhZsfkDffBFsa4kNadf,fcfchesfkdfg15saakcadf6d487b834e2b8eb81217c,72f8hOsfkRffgdIsaQkMadf,75fah8sfk3fg8fsa4kdadf7c4e03b9e46a864b858b6,59f0hesfk5ffg96sadk8adf934d72b4f8119f0e38acb .......
      
    • 销售数据集
      11234,11791,18782,13298,15889,13069,13213,18231,18988,18346,18946,13137,15051,15320,15680,15066,15512,13585,15555,13235,18195,13888,13363,13921,17777,18088,13188,15708 .....
      
时间: 2025-01-19 07:29:17

亿级下ApsaraDB HBase Phoenix秒级内RT在大搜车实践的相关文章

是骡子是马,拉出来溜溜 ——阿里云HBase在大搜车的试用

        大搜车,中国领先的车商服务平台.凭借多年对汽车行业的深刻洞察与理解,推出了适合汽车经销商集团及大型二手车商的业务经营管理系统"大风车",适合中小二手车商的经营管理系统"车牛",汽车消费延保产品"大搜车质保"以及基于蚂蚁金服开放平台赋能的[信用购车 先用后买]金融服务方案-"弹个车",为车商提供软件服务.金融服务.交易服务及营销服务等,助力经销商提高管理及盈利能力.现已成功为全国超过70%的二手车经销商提供了全方

Aliware推出应用配置管理大杀器,分布式架构下配置推送秒级生效!

近日,阿里中间件(Aliware)产品家族又推出了一款工具类产品--应用配置管理(ACM),它的主要功能是解决在分布式架构环境中,对应用配置进行集中管理和推送的问题. 用户通过ACM不仅可以在微服务.DevOps.大数据等场景下极大地减轻配置管理的工作量,而且配置信息可以自动推送到各个服务器中,并在秒级延迟内生效! 据ACM产品负责人介绍,在传统架构中,如果应用的配置信息需要变更,用户就要逐个登陆服务器并且手动修改配置.人工修改不仅实现效率低而且出错率高.ACM正解决了应用配置管理中集中化和智能

ApsaraDB HBase产品支持公网\内网混访

前言 公网访问是一个客户的强需求,主要有解决以下几个问题: 1.开发测试访问,一般开发测试在云下 2.客户hbase上云,从线下把数据同步上云 3.确实有一些公网写数据的需求,比如物联网 为此,我们产品上提供了公网访问的支持. 另外经典网络访问VPC环境需要联系HBase产品开通,主要支持经典迁移VPC过渡时使用. 架构 支持混合访问,但是需要阿里云提供的客户端,目前公网访问流量免费. 操作 1.打开HBase管控界面,申请外网地址 2.下载专有的HBase客户端http://public-hb

jQuery教程:选择父级下的子级元素

文章简介: 到目前为止,我写的jQuery教程已经到了第八章了,不知大家现在对jQuery是否还比较陌生,如果你还很陌生的话,没关系.css学习网也在教程的后面留下了作业或案例,希望朋友们能认真的完成作业认真的看案例.我相信大家一定能好好的驾驭这匹烈马的.  到目前为止,我写的jQuery教程已经到了第八章了,不知大家现在对jQuery是否还比较陌生,如果你还很陌生的话,没关系.css学习网也在教程的后面留下了作业或案例,希望朋友们能认真的完成作业认真的看案例.我相信大家一定能好好的驾驭这匹烈马

【双11背后的技术】万亿交易量级下的秒级监控

选自<不一样的技术创新--阿里巴巴2016双11背后的技术>,全书目录:https://yq.aliyun.com/articles/68637 本文作者:郁松.章邯.程超.癫行 前言 2016财年,阿里巴巴电商交易额(GMV)突破3万亿元人民币,成为全球最大网上经济体,这背后是基础架构事业群构筑的坚强基石. 在2016年双11全球购物狂欢节中,天猫全天交易额1207亿元,前30分钟每秒交易峰值17.5万笔,每秒支付峰值12万笔.承载这些秒级数据背后的监控产品是如何实现的呢?接下来本文将从阿里

PostgreSQL 百亿数据 秒级响应 正则及模糊查询

正则匹配和模糊匹配通常是搜索引擎的特长,但是如果你使用的是 PostgreSQL 数据库照样能实现,并且性能不赖,加上分布式方案 (譬如 plproxy, pg_shard, fdw shard, pg-xc, pg-xl, greenplum),处理百亿以上数据量的正则匹配和模糊匹配效果杠杠的,同时还不失数据库固有的功能,一举多得. 物联网中有大量的数据,除了数字数据,还有字符串类的数据,例如条形码,车牌,手机号,邮箱,姓名等等. 假设用户需要在大量的传感数据中进行模糊检索,甚至规则表达式匹配

【双11背后的技术】17.5W秒级交易峰值下的混合云弹性架构之路

选自<不一样的技术创新--阿里巴巴2016双11背后的技术>,全书目录:https://yq.aliyun.com/articles/68637 前言 每年的双11都是一个全球狂欢的节日,随着每年交易逐年创造奇迹的背后,按照传统的方式,我们的成本也在逐年上升.双11当天的秒级交易峰值平时的近10多倍,我们要用3-4倍的机器去支撑.但大促过后这批机器的资源利用率不高,到次年的双11会形成较长时间的低效运行.试想一下,电商交易有大促峰值,而阿里云有售卖Buffer,如果能充分发挥云计算的弹性能力,

17.5W秒级交易峰值下的混合云弹性架构之路

前言 每年的双11都是一个全球狂欢的节日,随着每年交易逐年创造奇迹的背后,按照传统的方式,我们的成本也在逐年上升.双11当天的秒级交易峰值平时的近10多倍,我们要用3-4倍的机器去支撑.但大促过后这批机器的资源利用率不高,到次年的双11会形成较长时间的低效运行.试想一下,电商交易有大促峰值,而阿里云有售卖Buffer,如果能充分发挥云计算的弹性能力,让资源可以两边快速腾挪,就可以解决资源浪费的问题了.把我们的交易单元可以部署在云上面,那么大促的时候我们只需要按照压测模型去云上构建一个符合能力的新

TB级大表秒级任意维度分析 - 采样估值满足高效TOP N等分析需求

标签 PostgreSQL , 采样 , sample , TOP N , 统计分析 背景 估值计算是统计学的常用手段.因为数据量庞大,求精确数值需要耗费巨大的资源,而统计分析并不要求完全精确的数据,因此估值计算是一种折中的方法,广泛应用于统计分析场景. PostgreSQL是一个功能强大的数据库,在估值统计方面,提供了很多方法. 1.PostgreSQL中,求估计的UV,增量UV等(即count distinct),可以通过HLL插件来实现. <Greenplum 最佳实践 - 估值插件hll