基于X-Engine引擎的实时历史数据库解决方案揭秘

5_6_3

实时历史库需求背景

在当今的数字化时代,随着业务的迅速发展,每天产生的数据量会是一个惊人的数量,数据库存储的成本将会越来越大,通常的做法是对历史数据做归档,即将长期不使用的数据迁移至以文件形式存储的廉价存储设备上,比如阿里云OSS或者阿里云数据库DBS服务。

然而在部分核心业务的应用场景下,针对几个月甚至几年前的“旧”数据依旧存在实时的,低频的查询甚至更新需求,比如淘宝/天猫的历史订单查询,企业级办公软件钉钉几年前的聊天信息查询,菜鸟海量物流的历史物流订单详情等。

• 如果这时从历史备份中还原后查询,那么查询时间将会是以天为单位,可接受度为0

• 如果将这些低频但实时的查询需求的历史数据与近期活跃存储在同一套分布式数据库集群下,那么又会带来以下两大挑战

  • 存储成本巨大,进而导致成本远大于收益,比如钉钉聊天信息数据量在高度压缩后接近50PB,很难想象这些数据不做压缩会带来多大的资金开销
  • 性能挑战巨大,随着数据量越来越大,即使针对数据做了分布式存储,单实例容量超过大概5T以后性能也会急剧下滑,进而影响到近期活跃数据的查询性能,拖垮整个集群
  • 运维难度巨大,比如针对海量数据下发一个表数据结构变更操作,很难想象全部完成需要多长时间

实时历史库场景需求分析

通过上面的分析,不管是冷备份还是在线历史数据混合存储在同一张物理表上的方法都是不可取的,一般实时查询历史数据库的场景,一般需要有以下几个关键特性

  • 成本可控,历史数据的存储成本无法接受和在线库一样线性增长
  • 实时查询,历史数据的查询RT要做到与在线活跃库几乎一致
  • 查询频次较低,一般来说,越“旧”的数据查询频率越低
  • 统一查询入口,不管是活跃数据还是历史数据,查询入口保持一致
  • 改造成本需要尽可能低,最好能做到不做任何应用代码修改,可以认为历史库对程序开发人员来说是完全透明的
  • 可能存在历史数据更新需求
  • 数据规模较大,一般在100TB以上

X-Engine引擎介绍

X-Engine简介

X-Engine是阿里云数据库产品事业部自研的联机事务处理OLTP(On-Line Transaction Processing)数据库存储引擎。作为自研数据库POLARDB的存储引擎之一,已经广泛应用在阿里集团内部诸多业务系统中,包括交易历史库、钉钉历史库等核心应用,大幅缩减了业务成本,同时也作为双十一大促的关键数据库技术,挺过了数百倍平时流量的冲击。
image.png
与传统的InnoDB引擎不同,X-Engine使用分层存储架构(LSM-Tree)。分层存储有两个比较显著的优点:

  • 需要索引的热点数据集更小,写入性能更高。
  • 底层持久化的数据页是只读的,数据页采用紧凑存储格式,同时默认进行压缩,存储成本更低。

相比InnoDB引擎,依据数据特征,使用X-Engine存储空间可降低至10%~50%,我们在著名的Link-Bench和阿里巴巴内部交易业务两个数据集上测试了X-Engine的存储空间效率。在测试中,对比开压缩的InnoDB引擎,X-Engine有着2倍空间优势,而对比未开压缩的InnoDB,X-Engine则有着3~5倍的优势。
image.png

实时历史库方案,为何不是其他高压缩引擎

• 通常我们默认MySQL是当今最流行的开源数据库,大概率是在线核心数据库集群的首选。相比其他高压缩的存储引擎,引入X-Engine完全无需做任何SQL代码改造,并且支持事务,接入成本最低,学习成本几乎为0

• 写入性能更强,X-Engine相比同为LSM-tree架构的Rocksdb,有超过10倍的性能提升。

