`
鳄鱼旭
  • 浏览: 76053 次
文章分类
社区版块
存档分类
最新评论

Otter源代码解析(一)

 
阅读更多

全部文档索引:

Otter源代码解析(一): http://eyuxu.iteye.com/blog/1941894

Otter源代码解析(二) : http://eyuxu.iteye.com/blog/1942518

Otter源代码解析(三): http://eyuxu.iteye.com/blog/1942519

Otter源代码解析(四): http://eyuxu.iteye.com/blog/1942521

Otter源代码解析(五): http://eyuxu.iteye.com/blog/1942522

Otter源代码解析(六): http://eyuxu.iteye.com/blog/1942549

Otter源代码解析(七): http://eyuxu.iteye.com/blog/1942578

Otter源代码解析(八): http://eyuxu.iteye.com/blog/1942780

Otter源代码解析(九): http://eyuxu.iteye.com/blog/1942786

 

写在前面:

最近在做跨机房数据传输的技术选型,看了几个第三方的框架,SymmetricDS(http://www.symmetricds.org/) 、tungsten-replicator(

https://code.google.com/p/tungsten -replicator/)、阿里的Otter(https://github.com/alibaba/otter/  )。比较下来Otter在功能上的优势还是比较大,所以决定将Otter作为最终的选型结果。不过跨机房的数据传输是个很复杂的过程,Otter的实现也是比较复杂的,因此在投入使用前,需要对Otter的实现细节有一个较为清楚的了解,只靠官方文档上的介绍是远远不够的。而了解实现细节的最好的方式就是阅读源代码。

 

1. 简介

       Otter是阿里开源的一个多机房数据复制的产品,内嵌Canal(基于BinLog模式获取数据库变更数据的开源产品),两款产品官方提供了一些文档说明,但是1)官方说明中有一些比较难于理解的地方;2)从使用角度来说,仅仅了解官方说明的内容是不够的,理解最好的方式还是针对源代码进行分析,还原详细设计。本文对Otter的一些比较关键、比较复杂的地方做了设计还原,给阅读代码的人提供一些帮助,或者希望进一步了解Otter的开发人员提供补充材料。

 

分析的版本:4.2.1

 

2. 参考资料

      Otter的官方地址:https://github.com/alibaba/otter/  (简介、架构介绍、QuickStart等,读者需要首先了解这篇文档,然后才能阅读本文)

      Canal的官方地址:http://github.com/alibaba/canal (简介、架构介绍、QuickStart等,读者需要先看下Canal的文档,才能阅读本文)

 

3. 工程结构解析

   Canal的架构这里就不做说明了,相关文档说明、设计思路还是比较清楚的,我只花了一天左右的时间看了看源码,结构很清楚,也比较容易理解。但是Otter就理解起来就比较困难了,并不是设计的不够简洁,而是其本身的逻辑就比较复杂,尤其涉及到S.E.T.L调度的细节上面。

 

先看下工程结构:



 包含三部分:Share | Node | Manager。 其中Share是Node和Manager共享的子系统,并不是独立部署的节点。Node和Manager是独立部署的。

 

Node:一个独立部署的节点,比如两个机房需要做通讯,则每个机房至少要部署一个Node节点(不考虑HA的话),数据同步的过程实际上都发生在Node之间

 

Manager:管理的节点,逻辑上只有一个(一个Manager管理多个Node节点),如果不考虑HA的话。负责管理同步的数据定义,包括数据源、Channel、PipeLine、数据映射等,各个Node节点从Manager处获取并执行这些信息。另外还有监控等信息。

 

Share各个子系统的说明:

    . Common: 公共内容定义

    .Arbitrate: 用于Manager与Node之间、Node与Node之间的调度、S.E.T.L几个过程的调度等;

    .Communication 数据传输的底层,上层的Pipe、一些调度等都是依赖于Communication的

             简单点说它负责点对点的Event发送和接收

     .etl:实际上并不负责ETL的具体实现,只是一些接口&数据结构的定义而已,具体的实现在Node里面。

 

Node各个子系统的说明:

      . Common:公共内容定义

      . Canal: Canal的封装,Otter采用的是Embed的方式引入Canal(Canal有Embed和独立运行两种模式)

      . Deployer:内置Jetty的启动

      . etl: S.E.T.L 调度、处理的实现,是Otter最复杂、也是最核心的部分,花了我好几天的时间理解。

 

4. 阅读代码过程中的一些可能的障碍

     . 池化:代码里面很多提到“池化”这个概念,不知道是阿里内部的叫法还是通用的叫法,反正我之前没有听过,实际上就是使用对象池的方式管理对象。 原因是里面很对对象都是包含线程池的,对于线程池的销毁和加载是比较低效的,所以代码里面对带有线程池的地方基本都做了池化处理(但是线程池的大小每次操作的时候都需要根据实际情况调整);

     . retl_mark: 我的理解是具体的业务在执行事务的时候在事务头&尾插入一个标记,在同步BinLog的时候就会发现它,对于不需要同步的数据打上特殊标记(比如_SYNC),  这样在S.E.T.L的过程中就可以过滤掉这些数据(可以参见:com.alibaba.otter.node.etl.select.selector.MessageParser这个类的实现)

      . 数据库反查:正常同步的内容是基于BinLog的,即BinLog有什么数据就同步什么数据,但是如果同步的数据延迟时间比较长的话,可能在同步的数据已经发生了变化(即BinLog里面的数据已经是旧的数据了),为了避免这个问题,在Extract阶段根据条件进行数据库查询,可以参见:com.alibaba.otter.node.etl.extract.extractor.DatabaseExtractor

 

下面会针对一些比较关键的内容(全文解析太多了)做下解析说明。

 

未完待续。

 

  • 大小: 29.4 KB
分享到:
评论
1 楼 RAYFUXK 2016-04-01  
楼主你好,我想请教下,源节点canal的Entry数据是通过Dubbo传到目标节点的么?

相关推荐

    基于QT开发的浏览器源代码(otter-browser).zip

    【基于QT开发的浏览器源代码(otter-browser)】是一个开放源码的项目,它使用了流行的跨平台应用程序开发框架Qt来构建一个功能完备的网络浏览器。Qt是一个强大的C++库,提供了丰富的图形用户界面(GUI)工具和系统...

    QT开源网页浏览器otter-browser的源代码

    Otter Browser 水獭浏览器 水獭浏览器 - 模仿opera12界面, 基于qt5的webkit浏览器. 等于个人制作山寨版Safari, 支持二代半引擎, 苹果WebEngine/谷歌...代码可用,本人亲测,qt5.5+vs2013编译一次通过,且运行正常。

    otter源码包

    在`otter-master`这个压缩包中,你将找到Otter的源代码,包括了项目的结构、模块划分、核心类的实现等。通过阅读源码,你可以了解到以下内容: 1. **代码结构**:了解Otter的模块划分,如manager、node、common、...

    数据同步利器--otter搭建使用说明

    Otter 是阿里巴巴开源的一款强大的数据同步工具,特别适合在分布式环境中进行实时的数据迁移和同步。它解决了传统数据库主从复制的局限性,提供了更高效、灵活的解决方案。本篇文章将详细介绍Otter的主要功能、架构...

    otter部署文档说明

    - **Otter**是一种用于实现跨数据中心或跨地域数据库同步的解决方案,主要基于阿里巴巴开源项目Canal来捕获MySQL实例的Binlog日志,并对这些日志进行解析处理后发送至目标数据库。 - **工作原理**: - **基于Canal...

    深入浅出Otter与Canal.pdf

    Otter是一款分布式数据库同步系统,它的作用是从一个数据库中实时或准实时同步数据到另一个数据库中,支持MySQL和Oracle数据库的同步。Otter通过解析数据库的增量日志来实现数据的迁移与同步。 2. Canal开源产品:...

    otter 资料PDF(深入理解otter (偏向技术层面)、otter使用介绍 (偏向使用层面) )

    otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。 深入理解otter (偏向技术层面).pdf otter使用介绍 (偏向使用层面) .pdf

    otter部署使用手册.zip

    Otter,作为一款强大的分布式数据库同步管理系统,主要用于实现数据库增量日志解析,从而实现实时或准实时的数据同步,无论是本机房内的数据库还是跨地域的异地机房,Otter都能高效地完成任务。在本文中,我们将深入...

    深入理解otter.pptx

    ### 深入理解Otter:一种高效的数据库同步解决方案 #### 一、中美同步需求 在面对中美两地数据中心之间的同步需求时,Otter被设计成能够有效应对跨国网络延迟及带宽限制等挑战的一种工具。它不仅实现了数据的双向...

    七锋otter_otter_

    2. **架构原理**:Otter采用主从复制的架构,通过binlog解析,将源数据库的变更事件转化为可以跨网络传输的格式,然后将这些事件发送到目标数据库,进行应用。Otter还包含一个中央协调服务器,负责管理任务配置和...

    otter-使用、维护说明.doc

    Otter 是一个强大的 MySQL 日志级同步工具,它主要用于实现数据库之间的实时数据迁移或复制。以下是对 Otter 使用和维护的详细说明: 1. **Manager 登录与配置**: Otter 的管理平台通过 Manager 组件进行配置和...

    otter集群配置.docx

    ### Otter集群配置详解 #### 一、概述 Otter是一款高效的数据库同步工具,它能够实现MySQL数据库之间的数据同步,并支持多种同步模式。本文档旨在详细介绍如何基于Otter搭建一个完整的集群配置,包括其原理、所需...

    otter安装部署

    ### Otter 安装部署详解 #### 一、Otter简介 Otter是阿里巴巴开源的一款MySQL数据同步工具,主要用于实现MySQL数据库之间的复制同步。通过它,可以轻松搭建MySQL集群,适用于多种场景的数据同步需求。 #### 二、...

    alibaba-otter

    阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。...

    otter4使用介绍

    Otter4是一款由阿里巴巴开源的高性能数据同步工具,主要用于解决不同数据库间的数据同步问题,支持MySQL和Oracle数据库的互相同步,包括单向同步、双向同步以及无冲突变更等多种同步模式。其主要用途包括异地机房的...

    Otter 双A同步搭建入门

    Otter 是一个强大的分布式数据同步工具,主要用于在多个数据库之间进行实时的数据同步。它由阿里巴巴开源,被广泛应用于大数据架构中,确保数据的一致性和完整性。本教程将带你入门Otter的双A(即主主模式)同步搭建...

    PyPI 官网下载 | otter-grader-2.1.8.tar.gz

    otter-grader是一个Python库,它专注于代码自动评分和测试,特别是对于教育领域,帮助教师高效地评估学生的编程作业。这个库的版本号为2.1.8,意味着它是该库的一个更新版本,可能包含了修复的错误、新特性或性能...

    otter4使用介绍.pdf

    - 反方向的Pipeline会获取变更数据,并通过解析事务的开始和结束标记来判断是否是Otter系统内部产生的变更,从而避免回环同步的问题。 以上就是Otter4的主要内容介绍,Otter4以其强大的功能和出色的性能成为了解决...

    深入理解otter(数据同步)

    otter也提供了一种叫做“Pipeline”的机制,这个机制允许从源端到目标端的整个数据流通过一些同步映射过程来完成。一个Pipeline可以看作是一条数据流的通道,而多个Pipeline可以组合成一个同步通道,从而在双向同步...

Global site tag (gtag.js) - Google Analytics