修改HBase的rowkey设计把应用的QPS从5W提升到50W

摘要: 正确设计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的消息可以并行发送。

segmentSalt:4位的随机字母,每个segment有一个salt,用于把数据均匀分散到Hbase的不同region中;

dataIndexInSegment:每条消息在segment中的序号,从0到99999;

改造前UTT按计划发送时间捞出要发送的segment后,从按0到99999的顺序从Hbase中读取消息,然后发送出去。为了提高效率使用了hbase的批量get方法。

这个设计存在一个很大的问题,同一个segment里的相邻消息的rowkey不是连续的,之间可能隔的非常远。

如下图所示,10000号消息rowkey和10000


1号消息rowkey之间可能隔了很多rowkey。

这会带来啥问题?这就需要了解Hbase的存储机制。

Hbase的存储是以storeFile为单位,以LSM树(Log-structured merge tree)方式存储。

此结构优化写性能,牺牲读性能。写数据的时候先按rowkey计算出region和store,顺序写入到store的memeStoreFile中,memoStoreFile达到指定大小后flush到磁盘的storeFile中。因此同一个store里,多个storeFile的rowkey的范围是会有重叠的

按rowkey读取数据时,计算该rowkey可能存储的storeFile,把这些storeFile全部读取到内存中,最后把多个storeFile里查询到的结果合并后输出。

为了提高读性能,Hbase会在后台把多个storeFile进行merge,形成rowkey范围互不重叠的storeFile。

另外Hbase采用按列值KV方式存储数据,也就是说每个列的值都是独立存储的。每个列值KV对里的key包括了rowkey和列名,key里的大部分数据是重复的,storeFile采用压缩算法减小空间

改造前同一个segment里的消息的rowkey很分散,读取一个segment的消息时要从磁盘上装载大量的storeFile,消耗大量的cpu进行解压缩,这也会导致storeFile 的cache命中率不高。并且读出来的大部分storeFile是没有包含所需数据的。

分析UTT的场景,多个segment是并发读写的,每个segment有segmentSalt,保证了读写均匀分布到Hbase的不同region。如果读取一个segment的消息时能从尽量少的storeFile读取数据,就能够减少磁盘IO,减少解压缩及数据查找的CPU,还能提高storeFile cache的命中率。

改造后的rowkey设计:

rowkey=segmentSalt+”_”+jobTime+”_”+jobId+”_”+segmentId+”_”+dataIndexInSegment(前补零到定长5位)

这样多个segment并发读写均匀分散到不同region,同一个segment的消息顺序写到相同的storeFile中,读取的时候不再使用get方法而是使用scan方法。最后qps提升了一个数量级。

附一个hbase的知识脑图,不知道作者是谁,挺好的。

原文链接 

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BDTC 2019 | 15场分论坛,10分钟速览,5折票优惠,烧脑模式开启

2019中国大数据技术大会(BDTC)5折优惠票限时抢购啦,学生票仅售599元!扫描上图二维码或登录官网(https://t.csdnimg.cn/KSTh)了解更多最新大会详情。近日,在组委会公布大会部分重磅讲师和前沿议题…

我需要一个高并发的架构,我的系统要改造成微服务吗

摘要: 最近大家都在谈微服务,随着越来越多的在线业务需要提供更大并发的scale-up 和 scale out能力,微服务确实提供了比较好分布式服务的解决方案。 阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开…

python工作目录_Python目录的基本操作

一、任务描述 本实验任务主要对Python目录进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python目录的基本操作,并对Python目录的基本操作进行整理并填写工作任务报告。 二、任务目标 1、掌握Python目录的操作 三、任务环境 Ubuntu16…

【建议收藏】数据中心服务器基础知识大全

戳蓝字“CSDN云计算”关注我们哦!作者 | Hardy责编 | 阿秃服务器对每个从事IT工作的人来说并不陌生,但是服务器所涉及的各种知识细节,并非大家都十分清楚,为了让大家深入了解服务器的关键知识点,笔者特意抽时间总结了…

一文了解阿里云CDN HTTP2.0

摘要: 本文由阿里视频云高级技术专家空见撰写,主要介绍HTTP2.0的历史、特性、如何使用和使用之后的性能对比验证。 背景介绍 要了解HTTP2.0,先了解一下HTTP超文本传输协议的历史(HyperText Transfer Protocol)&#…

VMVare 虚拟机使用桥接模式

VMVare 虚拟机使用桥接模式,和物理机使用同一个物理网卡,和物理主机使用同一个段的ip。 文章目录1. VMware 编辑 > 虚拟网络编辑器2. 更改配置3. 编辑名称为VMnet0 的网络4. 编辑虚拟机的网络适配器5. 编辑虚拟机的网络适配器6. 再启动虚拟机1. VMwar…

阿里云基于NVM的持久化高性能Redis数据库

摘要: 背景 Redis作为一款简洁、高效的开源K/V数据库,可以被用于内存缓存、持久化存储等不同场景,大量服务于各类互联网应用。同时也提供了丰富的功能配置,客户可以根据各自业务需求,在读写性能、缓存容量、数据可靠性…

rgss加密文件解包器_Unity AssetBundle高效加密案例分享

这是侑虎科技第585篇文章,感谢作者江鱼供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:793972859)作者主页:https://www.zhihu.com/…

