中间件---Binlog传输同步---Otter和Canal

Otter

1. Otter是什么


Ottter是由阿里爸爸开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。

Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里云提供的RDS数据库(使用RDS童鞋的福音)

工作原理


下图是关于Otter运行原理图:

更具上图里面关键几个元素进行介绍

db : 数据源以及需要同步到的库
Canal : 用户获取数据库增量日志
manager : 配置同步规则设置数据源同步源等
zookeeper : 协调node进行协调工作
node : 负责任务处理处理接受到的部分同步工


特性

使用纯JAVA开发,占时资源比较高
基于Canal获取数据库增量日志,Canal是阿里爸爸另外一个开源产品
使用manager(web管理)+node(工作节点),manager负责配置监控,node负责处理任务
基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作
使用aria2多线程传输技术,对网络依赖带宽依赖较低


Otter解决问题


技术最终是解决业务问题的,不然还是耍流氓!我们来一同看看 Otter 到底能解决我们在开发中遇到的那些场景中的问题

异构库同步
Otter支持从Mysql同步到Mysql/oracle,我们可以把mysql同步到oracle

单机房同步
可以作为一主多从同步方案,对于单机房内网来说效率非常高,还可以做为数据库版本升级,数据表迁移,二级索引等这类功能

异地机房同步
异地机房同步可以说是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景可以做到数据多机房容灾

双向同步
双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性

文件同步
站点镜像,进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片

canal和otter的关系

先来看一张canal&otter和mysql复制的类比图: 

mysql的自带复制技术可分成三步:

è¿éåå¾çæè¿°

master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);

slave将master的binary log events拷贝到它的中继日志(relay log),这里是I/O thread线程;

slave重做中继日志中的事件,将改变反映它自己的数据,这里是SQL thread线程。

基于canal&otter的复制技术和mysql复制类似,具有类比性:

Canal对应于I/O thread,接收Master Binary Log;

Otter对应于SQL thread,通过Canal获取Binary Log数据,执行同步插入数据库;

两者区别

otter目前嵌入式依赖canal,部署为同一个jvm,目前设计为不产生Relay Log,数据不落地;

otter目前允许自定义同步逻辑,解决各类需求; 
a. ETL转化. 比如Slave上目标表的表名,字段名,字段类型不同,字段个数不同等. 
b. 异构数据库. 比如Slave可以是oracle或者其他类型的存储,nosql等. 
c. M-M部署,解决数据一致性问题 
d. 基于manager部署,方便监控同步状态和管理同步任务.

参考:

喵了个咪的博客:博客

Otter项目地址:https://github.com/alibaba/otter

Otter文档地址:https://github.com/alibaba/otter/wiki

canal和otter的关系

你可能感兴趣的:(JAVA,中间件,架构之海)