本文着重介绍了京东数据结转平台的技术架构,及OLTP类系统数据结转最佳实践,探讨解决大数据背景下的数据结转问题。

一、 背景介绍

业务系统在长期运行的过程中会积累大量的数据,这些数据有些是需要长期保存的,例如一些订单数据,有些只需要短期保存,例如一些日志信息。业务数据一般都会有一个生命周期,生命周期内的我们叫生产数据,生命周期之外(即业务已经关闭)的叫历史数据,我们这里提到的数据结转,指的是将需要长期保存的历史数据从生产库迁移到历史库(转),而将需要短期保存的数据定期删除(结)。

我们已经进入了大数据时代,但在OLTP类系统中,关系型数据库依然占据主导地位,在关系型数据库中,如果不及时进行数据结转,会严重影响系统的性能。

关系型数据库单机容量有限,因此业界普遍的做法是进行垂直分库和水平分片,一些大型互联网企业由于业务量庞大,仅分片的集群规模就能达到上千节点,再加上分库的集群,规模非常巨大。传统的数据归档方法往往针对单库操作,难以处理如此大规模集群的数据归档。

同时,在大型互联网企业,每日的数据增长量非常大,数据结转的频率远大于传统行业,这些行业的IT系统往往是7*24小时不间断提供服务,而且全天24小时的并发量都很大,因此数据结转操作必须尽量减少对生产库的性能影响。

为此,我们自主研发了数据结转平台,以解决大数据背景下的数据结转问题。

二、 技术架构

2.1 设计要点

(1)尽量减少对生产库的影响

数据结转操作没有复杂的业务逻辑,因此对数据库性能的影响主要体现在IO方面,减少对生产库的影响,最主要的就是减少对生产库的IO操作。目前我们采用的方案是通过从库查询数据,将数据插入历史库,然后再从主库中删除,如图1数据结转逻辑图所示,将查询的IO操作转嫁到从库上,可以大大减轻对主库的影响。为了保障数据库的高可用,业内基本都采用了主从部署模式,因此这个方案具有很高的通用性。

图1 数据结转逻辑图

(2)支持分库分片集群

我们希望数据结转平台的配置足够简单并且易于理解。在和用户的沟通过程中,我们发现他们最强烈的需求就是分库分片集群的数据结转。传统的单机数据结转操作可以抽象描述为:将数据库实例A中表B的历史数据结转到历史库C,用户的配置主要有4个元素:生产库实例A、结转表B、结转条件和历史库。对于大规模的分库分片集群规模,如果采用传统单机数据结转的配置方式,每一个数据库实例都要配置4个元素,配置量非常大。

在我们的方案中,按照图2所示对数据库集群进行划分,将主库、从库、历史库作为一个结转单元,对于分片的数据库集群,表结构相同,我们将其作为一个分组,对于分库的集群,表结构不同则划分为不同的分组。用户进行配置的时候不是面向一个数据库实例,而是面向一个分组,数据结转操作抽象为:结转分组X中表B的历史数据,用户的配置元素有3个:分组X、结转表B和结转条件。分组信息仅需配置一次。这样大大简化了用户的配置工作。

(3)支持水平扩展

由于数据库集群规模较大,数据结转平台应该具备水平扩展能力。我们采用的方案是将数据结转最核心的组件定时任务和数据库操作(数据结转执行器)独立出来,进行分布式部署。如下图3所示,

图2 数据库集群模型

配置中心为用户的入口,用户通过配置中心定义数据结转任务,任务的关键属性包括:触发条件、执行条件、目标分组等,配置中心将结转任务分发给代理程序,同时对代理程序的执行状态进行监控。结转任务的触发条件配置在代理程序中的定时任务中,而执行条件和目标分组则作为数据结转执行器的执行参数。通过水平扩展代理程序,我们对更多的数据库进行结转。

图3 数据结转组件关系图

2.2 总体架构

综合上面提到的3个设计要点,我们得到图4所示的总体架构,需要特别说明的是,对于水平分片的分组,我们采用的是多线程结转,对于不同结转单元不存在数据共享问题,所以无需考虑并发锁等问题。

三、 一些经验总结

a) 配置中心与代理程序之间的信息同步

图4 数据结转总体架构图

