订单系统设计 —— 数据同步与监控
文章目录
- 一、方案背景
- 1.1考虑因素
- 1.2 数据特点
- 二、增量同步方案
- 2.1 并发消费
- 2.2 顺序消费
- 2.3 1:N关联数据
- 三、存量同步方案
- 3.1 并发同步
- 3.2 基于视图同步
- 四、监控与补偿机制
- 4.1 延迟监控
- 4.2 补偿机制
一、方案背景
当订单数据量规模足够大或查询统计足够复杂时,通常会采用MySQL + NoSQL的架构方案,这种方案需要将MySQL中数据同步到其它介质,比如HBase、ES,或者阿里云的TableStore等。订单数据的同步面临着诸多挑战,尤其是异构介质,下面会从”数据同步面临的挑战“和以及”订单数据特点“两个维度来分析。
1.1考虑因素
- 性能和稳定性: 订单系统为每个公司的核心业务系统,数据的同步尽量对订单系统无感,换言之,同步双写的方案会影响订单系统的性能和稳定性;
- 幂等性: 同步RPC和异步消息,都可能产生重复数据,数据落入HBase和ES时需要考虑数据去重,保证幂等性;
- 顺序性: 由于网络的不确定性,有可能数据库中先更新的数据后到达HBase或ES,导致最新的数据被旧数据覆盖;
- 关联性: 通常订单数据会包含很多信息,库表设计时通常会进行垂直拆分,通过订单号进行关联,当进行数据同步时,如何处理这些关联表的数据需要考虑;
1.2 数据特点
- 存量数据: 已完成或结束的订单归纳为”存量数据“,其特点是:数据量大、只读(没有变更,无需考虑顺序性);
- 增量数据: 未结束的订单归纳为”增量数据“,其特点是:并发量大、数据变更比较频繁(需要考虑顺序性);
二、增量同步方案
整体思路: 将数据库的Binlog解析成消息,异步同步到HBase或ES,保障对订单系统的无感。利用订单号的唯一性,在HBase或ES进行物理去重;每条数据携带版本,通过版本号保障新数据不会被旧数据覆盖;对于订单相关联的表数据,在HBase和ES中会将数据打平,以宽表的形式存储,因为HBase和ES并不擅长“关系”的处理,性能开销很大。
2.1 并发消费
整体流程:Canal将Binlog日志转换成MQ消息,同步程序并发消费消息(最大化消费能力),然后先将数据写入HBase,然后将HBase中订单对应的宽表数据写入ES。这里有几点需要说明:
- HBase有版本控制机制,而且是字段级别的,只有更大版本号的数据才能更新字段,利用这个特点可以防止新数据被覆盖,同时也能够用一个宽表来聚合/扁平化订单关联表;
- ES也有版本控制机制,但是是文档/行级别的,无法进行字段级别的更新,这就导致无法用一个宽表来聚合/扁平化订单关联表,因此现在HBase中生成宽表,同时有个额外的Version字段(每次更新HBase时都更新为当前时间),将HBase的Version作为ES的外部版本;
2.2 顺序消费
整体流程与方案1类似,区别在于:发送消息时根据订单号哈希,将相同订单关联的数据发送到相同的队列,同时同步程序需要进行顺序消费(消费能力受限,需要保持消息队列和消费实例为1:1进行水平扩容),另外为了保持顺序性,每个订单相关联的表应该在相同库中,具体流程如下所示:
2.3 1:N关联数据
订单关联表中,经常会遇到1:N的关联关系,比如一个订单多个商品场景。数据同步时,主要利用了HBase的动态列的特性来处理这种一对多的关系,如下图所示,每列可以表示一个商品(商品粒度),也可以进一步细化到商品的每个字段(字段维度),通过id来区分。
三、存量同步方案
整体思路: 基于DataX进行离线数据的同步。由于高性能、高扩展以及对多种数据源的支持,DataX已经成为离线数据同步工具的首选,不过由于开源的是单机版本,需要结合调度系统一起完成。
3.1 并发同步
为订单及其关联表每个表分配一个同步任务,并发进行同步,基于HBase聚合/扁平化数据,数据版本统一为V1,然后再通过DataX或MQ消息将数据从HBase同步到ES,如下图所示:
- 优点:并发度高、速度快(数据读取都是简单SQL),数据库压力小(只需同步到HBase);
- 缺点:暂无
3.2 基于视图同步
ES不再依赖于HBase同步数据,而是通过视图,将订单及其关联表组成一张宽表,如下图所示:
- 优点:ES同步链路不再依赖HBase;
- 缺点:数据量大时,关联查询速度会很慢;
四、监控与补偿机制
4.1 延迟监控
数据同步链路的监控分为两方面:链路中各节点的系统监控,以及延迟检测。延迟检测为业务艰监控,主要思想就是记录数据进出各节点的时间,通过时间差判断是否发生延时,正常情况下同步延迟在1s以内,如果超时则触发告警。各节点的异常分析如下:
- 数据库负载过高或异常:业务操作异常或超时,触发业务告警;
- Canal负载过高或异常:Canal系统告警;
- 同步程序负载过高或异常:消息堆积触发MQ告警,延迟过大触发业务告警;
- ES/HBase负载过高或异常:消息堆积触发MQ告警,同步异常触发业务告警,ES/HBase告警;
4.2 补偿机制
- 订单系统/数据库异常:下单失败,无新数据产生,无需补偿,需解决Bug修复;
- Canal异常:异常期间,可以通过查询DB的方式同步数据,或者订单系统降级走DB;
- 同步程序/ES/HBase异常:数据无法写入,无需补偿,需解决Bug修复,恢复期间订单系统采取降级方案,查询可以临时走DB;
参考
- Elasticsearch多表关联设计指南
- 有赞订单同步的探索与实践
订单系统设计 —— 数据同步与监控相关推荐
- 使用文件监控对象FileSystemWatcher实现数据同步
使用文件监控对象FileSystemWatcher实现数据同步 原文 使用文件监控对象FileSystemWatcher实现数据同步 最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文 ...
- 用Semisynchronous Replication半同步,mk-table-checksum数据同步一致性检查,监控主从同步运行状态的脚本等方式加强SQL性能和数据审核...
一,为A组在X单独另建一个MYSQL服务器(MYSQL B),A组平时更新的数据库为MYSQL B.待MYSQL B的数据审核准确无误后.发布给现在布置在X上的MYSQL服务器(MYSQL A).并进 ...
- Canal监控MySQL数据库实现数据同步
canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL. canal简介 需求:将MySQL中某些表的数据实时的同步到 ...
- elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践
来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...
- 基于 MySQL Binlog 的 Elasticsearch 数据同步实践
一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...
- 基于OGG Datahub插件将Oracle数据同步上云
摘要:随着数据规模的不断扩大,传统的RDBMS难以满足OLAP的需求,本文将介绍如何将Oracle的数据实时同步到阿里云的大数据处理平台当中,并利用大数据工具对数据进行分析. 一.背景介绍 随着数据规 ...
- 去哪儿网数据同步平台技术演进与实践
作者介绍 井显生,2019年加入去哪儿,现负责国内机票出票.退款.改签核心业务.在领域驱动设计(DDD).高并发有大量实践经验. 一.前言 去哪儿网国内机票售后是为用户提供退票.改签.航班变动.行程服 ...
- 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原
一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...
- 大数据开发平台-数据同步服务
什么是数据同步服务?顾名思义,就是在不同的系统之间同步数据.根据具体业务目的和应用场景的不同,各种数据同步服务框架的功能侧重点往往不尽相同,因而大家也会用各种大同小异的名称来称呼这类服务,比如数据传输 ...
最新文章
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- java架构师_前谷歌高级Java架构师分享工作8年经验(如何成为一名架构师)
- PPT怎么在线转视频?
- 为什么Spark能成为最火的大数据计算引擎?它是怎样工作的?
- 军事方面的软件系统与瀑布模型
- mfc 如何判断excel软件是否打开_如何从无到有地搭建一套完整的测试系统(上)...
- 预训练语言模型关系图+必读论文列表,清华荣誉出品
- kafka消费者如何读同一生产者消息_kafka学习笔记
- java redis hscan_redis操作之迭代器(scan和hscan)讲解
- 如何mysql学籍管理系统_MySQL基础-学生管理系统数据库设计
- 金山文字应用技巧两则(转)
- 小飞鱼-致远OA 搭建借还款应用之选择借款 增加列显示
- android 6g 有必要吗,Android手机6GB内存有必要吗?实测出真知
- 形容词,名词记忆(三):ment, ent后缀常用词
- Matlab 模拟声波散射,一种目标声散射特征模拟装置的制作方法
- 六种找客户的方法销售人员需掌握
- 高德地图哪个语音包最好_贪玩蓝月语音包 高德地图语音包哪个好
- ADS-B及雷达显示终端8.0
- 文档文件等网页端预览功能
- zt_阿里张瑞jacky关于library cache的内部管理机制
热门文章
- cta 音频测试_CTA测试介绍.pdf
- 计算机考研用python_本科化工考研跨考计算机,学过高数和Python,难度有多大?...
- 数据预处理部分的思维导图
- 网易云MUSIC年终奖0.5?听到消息我扔了耳机
- 第十一周项目二----用二叉树求解代数表达式
- ADAMoracle去中心化预言机价值核心在哪
- Canal Admin Web-UI 学习
- Python数据分析——matplotlib
- 行列式在计算机的应用,行列式的计算机及应用.doc
- 2017年美团Java程序员开发,看我如何拿到offer