前言
随着腾讯产品与技术的发展,几乎任何一个与用户相关的在线业务的数据量都在亿级别,每日系统调用次数从亿到百亿,对海量数据的高效插入和快速读取变得越来越重要。而传统关系型数据库模式固定、强调参照完整性、数据的逻辑与物理形式相对独立等,比较适用于中小规模的数据,但对于数据的规模和并发读写方面进行大规模扩展时,RDBMS性能会大大降低,分布式更为困难。
为什么会选择HBase?
高可靠性。HBase是运行在Hadoop上的NoSQL数据库,它的数据由HDFS做了数据冗余,具有高可靠性。同时TDW(腾讯分布式数据仓库)五年的稳定运行,8800台的集群规模,证明了其服务于海量数据的能力。
高并发读写。使用日志文件(HLOG)和内存存储来将随机写转换成顺序写,保证稳定的数据插入速率;读写独立,这两种操作没有冲突。
优雅的伸缩性。HBase服务能力可以随服务器的增长而线性增长;HBase中表的数据表按Key 值范围自动分片,散布于不同的机器上,实现自动负载均衡;支持百亿行×百万列×上万个版本。
低延迟。数据按列存储,数据即索引。
低成本。历史数据不能轻易删除,数据量变得越来越多,尤其是对于日志类存储,写多读少。而HBase可构建在廉价的PC上,此外,HBase支持较多的压缩算法。
本篇文章将对HBase在腾讯大数据的应用情况做一个介绍。
HBase易用性建设
数据接入-方便、灵活
接入前台化、可配置化。只需在前台配置入库任务,按配置约定规范上报数据,即可实现将数据入库HBase,方便、简洁、快速。
与腾讯大数据的各平台(TDBank、TDW、TRC)打通,数据流转方便。
接入方式多样灵活。业务也可根据HBase提供的API自己编写代码,实现数据写入HBase。在写入量较大的情况下,业务侧还需要维护一批写入客户端,维护成本较高。一般不推荐使用这种方式。
数据查询-接口简单、易用
避免用户重复编码、方便业务查询HBase中的数据,我们封装并提供了两种查询接口:HTTP查询接口和TCP查询接口。同时支持点查询和范围查询两种查询方式。
HTTP查询接口:
通过发送HTTP POST请求方式查询数据。适用于轻量查询需求,例如客服业务受理查询,客户只要开发一个自己的界面就可以使用。返回的数据格式支持json、xml、text、idip(游戏业务定制的数据格式)四种。
TCP查询接口:
通过发送TCP请求建立长连接来查询数据。适用于大并发查询需求,例如营销活动、用户画像类数据查询需求等。返回的数据格式只提供protobuf格式。
安全建设
权限控制。每个接入业务均分配一个用户ID、IP白名单机制,只有在开通了白名单的服务器上,使用用户ID才可以访问归属业务的HBase表,当多个业务共用一个HBase的情况下,权限控制尤其必要。针对敏感数据(如用户画像数据),权限进一步控制到列级别。即只有在开通了白名单的服务器上,使用用户ID才可以访问开通了权限的HBase表中的某些列。
流量控制。控制单笔查询的数据量大小以及查询返回行数限制,同时监控大查询。在多个小业务公用一个HBase情况,可有效控制非必要场景下大量get数据业务间查询相互影响的问题。
业务应用情况
1.游戏营销活动新渠道
数据的实时性对于营销活动的效果有着十分明显的影响,由于数据延迟而带来的不良用户体验会导致玩家丧失继续参与活动的耐心从而使活动效果大打折扣。HBase在近几次营销活动(如炫舞拉新活动、天天酷跑新版预热活动、英雄联盟3周年活动、天天酷跑周年活动、英雄联盟拉新活动)中,从几十亿甚至百亿条数据中实时拉取数据的毫秒级响应,成为营销活动的一个新渠道。
2.广告日志处理
广告成为互联网公司的一个主要收入来源。我们现在每天通过HBase处理百亿级广告的请求和曝光日志,访问HBase的延迟,80%在20ms之内,保证了数据的秒级实时回流,实现检索、曝光、点击和效果日志百亿数据的实时关联,提供完整丰富的用户特征数据。精细的特征数据会带来更好的模型,产生更好的广告效果,进而提升广告收入。
3.业务受理查询
业务受理系统受限于MySQL数据库容量与性能,仅能查询最近一段时间的日志,使游戏在核实客户投诉上较为被动。游戏业务受理系统由MySQL迁移到HBase后,用业务的评价来总结下MySQL迁移HBase的效果:“业务受理对客服的查询需求服务提升了一个档次”。
4.此外,HBase在其他点击交互日志或监控日志系统上也有较多应用,如网络会话数据、秒级监控平台日志、微信支付日志等。
结束语
随着业务的发展以及HBase在腾讯的较多的成功应用案例与推广,HBase的应用还将继续增多以及向核心应用靠近的趋势。总的来说,我们的目标,降低接入使用门槛以及使用成本,使HBase能稳定地部署到更多的应用中去, 以助力业务更快发展。
本文作者:未松 来源:e-works
CIO之家 www.ciozj.com 微信公众号:imciow