1. 什么是Otter

❑ 项目背景

❑ 语言

  • 纯java开发

❑ 定位

  • 基于数据库增量日志解析,准实时同步到本机房或异地机房的MySQL/Oracle数据库

❑ 模块组成

  • Zookeeper:分布式一致性协调服务

  • Canal:获取数据库增量日志数据

  • manager:管理中心,用来配置同步信息,接收node模块发来的状态反馈

  • node:node 模块内嵌 Canal,Canal 监听数据库binlog中的变化传送给node的SETL模块


otter架构示意图


❑ 架构描述

  • 基于Canal开源产品,获取数据库增量日志数据
  • manager(web管理)+ node(工作节点):典型管理系统架构
    • manager运行时推送同步配置到node节点
    • node节点将同步状态反馈到manager上
  • 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作

2. Otter 提供的解决方案

[!NOTE] ❑ 异构库同步

  • MySQL -> MySQL/Oracle

    (※ 目前开源版本只支持MySQL增量,目标库可以是MySQL/Oracle ,取决于Canal的功能)

❑ 单机房同步

(※ 数据库之间RTT < 1ms)

  • 数据库版本升级
  • 数据表迁移
  • 异步二级索引

❑ 异地机房同步

( ※ 比如阿里巴巴国际站就是杭州和美国机房的数据库同步,RTT > 200ms,亮点

  • 机房容灾

❑ 双向同步

  • 避免回环算法(通用的解决方案,支持大部分关系型数据库)
  • 数据一致性算法 (保证双A机房模式下,数据保证最终一致性,亮点

❑ 文件同步

  • 站点镜像 (进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片)

2.1.1. 单机房同步复制

img

说明:

a. 数据on-Fly,尽可能不落地,更快的进行数据同步. (开启node loadBalancer算法,如果Node节点S+ETL落在不同的Node上,数据会有个网络传输过程)

b. node节点可以有failover / loadBalancer.

2.1.2. 异地机房同步复制

img

说明:

a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node)

b. node节点可以有failover / loadBalancer. (每个机房的Node节点,都可以是集群,一台或者多台机器)

3. 相关知识点解释

3.1. Otter 核心model关系图

img

3.2. 名词解释

  • Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成
  • Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成
  • DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等
  • DataMedia : 抽象的数据介质概念,可以理解为数据表/mq队列定义
  • DataMediaSource : 抽象的数据介质源信息,补充描述DateMedia
  • ColumnPair : 定义字段映射关系
  • ColumnGroup : 定义字段映射组
  • Node : 处理同步过程的工作节点,对应一个jvm

----

3.3. Otter 的S/E/T/L stage阶段模型

img

说明:为了更好的支持系统的扩展性和灵活性,将整个同步流程抽象为Select/Extract/Transform/Load,这么4个阶段.

Select阶段: 为解决数据来源的差异性,比如接入canal获取增量数据,也可以接入其他系统获取其他数据等。

Extract/Transform/Load 阶段:类似于数据仓库的ETL模型,具体可为数据join,数据转化,数据Load

4. Otter FAQ

Otter与Canal的依赖关系

  • Otter 目前嵌入式依赖 Canal,主要靠Canal解决数据库增量日志解析,两者部署为同一个jvm,目前设计为不产生 Relay Log ,数据不落地
  • 由于 Otter 受到内嵌的 Canal 的版本限制,对数据库的支持如下:
    • Otter <= v4.2.16 支持 MySQL的5.1 ~ 5.7版本
    • Otter >= v4.2.17(内嵌Canal >= v1.1.2)增加了对 MySQL 8.0 的解析支持
    • 仅支持MySQL作为主库(Master),MySQL/Oracle作为从库(Slave)
  • Canal 支持 mixed、row、statement 多种日志协议的解析,但配合Otter进行数据库同步,目前仅支持row协议的同步

5. 参考

results matching ""

    No results matching ""