• 在存储层引入数据复用技术等,优化Compaction的性能,降低传统LSM-tree架构中Compaction动作对系统资源的冲击,保持系统性能平稳

• 引入多个层级Cache,同时结合Cach回填和预取机制,利用精细化访问机制和缓存技术,弥补传统LSM-tree引擎的读性能短板,X-Engine的点查询能力几乎与Innodb持平

下图是X-Engine与主流历史数据存储方案对比

历史数据存储选型备份至OSS开源HBaseX-Engine
压缩率
是否支持查询支持解析历史备份文件查询
实时性N/A较高非常高
应用代码改造代价N/A很高几乎不用修改
事务支持N/A仅支持单行事务
主要场景冷备份大数据生态OLTP

实时历史数据库架构设计和实现

总体架构思路

基于上文对实时历史库和X-Engine的介绍,阿里云数据库团队推出以X-Engine引擎为历史数据存储核心,同时生态工具DTS作为在线/历史数据流转通道,DMS作为历史数据无风险删除的完整“实时在线-历史库”方案,针对不同的业务场景和客户需求,在具体实现上可能会有所不同,我们提供了多种实时历史库方案的具体实现。主体架构图如下,核心思路为:

  • 久经考验的Innodb引擎作为OLTP在线库核心引擎,主要处理高频查询/更新请求,满足在线活跃数据高并发,高性能,强范围查询的业务需求
  • 阿里巴巴数据库团队自研的高压测存储引擎X-Engine作为历史库核心引擎,主要响应历史数据入库/查询/更新请求,满足历史数据冷热数据频次不一,低存储成本,高性能的业务需求(范围查询可能性能受限)
  • 统一DB接入层,根据设置的业务时间属性将请求分别转发至不同的存储引擎。针对特殊场景下的跨引擎访问,在应用层做聚合展示
  • 在线-历史数据通过阿里云提供的生态体系工具做历史数据迁移和过期数据删除,确保链路更为稳定可靠

image.png

在线库/历史库拆分方案

一般来说,需要使用到实时历史库的场景,数据量都足够大到单台宿主机存放不了。在线数据库可能是根据业务水平或垂直拆分的多个RDS,也可能是一个规模较大的DRDS集群。为了尽可能地保证在线库的性能,推荐将在线库/历史库完全拆分解耦
• 历史库集群存储全量数据
• 通过DTS链路打通在线库和历史库,实时同步
• DTS链路过滤Delete操作
• 可直接使用新版DMS配置历史数据定期删除

源端为DRDS集群

数据同步链路走RDS

• 多条DTS链路打通底层RDS节点,同步性能强
• RDS数量较多可支持API批量创建和配置
• 链路稳定性更好
• 需要保证源端目标端库表数量一致,数据路由规则一致
image.png

数据同步链路走DRDS

• 只需要配置一条DTS链路,方便省钱
• 数据同步性能较差
• 源端DRDS扩容会影响到DTS同步链路
• 源端目标端的实例数量和数据路由规则可自由配置
image.png

源端为多个RDS

目标端为多个RDS

• 业务代码无需任何改造
• 运行后期历史库节点磁盘容量存在风险
image.png

目标端为DRDS集群

  • 可能涉及到业务代码轻量改造,目标端不走分库分表键性能无法保证
  • 可将多个在线库业务合并至一套历史库集群,架构更加简洁
  • DTS链路也分为走RDS和DRDS两种

数据同步链路走RDS
image.png

同实例混用存储引擎方案

在线库/历史库拆分方案相对较为复杂,RDS支持同一实例混用存储引擎。针对总数据量不是特别大的场景,可以考虑同一实例下Innodb&X-Engine引擎混合使用

使用DMS-->数据工厂-->数据编排功能可以轻松地实现同一实例内的数据流动和过期数据删除,架构示意图如下。

  • 实现简单灵活
  • 混用存储引擎,在数据库内核参数优化上难以兼顾两者性能
  • 历史数据compact阶段可能对整个实例产生性能抖动
  • 同一实例下的库或者表无法重名,涉及到轻量业务改造