配置中心和代理程序在我们的方案中被设计为一种松耦合结构:在系统的运行过程中,代理程序宕机不会影响配置中心的运行,同样配置中心短暂的不可用也不会影响代理程序的运行。松耦合结构可以大大增强系统的可用性,而且配置中心、代理程序升级的时候不会影响整个系统的正常运行。

为了实现松耦合的结构,配置中心与代理程序之间的信息同步我们都是采用的异步处理,比如配置中心向代理程序分发结转任务,实际处理的时候我们采用的是拉的方式,而不是推的方式,我们在配置中心和代理程序之间维持了一个心跳,心跳的内容是代理程序负载的所有结转任务的校验码(该校验码在代理程序向配置中心发送心跳信息时由配置中心计算),当代理程序发现从配置中心得到的校验码和本地校验码不同时,则说明用户对结转任务进行了修改(包括新增、修改、删除),此时代理程序主动向配置中心发起同步结转任务的请求。这样做的好处是,代理程序在发生宕机重启后,会自动进行任务的同步。

b) 进度可视化

结转任务的进度在我们的方案中是实时汇总到配置中心的,我们称为进度可视化,代理程序通过一个独立的线程来异步处理进度可视化,一方面这样可以降低对结转任务性能的干扰,另一方面可以避免由于网络问题、配置中心暂时不可用等问题导致结转任务异常。进度可视化对于用户来说非常重要,用户在第一次定义结转任务并执行该任务的时候,进度可视化信息是用户和系统互动的唯一窗口,对用户来说是莫大的心理安慰。

c) 异常可视化

代理程序在执行数据结转任务时,会遇到各种异常信息,比如数据库URL配置错误,历史库生产库表结构不一致等,对于这些异常信息,除了在本地记录日志外,我们还将它们发送到了配置中心。将这些异常可视化,而不是让用户在大量的日志中去检索,这种方式非常便于在线问题的诊断。

d) 事务一致性

将生产库数据转到历史库本身是一个分布式的事务,在我们的方案中,不能保证数据的强一致性,比如在历史数据Insert到历史库的瞬间,用户修改了生产库的数据,我们的方案不会检测这种变化,会导致用户的修改并不会反映到历史库中,造成数据不一致。虽然在生产库中删除历史数据时,可以增加强一致性的校验,以解决这种问题,但是这样会对生产库造成一定的压力,同时考虑到这种情况发生的概率极低,因此并没有进行特殊处理。

历史数据Insert到历史库后,可能由于某种异常导致生产库执行Delete操作时失败,此时会造成数据冗余(生产库和历史库存在相同数据)。对于这种问题,我们的方案是利用Redo Log(重做日志)机制,在结转任务重新执行时根据Redo Log恢复异常现场,纠正异常数据。

e) 结转数据的回滚

我们提供了一个数据回滚功能,可以将已经结转到历史库的数据逆向回滚到生产库,用户可以配置Where条件精确指定需要回滚的数据。有些特殊情况,业务上需要对已经结转的历史数据进行修改,该功能主要用于处理这种情况。同时在测试阶段,我们可以通过该功能快速恢复测试数据,方便对数据结转平台的测试。

f) 代理程序的自动升级

代理程序和配置中心本质上是一种典型的C/S(客户端/服务端)结构,客户端是多实例部署,服务器端是集群部署,为了系统能够平滑地进行升级,我们需要对客户端的版本进行统一管理,同时我们提供了代理程序的自动升级功能,系统管理员可以通过配置中心对代理程序部署实例进行升级。自动升级功能,统一了代理程序的版本,使得我们可以不用被兼容性问题羁绊,是我们能够进行快速迭代开发有力支撑。

声明: 本文为《程序员》原创文章,未经允许请勿转载,更多精彩文章请订阅 2017 年《程序员》。
作者:王宝令、者文明。
责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qianshuguangarch申请入群,备注姓名+公司+职位。


