面向海量数据的极致成本优化-云HBase的一体化冷热分离

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑选择扩展能力更好的NOSQL数据库如HBase,足够满足大多数业务的存储需求。然而,对于大量存储瓶颈类业务,存储成本依然是系统设计中需要关注的重中之重,本文介绍了一种全新的冷热分离一体化方案,0改造成本实现业务冷热分离

HBase用户福利^_^

新用户9.9元即可使用6个月云数据库HBase,更有低至1元包年的入门规格供广大HBase爱好者学习研究,更多内容请参考链接

前言

随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多数业务的存储需求。然而,对于大量存储瓶颈类业务,存储成本依然是系统设计中需要关注的重中之重,冷热分离的解决方案应用而生。

适合冷热分离的业务

账单/订单类系统的数据非常适合做冷热分离,这类系统的数据随着时间的推移往往会积攒了海量数据,而且由于数据的重要性,这些数据都要被永久保存。但是,用户往往只会查询最近消费的订单或者账单,超过半年的订单基本不会被访问。
image.png
监控系统的数据也呈非常明显的冷热分层特性。用户通常只会查看实时监控,历史数据只有在回溯故障的时候,才可能去查询。而如果把实时数据与历史数据混杂在一起,不仅会让存储的成本非常高,而且会拖慢实时查询的速度。
image.png
聊天系统是冷热分离的另外一个实用场景,用户通常只会查看实时的聊天消息,聊天记录的访问频次要低非常多。
image.png
总的来说,适合将数据做冷热分离的业务会有以下几个特征:

  • 海量数据持续增长的业务:如交易历史数据,聊天记录,数据无法做TTL,且单个用户的数据会持续累加。
  • 数据生命周期分明的业务:如监控数据,物流信息,feed收件箱,通常只会查询近期的数据,冷数据仅作为回溯问题使用。
  • 重写轻读的业务:在IOT场景下,车联网中会有大量车辆上报的传感器信息,和实时的轨迹信息,写入吞吐会非常大。但是这些数据往往只是用来做归档,查询的频率非常低。

现有冷热分离方案

目前业界的冷热分离方案大多是将数据分为冷库和热库两个库。热库可以采用速度较快,但存储成本比较高的数据库方案如内存数据库Redis,或是MySQL+SSD存储介质。而冷库则采用存储成本比较低的数据库方案,如MySQL+HDD或者是使用HBase等稀疏存储的NoSQL数据库,甚至使用高压缩比的列存数据库。而热库到冷库的数据迁移往往会有以下几个方案。

冷热库定时迁移

用户实时写入热库,并通过其他中间件定时将旧的数据倒入离线库。比如,热库可以是使用SSD介质的MySQL数据库,而冷库可以是使用HDD介质的MySQL数据库,通过DataX等数据迁移工具,定期将热库的数据迁移到HDD介质的冷库中。
image.png

冷热库双写

用户实时双写冷热库,热数据在较短时间后过期(对于不支持TTL的数据库,需要删除清理)。比如热库采用内存数据库Redis,冷库采用MySQL或者海量存储HBase,数据同时写入Redis热库和冷库。Redis中只保留最近7天的数据。查询层先查询在线库,如果在线库无数据则直接查询离线库返回。此方案无需维护一个定时迁移的任务,但是需要依赖用户双写。
image.png

基于日志的增量导出方案

在方案2的基础上,很多有日志导出能力的数据库提供了基于日志的离在线库同步方案。比如我们可以使用MySQL做热库,HBase做为冷库,然后通过导出MySQL binlog的方式,将数据增量写入到HBase中。除此之外,redis的冷热分离方案swapdb,本身也是基于redis的PSYNC实现,本质上也是属于增量导出的方案。
image.png

此方案可以上减少冷热数据库管理的开销。然而这种方案仍然需要用户自行管理在线库数据的生命周期问题,且需要额外的查询层来分别访问冷热数据。


无论是使用哪种同步方案,将数据分为热库和冷库两个库的方案,都存在一定的缺陷:

运维难度增加

用户需要运维热库和冷库两个数据库,在使用增量导出时,用户还需要维护一个定时任务来做数据导出。

数据一致性难以维护

无论是哪种数据同步方案,冷库和热库的数据一致性很难保证。比如说双写方案,用户需要处理一边写成功一边写失败的情况来自行维护两边数据的一致性。定时迁移方案和增强导出由于数据迁移都是异步的,处于冷热边界的数据有可能还在热库中,也有可能已经进入到冷库,多次读取可能会产生不同的结果。

用户查询改造成本大

对于业务来说,使用了冷热分离后,数据对于业务来说不再是一个“单库”,用户需要决定这一次查询需要去热库查询还是要去冷库,并且由于冷热数据数据迁移是异步的,用户并不知道数据到底是在热库还是冷库中,通常要冷热库一起查才能得到全量数据。另外,在使用异构的冷库和热库的情况下(如热库使用Redis/MySQL,冷库使用MySQL/HBase),用户必须针对热库和冷库查询开发两套查询接口,开发成本大大上升。