image.png

image.png

DTS赋能在线/历史数据流转

DTS不仅支持全量&增量同步,支持不同数据库产品之间的数据同步,在在线/历史库解决方案中,DTS强大的"条件过滤"功能是非常重要的一环,通过配置DTS任务可以非常便捷地实现过滤Delete操作,动动鼠标点两下即可实现自定义的数据同步策略。
image.png

DMS赋能在线库过期数据删除

在线库的过期数据删除既要保障删除效率,也要保证删除过程中对在线库不会造成性能上的抖动,新版DMS支持创建“历史数据清理”的数据变更任务,通过该任务可以非常方便地完成以下工作

• 历史数据定期删除,指定调度时间和一次调度时长
• 大事务拆分,减少事务执行过程中锁表时间过长,避免主备延迟
• 清理遭遇异常中断可重试
• 支持查看任务运行状态和失败原因分析
• 配置方面简洁
image.png

过期数据清理思路

如果没有使用DMS生态工具,也自行实现过期数据删除,但实现较为复杂。一般较为通用的设计思路为将表的主键按照大小做拆分,保证一次删除"恰当数量"的数据,既保证删除效率又不影响线上服务

• 在线库的历史数据删除策略(假设主键为id,数据保存180天,时间属性列为date_col)

  1. 初始化数值Y=select min(id) from $table_name
  2. 到了业务低峰期以后,DELETE FROM $table_name WHERE date_col< SUBDATE(CURDATE(),INTERVAL 180 DAY) and id >= Y and id <=
    Y+100000 ,执行成功后代码层重新赋值 Y=Y+100000
  3. 程序sleep 3s,重复步骤b
  4. 时间到了业务高峰期以后,停止执行,记录下当前的数值Y,第二天执行时直接从Y开始注意

• 在线库历史数据清理注意点

• 代码上注意不要出现高并发删除的情况,即步骤b还没跑完,新的步骤b又进来了

• 程序sleep的具体秒数,要通过测试,取一个最合适的数值,主要看主备是否存在较大延迟,3只是估值

• 100000也是一个估值,实际取值最好也通过测试,取一个效率最高,对业务影响最小的数值。因为drds的序列不是单点递增1的,所以这里的10w不代表10w条记录。

• 假设删除程序中途崩溃了,或者执行很多天后发现部分数据没有删除。那么可以手工先删除一小部分残留的数据,比如预估下id<100w的记录还有多少条,不多的话直接执行DELETE FROM
logs_trans WHERE reqdate < SUBDATE(CURDATE(),INTERVAL 30 DAY) and id<100w 然后初始化整个程序,这样保证重新初始化以后不会做很多无用功,即反复执行删除条目很少的sql

极端场景分析

image.png
在临界时间处理上,实时历史库方案可能遭遇极端场景导致业务可能存在历史库的脏读问题,假设在线库数据保存180天

  1. 更新179天前23时59分59秒的数据,请求路由至在线库
  2. 数据同步链路异常中断或链路存在延迟,该更新请求未能及时到达历史库
  3. 这时业务查询该数据时,由于已经数据已经"旧"到超过180天,请求路由至历史库,由于链路异常,历史库查到了脏数据

解决方法

• 配置链路异常告警,及时发现及时处理

• 预计影响的数据范围为DTS链路恢复前的临界时间点附近数据,建议从业务逻辑上订正数据

• 建议过期数据删除设置保守一点,比如临界时间为180天,过期数据只删除190天以后的数据,方便在极端场景下对比源端目标端的数据情况进行数据订正

最佳实践参考

将DRDS中的InnoDB引擎转换为X-Engine引擎链接
X-Engine如何支撑钉钉跃居AppStore第一链接
淘宝万亿级交易订单背后的存储引擎链接

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

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

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

相关文章

seata 整合 nacos(windows/linux环境)