编辑推荐:架构技术实践系列文章(部分):

  • 者文明:OLTP类系统数据结转最佳实践
  • 王晓波:同程旅游缓存系统(凤凰)打造Redis时代的完美平台实践
  • 张成远:京东分布式数据库系统演进之路
  • 一场完美的“秒杀”:API加速的业务逻辑
  • 熊明辉:缓存那些事
  • 倪江利:魅族推荐平台的架构演进之路
  • 章耿:服务化框架技术选型实践
  • 赵琨:视频直播早期创业团队的技术架构与选型
  • 卢誉声:分布式实时处理系统架构设计与机器学习实践
  • 陈斌:架构师的必备素质和成长途径
  • 林伟:高可用的大数据计算平台如何持续发布和演进
  • 柳宗扬:蘑菇街直播实战技巧带你解决直播开发难题
  • 胡骏:详解自动化运维平台的构建过程
  • 黄日成:从UDP的连接性说起——告知你不为人知的UDP
  • 林昊:阿里超大规模Docker化之路
  • 罗金鹏:双11媒体大屏背后的数据技术与产品
  • 袁岳峰:手机端创新体验——手把手教你搭建VR&AR架构
  • 张铭:双11背后的网络自动化技术
  • 王鹤:Vue.js 2.0源码解析之前端渲染篇
  • 黄日成:从TCP三次握手说起–浅析TCP协议中的疑难杂症
  • 厉心刚:JavaScript引擎分析
  • 蓝邦珏:来看看机智的前端童鞋怎么防盗
  • 陈志兴:让页面滑动流畅得飞起的新特性:Passive Event Listeners
  • 唐聪:大规模排行榜系统实践及挑战
  • 左明:半小时深刻理解React
  • 王照辉:魅族自动化测试架构之路
  • 翁宁龙:美团数据库运维自动化系统构建之路
  • 何轼:美团外卖订单中心的演进
  • 申政:唯品会多线程Redis设计与实现
  • 阿刘:千万级用户的Android客户端是如何养成的
  • 卜赫:大道至简——React Native在直播应用中的实践
  • 陈爱珍:从运维的角度看微服务和容器
  • 孙其瑞:VR应用在直播领域上的实践与探索
  • 刘丁:bilibili高并发实时弹幕系统的实战之路
  • 秦鹏:从应用到平台,云服务架构的演进过程
  • 郭炜:从0到N建立高性价比的大数据平台
  • 李智慧:宅米网技术变迁——初创互联网公司的技术发展之路
  • 陶文质:分布式系统设计的求生之路
  • 魏晓军:React Native实践之携程Moles框架
  • 学霸君姜波:耳目一新的在线答疑服务背后的核心技术
  • 爱乐奇麦凯臻:在线教育的内容研发和技术的迭代创新
  • 长虹李玮:老牌消费电子企业如何拥抱Docker
  • 徐汉彬:日请求过亿的Web系统PHP7升级实践
  • 窦威:AcFun的视频架构演化实践
  • 傅鸿城:QQ亿级日活跃业务后台核心技术揭秘
  • 宁峰峰:尖峰日96万订单,59校园狂欢节技术架构剖析
  • 梁阳鹤:每秒处理10万订单乐视集团支付架构
  • 沈辉煌:亿级日PV的魅族云同步的核心协议与架构实践
  • 李任:携程Docker最佳实践
  • 王海军:游戏研发与运营环境Docker化
  • 史海峰:当当网高可用架构之道
  • 黄哲铿:应对电商大促峰值的九个方法
  • 1号店交易系统架构如何向「高并发高可用」演进
  • 京东闫国旗:从C10K到C10M高性能网络的探索与实践
  • 李林锋:服务化架构的演进与实践
  • 1号店架构师王富平:一号店用户画像系统实践
  • 唯品会官华:实现电商平台从业务到架构的治理体系
  • 沈剑:58同城数据库架构最佳实践
  • 荔枝FM架构师刘耀华:异地多活IDC机房架构
  • UPYUN的云CDN技术架构演进之路
  • 初页CTO丁乐:分布式以后还能敏捷吗?
  • 陈科:河狸家运维系统监控系统的实现方案
  • 途牛谭俊青:多数据中心状态同步&两地三中心的理论
  • 云运维的启示与架构设计
  • 魅族多机房部署方案
  • 艺龙十万级服务器监控系统开发的架构和心得
  • 京东商品详情页应对“双11”大流量的技术实践
  • 架构师于小波:魅族实时消息推送架构

