文章目录

  • 一、方案背景
    • 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考虑因素

  1. 性能和稳定性: 订单系统为每个公司的核心业务系统,数据的同步尽量对订单系统无感,换言之,同步双写的方案会影响订单系统的性能和稳定性;
  2. 幂等性: 同步RPC和异步消息,都可能产生重复数据,数据落入HBase和ES时需要考虑数据去重,保证幂等性;
  3. 顺序性: 由于网络的不确定性,有可能数据库中先更新的数据后到达HBase或ES,导致最新的数据被旧数据覆盖;
  4. 关联性: 通常订单数据会包含很多信息,库表设计时通常会进行垂直拆分,通过订单号进行关联,当进行数据同步时,如何处理这些关联表的数据需要考虑;

1.2 数据特点

  1. 存量数据: 已完成或结束的订单归纳为”存量数据“,其特点是:数据量大、只读(没有变更,无需考虑顺序性);
  2. 增量数据: 未结束的订单归纳为”增量数据“,其特点是:并发量大、数据变更比较频繁(需要考虑顺序性);

二、增量同步方案

整体思路: 将数据库的Binlog解析成消息,异步同步到HBase或ES,保障对订单系统的无感。利用订单号的唯一性,在HBase或ES进行物理去重;每条数据携带版本,通过版本号保障新数据不会被旧数据覆盖;对于订单相关联的表数据,在HBase和ES中会将数据打平,以宽表的形式存储,因为HBase和ES并不擅长“关系”的处理,性能开销很大。

2.1 并发消费

  整体流程:Canal将Binlog日志转换成MQ消息,同步程序并发消费消息(最大化消费能力),然后先将数据写入HBase,然后将HBase中订单对应的宽表数据写入ES。这里有几点需要说明:

  1. HBase有版本控制机制,而且是字段级别的,只有更大版本号的数据才能更新字段,利用这个特点可以防止新数据被覆盖,同时也能够用一个宽表来聚合/扁平化订单关联表;
  2. 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多表关联设计指南
  • 有赞订单同步的探索与实践

订单系统设计 —— 数据同步与监控相关推荐

  1. 使用文件监控对象FileSystemWatcher实现数据同步

    使用文件监控对象FileSystemWatcher实现数据同步 原文 使用文件监控对象FileSystemWatcher实现数据同步 最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文 ...

  2. 用Semisynchronous Replication半同步,mk-table-checksum数据同步一致性检查,监控主从同步运行状态的脚本等方式加强SQL性能和数据审核...

    一,为A组在X单独另建一个MYSQL服务器(MYSQL B),A组平时更新的数据库为MYSQL B.待MYSQL B的数据审核准确无误后.发布给现在布置在X上的MYSQL服务器(MYSQL A).并进 ...

  3. Canal监控MySQL数据库实现数据同步

    canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL. canal简介 需求:将MySQL中某些表的数据实时的同步到 ...

  4. elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...

  5. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...

  6. 基于OGG Datahub插件将Oracle数据同步上云

    摘要:随着数据规模的不断扩大,传统的RDBMS难以满足OLAP的需求,本文将介绍如何将Oracle的数据实时同步到阿里云的大数据处理平台当中,并利用大数据工具对数据进行分析. 一.背景介绍 随着数据规 ...

  7. 去哪儿网数据同步平台技术演进与实践

    作者介绍 井显生,2019年加入去哪儿,现负责国内机票出票.退款.改签核心业务.在领域驱动设计(DDD).高并发有大量实践经验. 一.前言 去哪儿网国内机票售后是为用户提供退票.改签.航班变动.行程服 ...

  8. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原

    一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...

  9. 大数据开发平台-数据同步服务

    什么是数据同步服务?顾名思义,就是在不同的系统之间同步数据.根据具体业务目的和应用场景的不同,各种数据同步服务框架的功能侧重点往往不尽相同,因而大家也会用各种大同小异的名称来称呼这类服务,比如数据传输 ...

最新文章

  1. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
  2. java架构师_前谷歌高级Java架构师分享工作8年经验(如何成为一名架构师)
  3. PPT怎么在线转视频?
  4. 为什么Spark能成为最火的大数据计算引擎?它是怎样工作的?
  5. 军事方面的软件系统与瀑布模型
  6. mfc 如何判断excel软件是否打开_如何从无到有地搭建一套完整的测试系统(上)...
  7. 预训练语言模型关系图+必读论文列表,清华荣誉出品
  8. kafka消费者如何读同一生产者消息_kafka学习笔记
  9. java redis hscan_redis操作之迭代器(scan和hscan)讲解
  10. 如何mysql学籍管理系统_MySQL基础-学生管理系统数据库设计
  11. 金山文字应用技巧两则(转)
  12. 小飞鱼-致远OA 搭建借还款应用之选择借款 增加列显示
  13. android 6g 有必要吗,Android手机6GB内存有必要吗?实测出真知
  14. 形容词,名词记忆(三):ment, ent后缀常用词
  15. Matlab 模拟声波散射,一种目标声散射特征模拟装置的制作方法
  16. 六种找客户的方法销售人员需掌握
  17. 高德地图哪个语音包最好_贪玩蓝月语音包 高德地图语音包哪个好
  18. ADS-B及雷达显示终端8.0
  19. 文档文件等网页端预览功能
  20. zt_阿里张瑞jacky关于library cache的内部管理机制

热门文章

  1. cta 音频测试_CTA测试介绍.pdf
  2. 计算机考研用python_本科化工考研跨考计算机,学过高数和Python,难度有多大?...
  3. 数据预处理部分的思维导图
  4. 网易云MUSIC年终奖0.5?听到消息我扔了耳机
  5. 第十一周项目二----用二叉树求解代数表达式
  6. ADAMoracle去中心化预言机价值核心在哪
  7. Canal Admin Web-UI 学习
  8. Python数据分析——matplotlib
  9. 行列式在计算机的应用,行列式的计算机及应用.doc
  10. 2017年美团Java程序员开发,看我如何拿到offer