文章目录一、下载安装nacos-server二、 seata-server下载配置2.1. 下载seata-server-1.4.2.zip2.2. 修改配置2.3. 创建命名空间2.4. 配置registry.conf2.5. 创建数据库2.6. 初始化sql脚本2.7. 配置config.txt2.8. 创建nacos-config.sh2.9. 初始化脚本数据到nacos2.10. 数据验证…

加密相关(对称加密、非对称加密、信息摘要、数字签名、CA数字证书)

1.对称加密&#xff1a; 说明&#xff1a;加密的密钥和解密的密钥相同&#xff1b;效率快&#xff1b;适合加密大信息量 常见算法&#xff1a;DES、3DES、AES、RC-5 块加密&#xff1a; 流加密&#xff1a;数据量大时效率高 2.非对称加密&#xff1a; 说明&#xff1a;加密的…

ClickHouse内核分析-MergeTree的存储结构和查询加速

注&#xff1a;以下分析基于开源 v19.15.2.2-stable 版本进行 引言 ClickHouse是最近比较火的一款开源列式存储分析型数据库&#xff0c;它最核心的特点就是极致存储压缩率和查询性能&#xff0c;本人最近正在学习ClickHouse这款产品中。从我个人的视角来看存储是决定一款数据…

“智汇光大 E启未来” 中国光大集团ESBU协同核心系统1.0正式发布

12月22日&#xff0c;“中国光大集团ESBU协同核心系统1.0”正式发布&#xff0c;标志着光大集团战略和光大数字化发展取得又一重大进展。光大集团党委书记、董事长李晓鹏现场发布“E-SBU协同核心系统”及“光大云生活”超级APP。集团党委副书记、副董事长、总经理吴利军在发布会…

云原生之路:容器技术落地最佳实践

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 阿里妹导读&#xff1a;随着容器技术的快速发展和广泛应用&#xff0c;毫无疑问云原生技术是未来发展的必然趋势。作为国内最…

SpringBoot微服务项目构建war包 部署排除指定jar

文章目录一、构建war包部署SpringBoot项目二、构建war包2.1. 适用范围2.2. 构建war包三、部署排除指定jar3.1. 下载排除插件3.2. 搜索部署排除指定jar3.3. 排除部署指定jar3.4. 验证3.5. 核心理念一、构建war包部署SpringBoot项目 如何把springboot项目构架war包部署到tomcat上…

软件设计师 - 算法思想

文章目录递归和迭代软考常见算法思想分治法回溯法贪心法动态规划法递归和迭代 递归&#xff1a;函数不断的调用自己&#xff0c;存在终止条件&#xff0c;分为递推和回归两部分&#xff1b; 迭代&#xff1a;不断用变量的旧值递推新值的过程&#xff0c;当前保存的结果作为下一…

毕业两年升主管,自沉稳而后顾人 对话阿里云MVP陈琦

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 1993年出生&#xff0c;毕业2年&#xff0c;团队主管&#xff0c;这是我对陈琦产生好奇的原因。但随着他优…

极道创始人吴江:企业级数据系统,初创一样可以做出好产品

随着云、大数据炒作热度褪去&#xff0c;对数据的存储计算技术正在回归理性。在存储这条传统toB市场的赛道上&#xff0c;创业远比toC市场复杂艰难许多。近日&#xff0c;一家以分布式文件存储创业&#xff0c;集合了存储计算与数据分析的初创公司——极道&#xff0c;表示从20…

2020年阿里云年中大促【福利】【选品】全攻略

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 2020年阿里云年中大促活动于6月1日正式上线啦&#xff01;活动时间为&#xff1a;2020年6月1日至2020年6月30日主会场链接&am…

使用Istio进行多集群部署管理(2):单控制平面Gateway连接拓扑