OLTP类系统数据结转最佳实践相关推荐

  1. Cassandra数据模型设计最佳实践

    2019独角兽企业重金招聘Python工程师标准>>> 本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践.其 ...

  2. 面试精讲之面试考点及大厂真题 - 分布式专栏 21 限流不能乱用-系统限流最佳实践

    21 限流不能乱用-系统限流最佳实践 没有引发任何行动的思想都不是思想,而是梦想. -- 马丁 引言 19.20小节讲了系统中的降级熔断设计和对 Hystrix 组件的功能了解,关于限流降级还有一个比 ...

  3. 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践

    学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...

  4. 科大讯飞交通超脑荣获 2019 年大数据应用最佳实践案例 TOP10

    12月5日,由中国计算机学会主办,CCF 大数据专家委员会承办的中国大数据技术大会(BDTC 2019)在北京长城饭店隆重举行.会上揭晓了由CCF大数据专家委员会组织评选的大数据应用最佳实践案例TOP ...

  5. 【TOP100】100个中国大数据应用最佳实践案例—为您打开万亿元大数据产业的财富之门

    热门下载(点击标题即可阅读) ☞[下载]2015中国数据分析师行业峰会精彩PPT下载(共计21个文件) 2017年3月28日至29日,由工业和信息化部指导.中国信息通信研究院和数据中心联盟主办的&qu ...

  6. Kyligence 客户案例“泰康集团精细化经营分析与运营平台”获评数据智能最佳实践案例

    近日,"2022 爱分析·中国数据智能最佳实践案例"评选结果正式揭晓.Kyligence 携手泰康集团申报的"泰康集团精细化经营分析与运营平台"项目经过多轮角逐 ...

  7. 帆软行业总监陈鹏:从500强企业看企业数据应用最佳实践

    近日,畅享网携手appcan成功举办企业"移动化"案例分享沙龙.本次沙龙由新城控股集团星翼空间总经理從申主持,精准聚焦"移动化"成功转型案例.会上,各位IT专业 ...

  8. 【报告分享】中国数据智能应用趋势报告:解码数据中台最佳实践,企业数字化转型新引擎.pdf(附下载链接)...

    大家好,我是文文(微信:sscbg2020),今天给大家分享爱分析于2020年10月份发布的报告<中国数据智能应用趋势报告:企业数字化转型新引擎,解码数据中台最佳实践.pdf>,希望对您有 ...

  9. 数禾云上数据湖最佳实践

    简介: 数禾科技从成立伊始就组建了大数据团队并搭建了大数据平台.并在ECS上搭建了自己的Cloudera Hadoop集群.但随着公司互联网金融业务的快速扩张发展,大数据团队承担的责任也越来越重,实时 ...

最新文章

  1. 大型Web应用的数据库设计与部署
  2. Spring Boot Web Error Page处理
  3. [Unity3D]Script 脚本所有编译器属性详解
  4. 6、 restful API
  5. 推荐系统——协同过滤
  6. 15个最好的HTML5前端响应式框架(2014)
  7. 10篇写给Git初学者的最佳教程
  8. SQL函数 left()、charindex()的使用
  9. 美股第三次熔断!一觉醒来,苹果损失了1.5亿部iPhone 11 Pro
  10. OkHttp和Volley对比
  11. GPUImageMovieWriter录制视频问题
  12. 【Iphone 游戏开发之一】创建视图并绘制简单图形
  13. 发布源码及依赖到网络maven仓库
  14. 生物与环境 —— 生命的力量
  15. 海盗号推荐 | 十分钟读懂币圈必读书籍:《区块链十年》
  16. HackTheBox::Sunday
  17. 华为芯片鸿蒙的由来,华为“鸿蒙”真的来了!看完这些商标来历,网友们又激动了...
  18. 字符串正则替换、点替换横杠
  19. ukulele弹奏模拟器v1.0(待完善)
  20. RabbitMQ系列3之运行和Rabbit服务

热门文章

  1. 重装系统后如何恢复php环境
  2. 地震勘探基础(二)之地震分辨率
  3. CarSim软件介绍(二)——车辆模型(传动系统)
  4. 双向搜索算法(基于深度优先搜索算法的优化)
  5. 关键选择:等公司加薪or跳槽涨薪?
  6. 巴比特 | 元宇宙每日必读:希壤、啫喱等元宇宙社交APP火爆后迅速降温,用户大量流失,怎么破局?...
  7. idea配置web容器与war打包
  8. 一个微信群机器人PHP,企业微信群机器人301019
  9. Spark弹性数据集
  10. NREC学习的来哦一起学习交流