阿里云DTS大幅降价,低至400元即可获得实现秒级延迟的数据传输服务

为了释放更多技术红利,进一步普惠广大客户和开发者,阿里云7月上旬宣布数据传输服务(Data Transmission Service,简称DTS) 数据同步功能降价,最高降价幅度高达40%。中国大陆,最低单价低至400元/月,跨境专线同步&#xf…

【又是一波重点】深度解析服务器科普知识 | CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦!作者 | Hardy晗狄转自 | CSDN博客责编 | 阿秃服务器是网络数据的节点和枢纽,是一种高性能计算机,存储、处理网络上80%的数据、信息,负责为网络中的多个客户端用户同时提供信…

Linux下启动/关闭Oracle服务和 oracle监听启动/关闭/查看状态

文章目录一、Linux下启动Oracle 二步曲1)启动监听2)启动数据库实例二、Linux下启动Oracle 实战操作2.1. 登录服务器,切换到oracle用户,或者以oracle用户登录2.2. 打开监听服务2.3. 以SYS用户身份登录Oracle2.4. 通过startup命令启…

【公测中】阿里云发布国内首个大数据双活容灾服务,满足高要求大数据灾备场景

在6月上旬举行的云栖大会上海峰会上,阿里云发布了国内首个大数据集群双活容灾产品-混合云容灾服务下的混合云大数据容灾服务(HDR for Big Data, 简称 HDR-BD),并已经在7月份开始邀测。HDR-BD采用业界领先的数据双向实时复制技术&a…

linux CentOS7 最小化安装环境静默安装Oracle11GR2数据库(安装操作系统环境_01)

文章目录最小化安装 linux CentOS7我使用的镜像包:CentOS-7-x86_64-DVD-1810.iso虚拟机就创建好了 通过方向键选择:install centos 7 回车 直接点击:continue 这里采用自动分区,手动自定义分区请参考 网络设置方式有2种 第一种…

阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据

在6月上旬举行的云栖大会上海峰会上,阿里云发布了vSphere虚拟机备份上云服务(HBR for vSphere),并已经在7月份开始邀测。利用混合云备份服务可以将虚拟机镜像备份上云,避免了传统备份方案复杂的软件部署,存…

行!人工智能玩大了!程序员:太扯,阴谋!你怎么看?

人工智能真的玩大了吗?人工智能行业的人才真的“爆发了?”AI程序员究竟怎么样?A与B 薪酬与前景程序员与远方2017年~2018年,是人工智能大火的时候。你会发现,跟朋友聊天不谈人工智能,聊天的bigger都上不去。…

spss 22 0统计分析从入门到精通_「转需」20+统计分析软件使用工具包,一次全搞定...

数据越来越多,使用统计软件对数据进行处理不失为一个减少工作量的好办法。在学习统计时,又怎么能少的了各种分析数据的助手呢?情报站为大家准备了常用统计软件使用工具包,各项常用统计软件课程一次全到手!(领取方式见评…

Pandas/networkx图分析简单入门

摘要: 本文是一篇pandas/networkx图分析入门,对所举的欺诈检测用例进行了简单的图论分析,便于可视化及操作。 对于图论而言,大家或多或少有些了解,数学专业或计算机相关专业的读者可能对其更加清楚。图论中的图像是由若…

linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(安装常用工具_02)

接上一篇:linux CentOS7 最小化安装环境静默安装Oracle11GR2数据库(安装操作系统环境_01) 安装wget yum install -y wget安装vim yum install -y vim-enhanced或者 yum -y install vim安装unzip yum install zip unzip安装 lrzsz yum -y…

如何在学习机器学习时学习数学?

摘要: 机器学习到底需要怎么样的数学基础?高段位机器学习如何练成?来瞧瞧。 到目前为止,我们都还不完全清楚开始机器学习需要什么样的数学水平,特别是那些没有在学校学习数学或统计学的人。 在这篇文章中&#xff0c…

RPA机器人来了, 你的饭碗还好吗?

摘要: RPA正在席卷全球各行各业,从金融到医疗再到零售。多种重复有规律的工作流程正在被代替。从上世纪90年代到现在,RPA经历了怎样的发展历程,目前又是怎么样的现状呢? RPA,正在席卷全球 这是一个平常的星…