单控制平面拓扑下&#xff0c;多个 Kubernetes 集群共同使用在其中一个集群上运行的单个 Istio 控制平面。控制平面的 Pilot 管理本地和远程集群上的服务&#xff0c;并为所有集群配置 Envoy Sidecar 代理。 集群感知的服务路由 Istio 1.1 中引入了集群感知的服务路由能力&am…

智能制造的灾备问题如何解决?

提起压力、温度校准行业会让大部分非专业人士感到陌生。但实际上&#xff0c;在我们的日常生活中&#xff0c;很多设备都是需要经过压力检测、温度检测、过程信号检测合格之后才正式投放市场使用的&#xff0c; 北京康斯特仪表科技股份有限公司&#xff08;以下简称康斯特&…

疫情下开源数据库逆势增长,新基建下国产数据库迎机遇

2020年5月DB-Engines 数据库流行度排行大家都看了吗&#xff1f; 虽然 Top 10 与上月没有任何变化&#xff0c;但仔细观察本月的排行榜&#xff0c;Oracle 较上月几乎持平&#xff0c;仅微涨 0.02 分&#xff1b;相较而言&#xff0c;MySQL 增长明显&#xff0c;达到 14.29 分…

寻找长沙“科技之星”,CSDN星城大巡礼

2020年&#xff0c;长沙市委主要领导发出“软件产业再出发”的号召&#xff0c;并颁布了软件三年行动计划。今年5月&#xff0c;CSDN作为专业的IT社区&#xff0c;与长沙高新区签约&#xff0c;将全国总部落户长沙&#xff0c;这一战略决策&#xff0c;让CSDN与长沙的联结进一步…

分布式任务调度平台一站式讲解

文章目录一、传统的定时任务1. 传统的定时任务存在那些缺点2. 分布式任务调度3. 定时任务集群幂等性问题二、传统定时任务的实现方案2.1. 多线程2.2. TimeTask2.3. 线程池2.4. SpringBoot注解形式2.5. 基于Quartz三、常⻅分布式定时任务3.1. Quartz3.2. TBSchedule3.3. Elastic…

数据库系统 - 范式

第一范式 关系模式R中&#xff0c;当且仅当所有域只包含原子值&#xff0c;即每个分量都是不可分割的数据项&#xff1b; 第二范式 当且仅当R满足第一范式&#xff0c;且主键为多个属性值组成&#xff0c;且每个非主属性都完全依赖主键&#xff1b; 第三范式 当且仅当R满足…

全球CT影像20秒诊断,阿里云为新冠AI辅助诊断系统加速

新冠病毒全球爆发 2020年注定是不平凡的一年&#xff0c;新型冠状病毒肆虐全球&#xff0c;对于每个人来说都是一场灾难。 根据丁香园统计的数据&#xff0c;截止到2020年5月29日&#xff0c;全球新冠&#xff08;COVID-19&#xff09;累计确诊病例5,593,631人&#xff0c;累计…

麒麟信安操作系统:挖掘场景,与云俱进 ——携手openEuler赋能关键行业应用

12月24日&#xff0c;由中国电子技术标准化研究院、中国软件行业协会、绿色计算产业联盟主办&#xff0c;华为、飞腾、麒麟信安等操作系统厂商协办的操作系统产业峰会在北京成功举行。湖南麒麟信安科技股份有限公司作为华为重点邀请的四家openEuler商业发行版企业代表&#xff…

IDEA中导入VUE后,JS文件爆红解决办法

原因&#xff1a;可能是js版本不兼容的问题&#xff0c;修改如下图: 点击File–>settings&#xff0c;搜索&#xff1a;JavaScript&#xff0c;如图修改

带你一文看懂 Blockchain + NoSQL数据库

来源 | Tyler Mitchell译者 | 火火酱&#xff0c;责编 | Carol图源 | CSDN下载自视觉中国NoSQL数据库和现代区块链分类账都受益于一套共同的原则。由于其二者平台可以相互补充&#xff0c;因此当它们服务于同一应用程序时&#xff0c;能够配合完成多种工作。在本文中&#xff0…