摘要: 正确设计Hbase的rowkey可以让你的应用飞起来,前提是你需要了解一些Hbase的存储机制。
UTT是Aliexpress的营销消息运营平台,运营希望促销活动时APP消息推送的QPS达到34W。
UTT刚接入APP消息推送时,QPS只能达到5W,离运营的要求有很大的距离。
通过改造,QPS达到了50W,其中最主要的改造是对Hbase的rowkey的改造。
首先介绍一下UTT大致工作流程:
1、运营人员在UTT的小二控制台配置运营任务(job),在任务中设置商品选择参数、目标人群参数和消息发送渠道;
2、UTT调用算法平台计算出要发送的消息,数据生成在阿里云飞天系统的云梯表中;
3、UTT把云梯表中的数据导入到hbase,并生成N个可以并发执行的发送任务(segment),segment的信息存储在mysql表中;
4、UTT按计划发送时间捞取segment,把存储在Hbase中的segment对应的消息读取出来调用阿里巴巴移动消息推送网关发送出去。
步骤1、2、3是提前执行的,我们要优化的是步骤4。
改造中,我们主要做了如下几件事:
1、修改了Hbase的rowkey规则和数据读取方式;
2、优化了记录发送进度的逻辑;
3、优化了消息发送到阿里巴巴移动消息推送网关的流程。
其中最主要的是对Hbase的rowkey的修改。
改造前的rowkey设计:
rowkey=segmentSalt+”_"+dataIndexInSegment+”_”+segmentId+”_”+jobTime+”_”+jobId
说明如下:
job:job对应运营在后台页面配置的任务,一个job可能多次运行,用jobId+jobTime可以唯一标识一个job的一次发送任务。
segment:一个job的一次发送任务拆分为多个segment,每个segment对应10万条消息。多个segment的消