• 数据交换平台架构


    数据交换平台架构

    一、数据交换平台定义(百度百科)

    数据交换平台是指将分散建设的若干应用信息系统进行整合,通过计算机网络构建的信息交换平台,它使若干个应用子系统进行信息/数据的传输及共享,提高信息资源的利用率,成为进行信息化建设的基本目标,保证分布异构系统之间互联互通,建立中心数据库,完成数据的抽取、集中、加载、展现,构造统一的数据处理和交换。

    二、Why数据交换平台?

    1.分布式的需要

    PS:(分布式出现的两个驱动要素:1.业务场景越来越复杂,需要进行系统拆分;2.性能的需要)

    场景举例一:EDA

    通过数据交换平台,把数据库Log事件(如Mysql的binlog)发送到MQ,驱动后续流程(如:刷新缓存,构造搜索引擎,业务流程驱动<如:下单之后发短信>等)

    场景举例二:CQRS

    【命令、查询分离】的思想本质上就是同一份数据建立两套视图:一套是模型清晰的Domain-Mode,代表业务实体,满足复杂业务逻辑的需要;另一套是查询视图,主要面向查询场景,不关心数据库范式,只关心查询最优最快

    2.容灾备份的需要

    场景举例一:多机房

    多中心、多备份、异地多活等是很多大公司正在实践或者已经实践过的技术难题,这中间的核心便是一整套完整的数据同步方案

    场景举例二:数据镜像

    通过数据交换平台,可以创建各种类型的DB镜像,满足不同场景下的使用需要

    场景举例三:数据归档

    通过增量交换,可以实现实时归档

    3.异构、重构的需要

    场景举例一:DB升级换代

    通过数据交换平台解决升级过程中的版本兼容性问题

    场景举例二:资产复用

    任何一个公司都有大大小小的各种IT资产,通过数据交换平台,可以实现这些核心资产的整合、复用

    场景举例三:迁库、拆库

    系统进行重构,业务应用要拆分为两个子系统,对应的数据库由一个拆成两个,需要数据交换平台先进行全量Copy,再进行增量同步,然后配合系统完成迁移对接,如下所示

    三、(神州优车)数据交换平台总体架构

    总体架构图如下所示,整个平台由三个子系统组成

    ucar_datalink(增量同步子系统)

    ucar_datalink是优车技术团队自研的一套数据同步中间件,主要满足各异构数据源之间的实时增量同步需求,具有高伸缩性、高扩展性和高性能等优点

    ucar_dataX(全量同步子系统)

    ucar_datax是对Alibaba开源的datax进行了深度定制和改造,满足集团内的全量数据同步需求

    Admin(管理监控子系统)

    管理子系统对整个增量和全量集群进行运维管理,包括:HA、同步申请自动处理、延迟监控、异常监控、机器监控等等

    四、Datalink产品介绍

    Datalink借鉴了数个开源产品的设计

    • 借鉴了Kafka-Connect的基础设施:分组、HA、Rebalance协议、Task模型等
    • 借鉴了Otter的诸多功能模型:领域模型抽象、双向同步、数据压缩合并、数据权重算法等
    • 参与了Linkedin的Databus的一些设计思想

    1.Datalink的基础设施模型

    Manager

    整个Datalink集群的大脑,负载均衡协调器、配置管理、集群监控

    Group

    分组是一个核心逻辑概念,通过分组实现组内自治、组间隔离,便于进行拆分管理

    Worker

    Worker是Task的运行容器,一个Worker节点运行一系列同步任务,Worker归属于某个分组

    Task

    数据同步任务实例,由一个reader和至少一个writer组成,归属于某个分组,在一个分组内Task通过一定的负载均衡策略,被分配到不同的Worker上执行

    Rebalance

    Rebalance单位:分组;
    Rebalance时机:Manager主备切换、Worker加入分组、Worker离开分组、新增Task、删除Task

    2.Datalink的领域模型

    Contract

    针对每种类型的数据库,我们会抽象一套契约类型,有了这套契约便可实现Reader和Writer的任意组合
    比如我们针对关系型数据库抽象一个契约,契约的核心类名为RdbEventRecord,代表一条数据库log事件变更,围绕这个契约,我们可以开发若干插件
    如果是Reader插件,这个插件的一个核心功能就是做数据类型转换,如MysqlReader、SqlserverReader、OracleReader分别会把自己对应数据库的底层log-event转换为RdbEventRecord即可
    如果是Writer插件,需要的是针对每一种契约实现一个处理器,如HbaseWriter,其主要目的是往hbase写数据,但是在不同的Task中,它对接的Reader是随机的,所以需要的是对不同类型契约的数据做适配

    Business Model

    领域模型借鉴了Aalibaba-Otter的一些思想,针对数据同步领域的一些常见功能,我们进行了深度分析和抽象
    * MediaSource:
    是对数据源的抽象,所有类型的数据源都会保存到这个模型,神州内部已经支持的数据源有 MYSQL, SQLSERVER, ORACLE, HDFS,  HBASE, ELASTICSEARCH, ZOOKEEPER,POSTGRESQL
    * Media:
    是对数据存储单元的抽象,可以是关系型数据库的表、Hbase的表、ElastaicSearch的索引等等
    * MediaMapping:
    是对数据交换协议的抽象,所有类型的Media之间的数据同步关系都保存到这个模型
    * 支持的功能
    依托这套领域模型,可以实现的一些主要功能特性如下所示
        库别名
        表别名
        列别名
        列白名单
        列黑名单
        多表合一
        多表聚合
        主键跳过
        同步拦截器
        按权重同步

    3.Datalink的插件模型

    Task&Plugin

    * Task是Datalink中的一个核心概念,一个运行中的Task就是一个数据同步任务
    * Task由一个Reader和若干个Writer组成,即可以实现一对多的数据同步
    * Task的数据同步流程:由Reader端取数据,然后放到内存队列,Writer端消费数据,成功的话执行Ack操作,失败的话执行Rollback操作
    * Task提供了插件机制,一个Task只有在运行时才知道自己组装的Reader和Writer是什么
    * Task的Reader和Writer插件在运行时有自己独立的ClassLoader,以解决同一进程中jar包冲突的问题
    * 通过这套插件模型我们可以实现最大程度的基础设施复用:一套框架支持各种数据源之间的增量同步需求,框架稳定之后,后期关注重点只需要放到插件开发上即可,目前我们内部实现的插件有:
        MysqlReader
        FlexibleQReader(FlexibleQ:内部消息中间件)
        RdbmsWriter
        HbaseReader(建设中)
        ElasticSearchWriter
        HdfsWriter
        FlexibleQWriter
        HbaseWriter(建设中)

    (神州优车内部)Datalink同步场景举例

    1.Mysql同步到RDBMS

    简介

    * 该场景下的数据同步主要分为两种:一种是线上各个系统间的基础参数表同步,另外一种是线上数据同步到OLAP系统(主要是BI)
    * 支持多种同步模式
        全局有序同步:完全按照源端binlog的执行顺序进行重放
        局部有序同步:以表为单位进行聚合,保证单表内同步是有序的
        完全并发:当开启merger功能的时候,在merge合并完之后,能保证同一张表的同一条数据只有一条binlog事件,此时可以完全打乱顺序,保证最终一致即可

    2.Mysql同步到ElasticSearch

    简介

    * 订单库(Mysql)为应对线上的各种交易请求已经足够忙碌,查询操作必须放到二级系统中去做,所以实现了Mysql到ES的同步,所有查询走ES
    * 在同步过程中,可以实现多表聚合,即将Mysql中多张有外键关系的表,在同步过程中进行聚合,到ES端,多张表的数据合并成一条

    3.Mysql同步到Hadoop

    简介

    * 作为大数据平台的第一层,datalink负责把线上生产库的binlog变更同步到Hadoop
    * 数据处理平台每天凌晨对T-1的数据进行清洗、去重,把同步过去的binlog数据更新到spark-hive

    4.Mysql同步到MQ

    简介

    * 目前我们内部主要是通过监听binlog事件实现【缓存刷新】和【业务通知】功能

    5.分布式DB同步

    简介

    * 类似于电商平台【买家和卖家】的划分,神州专车平台对应的划分为【乘客和司机】,为应对性能压力,我们对DB进行了分库处理,这样就产生了两个维度,主维度是乘客,子维度是司机
      我们需要把主维度产生的数据进行Re-Sharding操作同步到司机维度的分库,以满足司机数据查询的需求

    主要列举这些,后续梳理完之后再进行补充

     
     
    标签: DataSync
  • 相关阅读:
    UVW源码漫谈(四)
    UVW源码漫谈(三)
    UVW源码漫谈(番外篇)—— Emitter
    UVW源码漫谈(一)
    UVW源码漫谈(二)
    如何利用GDI图像来制作验证码(在winform上面制作的当然也可以在web上面制作)
    利用C语言版本的数据库制作一个学生成绩管理系统
    行内元素与块级元素的区别
    filter的两种使用方法
    JavaScript随机数类型
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/8206066.html
Copyright © 2020-2023  润新知