冷热分离一体化 —— 海量数据冷热分离终极解决方案

针对设置冷库热库这种将数据分离开,给业务带来运维和改造困难的缺陷,云HBase增强版开发了全新的一体冷热分离特性——在同一张表中全透明地实现冷热分离,服务端自动根据用户设置的冷热分界线自动将表中的冷数据归档到冷存储中。
image.png
冷热分离一体化的核心是应用无感知,HBase增强版用户无需改动一行查询即可享受冷热分离带来的好处。冷数据和热数据存储在一张表中,通过LSM的compaction操作在后台将热数据定期迁移到冷数据中。用户可以通过设置访问的timerange来实现查询优化,也可以完全不指定hint,云HBase增强版会保证在查询结果无损的情况下通过kv层的访问优化来最大程度上规避冷数据的访问。


冷热分离的一大目的就是为了降低存储成本,HBase增强版目前选用了云盘(高效/SSD)做为热数据存储,而使用了低成本的OSS做为了冷存储,冷存储成本仅为高效云盘的1/3。
image.png


在使用过程中,用户只需要在HBase的表上加上冷热分界线这个设置,即可开启冷热分离功能。在下面的例子中COLD_BOUNDARY被设置为86400秒(一天),代表这张表中一天前的数据会被自动归档在冷存储中。

 hbase(main):002:0> create 'chsTable', {NAME=>'f', COLD_BOUNDARY=>'86400'} 

在查询时,由于冷热数据都在同一张表中,用户全程只需要和一张表交互。用户可以设置Hot_Only的Hint告诉服务器只查热数据,或者在Get/Scan请求中加上TimeRange,系统会根据设置TimeRange决定是查询热区,冷区还是冷热都查。具体的使用方式可以参考HBase增强版帮助文档中的冷存储冷热分离章节


一体化的冷热分离方案完全避免了分库方案的种种弊端。

分库方案 云HBase增强版冷热分离一体化
运维复杂度 需要运维冷热两个库,并可能为异构数据库 业务冷热数据都在同一个库中
数据一致性 两个库之间数据一致性很难保证 冷热数据在同一个表中,不存在一致性问题
查询复杂度 查询复杂度高,需要分别查两个库,查询复杂度高 冷热数据一体化,业务查询无需改造
使用复杂度 使用复杂度高,涉及到两个库的配置和查询接口开发 使用简单,冷热分离一个配置搞定

最后

云HBase增强版是基于阿里内部HBase分支(别称Lindorm)构建,历经9年大规模考验,多次支持天猫双十一,服务于阿里经济体中的淘宝,天猫,支付宝,高德,优酷等几乎所有部门。阿里内部署超过12000台机器,主打成熟稳定、高性能、低成本、多租户及安全等大规模场景追求的能力,并提供了最高7倍于HBase开源版本的性能和一半的存储成本。冷热分离只是HBase增强版众多企业级特性中的一个。欢迎大家使用HBase增强版,直达连接:https://promotion.aliyun.com/ntms/act/hbaseenhancededition.html

招贤纳士

欢迎对数据库、云计算、大数据有兴趣的同学,加入阿里云数据库NoSQL团队(校招&社招),一起探索学习数据库及存储计算的创新动向,在云计算的蓬勃发展中做更好的自己!

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
SQL 存储 分布式数据库
【通过Hive清洗、处理和计算原始数据,Hive清洗处理后的结果,将存入Hbase,海量数据随机查询场景从HBase查询数据 】
【通过Hive清洗、处理和计算原始数据,Hive清洗处理后的结果,将存入Hbase,海量数据随机查询场景从HBase查询数据 】
250 0
|
6月前
|
机器学习/深度学习 分布式计算 Hadoop
一种HBase表数据迁移方法的优化
一种HBase表数据迁移方法的优化
91 0
|
存储 SQL 自然语言处理
基于 HBase 的海量数据查询与检索解析|学习笔记
快速学习基于 HBase 的海量数据查询与检索解析
基于 HBase 的海量数据查询与检索解析|学习笔记
|
3月前
|
缓存 监控 Java
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
81 4
|
存储 SQL 消息中间件
Kylin 在贝壳的性能挑战和 HBase 优化实践(2)
Kylin 在贝壳的性能挑战和 HBase 优化实践
134 0
Kylin 在贝壳的性能挑战和 HBase 优化实践(2)
|
SQL 分布式计算 监控
Kylin 在贝壳的性能挑战和 HBase 优化实践(1)
Kylin 在贝壳的性能挑战和 HBase 优化实践
127 0
Kylin 在贝壳的性能挑战和 HBase 优化实践(1)
|
分布式数据库 Hbase
|
Arthas 负载均衡 Java
Hbase1.3 生产优化,源码分析
Hbase1.3 生产优化,源码分析
132 0
|
缓存 安全 Java
HBase 优化_3 | 学习笔记
快速学习 HBase 优化_3
162 0
|
存储 缓存 分布式数据库
HBase 优化_2 | 学习笔记
快速学习 HBase 优化_2
116 0
下一篇
无影云桌面