otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统
名称:otter
译意: 水獭,数据搬运工
语言: 纯java开发
定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统
原理描述:
1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击
2. 典型管理系统架构,manager(web管理)+node(工作节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
什么是canal?
otter之前开源的一个子项目
事前控制:比如paoxs协议,在多地数据写入各自数据存储之前,就已经决定好最后保留哪条记录
事后处理:指A/B两地修改的数据,已经保存到数据库之后,通过数据同步后保证两数据的一致性
事前控制
paxos协议,相信大家研究的人也比较多,但是它有一些局限性,就拿zookeeper来说,它使用了paxos的一个变种,但基本原理还是相似的。
我们拿zookeeper的几种部署模式来看:
1. 先看: A地部署leader/follower集群,B地部署observer.
此时A地收到数据后,需要的网络操作基本为同机房的leader/follower的paxos协议,耗时基本可控
此时B地收到数据后,需要的网络操作为:
B地接收到请求,转发给A地,一次机房网络
A地接收到请求,由leader转发给follower进行投票决策,同机房网络
A地leader将投票的结构,反馈给B地,一次机房网络.
这样一来,也就是说,事务时间 = 一次异地机房RTT + 同机房paxos算法耗时. 比如中美网络延迟200ms,那事务时间基本就是200ms+ 。 但此时,B地机房基本是一个只读镜像,读数据也有延迟,其系统写扩展性全在A机房,某一天当A机房不够用时,A机房进行拆分,就会遇到下一个问题。
2. 再看:A地和B地组成leader/follower
此时A第收到数据后,需要的网络操作为:(假如A不是leader,B是leader)
首先需要发送数据到B,一次机房网络
B收到A的提议数据后,发起一个投票到A,一次机房网络
A收到提议后,返回一个投票结果到B,一次机房网络
B收到大部分投票结果,做出决定之后,将结果反馈给A,一次网络交互.
这种理想无冲突的情况,总共会有2次RTT,如果优化A发起的提议自己默认投票,不返回给A进行投票,可以优化为1次RTT. 针对中美网络延迟200ms,那事务时间基本是200ms+. 如果A地和B地同时写入,那事务时间可能会翻倍。
总结:如果你能接受事务时间的影响(比如你A地和B地的网络延迟只有10ms),那是可以考虑选择paxos协议. 但目前otter所要解决的需求为中美200ms的RTT,暂时无法接收paxos协议来解决一致性问题.
事后处理
针对事后处理,不管哪种方案,一定会是一个最终一致性,因为在你做处理前,A地和B地的数据内容已经不一致了,你不论选择任何一个版本,对另一边来说都是一个数据版本丢失,最终一致性。
针对数据最终一致性处理,goldengate文档中提到了几种case :
trusted source. 信任站点,数据出现冲突时,永远以某一边为准覆盖另一边
timestamp,基于数据的修改时间戳,修改时间新的覆盖旧的数据
数据类型merge, 比如针对库存信息,A地库存减一,B地库存减二,两边同步之后A地和B地的数据应该是减三,合并两者减一和减二的操作
针对trusted source/timestamp模型,一定需要建立一个冲突数据kv表,(比如trusted source场景,如果B地修改了记录,而A地没修改此记录,那B地可以覆盖A地,即使A地是trusted source) ,对应冲突数据KV表的插入和删除,如果插入和删除不及时,就会有各种各样的误判,导致数据不一致。
举个插入不及时的case: 比如A地和B地进行双向同步,同时修改了同一记录,但A地的binlog解析器因为异常挂起了,导致构建冲突数据KV表数据延迟了,而此时B地的数据就会认为无冲突,直接覆盖了A,即使A地是trusted source,然后A地数据解析恢复后,同步到B地时,因为A是trusted source,就会覆盖B地的数据,最后就是A和B两地各位两边之前的版本,导致数据不一致。
因为goldengate外部文档针对双A机房同步,数据一致性处理描述的比较少,我只能推测到这,基本结论是风险太大,所以otter需要有一种完全可靠的数据一致性方案。
相关推荐
Otter 是阿里巴巴开源的分布式数据同步系统,能够将数据从一个 MySQL 数据库同步到另一个 MySQL 数据库。本文档将指导您如何使用 Otter 同步 MySQL 数据。 为什么选择 Otter 随着大数据时代的到来,数据同步变得...
otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。 深入理解otter (偏向技术层面).pdf otter使用介绍 (偏向使用层面) .pdf
MySQL数据库双活同步复制方案是为了实现数据库的高可用性和数据一致性,主要分为几种常见的方法,包括MySQL原生复制主主同步、Galera replication、Group Replication以及第三方工具如canal。 1. MySQL原生复制主主...
项目介绍名称:otter ['ɒtə(r)]译意: 水獭,数据搬运工语言: 纯java开发定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统工作原理原理描述:1. ...
Otter 是一个强大的 MySQL 日志级同步工具,它主要用于实现数据库之间的实时数据迁移或复制。以下是对 Otter 使用和维护的详细说明: 1. **Manager 登录与配置**: Otter 的管理平台通过 Manager 组件进行配置和...
本篇文章将详细介绍Otter的主要功能、架构原理以及如何进行安装与配置。 Otter 支持多种数据同步场景,包括: 1. 单向同步:支持MySQL与Oracle之间的数据同步。 2. 双向同步:在无冲突的情况下进行双向数据变更...
它与otter配合,可以实现MySQL数据库间的双向同步。Canal模拟MySQL slave的行为,与master进行交互,接收并解析二进制日志事件,然后将这些事件应用到目标数据库。MySQL的主从复制过程包括master记录改变到二进制...
分布式数据库同步系统 Otter Otter 是阿里巴巴开源的分布式数据库同步系统,旨在解决中美异地机房的数据库同步问题。该系统可以实现跨机房的数据库同步,确保数据的一致性和高可用性。 系统架构 Otter 的系统架构...
Otter系统基于Canal开源产品,Canal主要用于获取MySQL数据库的增量日志数据。Canal的设计初衷是为了满足阿里巴巴在杭州和美国双机房部署时的跨机房同步需求。 3. 管理系统架构: Otter的典型管理系统架构包括...
本文档详细介绍了其使用方法,并以otter4为例,解释了如何进行mysql与Oracle数据库之间的跨机房数据同步。下面将详细梳理文档中提及的技术知识点: 1. 同步需求 - 杭州与美国异地机房的双向同步 - 业务性:同步表...
Otter能够支持MySQL和Oracle等多种数据库之间的数据同步,并提供了单向和双向同步的能力,以及无冲突变更和双A同步冲突检测与补救等高级功能。 1. 同步需求:Otter在设计时考虑了同步需求,包括业务性、隔离性、...
【阿里巴巴开源项目:分布式数据库同步系统 Otter】是专为解决跨国、异地机房数据库同步问题而设计的高效工具。该项目起源于阿里巴巴 B2B 公司的需求,由于其业务特性,需要在国内杭州和美国之间建立双活机房,以...
Otter是一款高效的数据库同步工具,它能够实现MySQL数据库之间的数据同步,并支持多种同步模式。本文档旨在详细介绍如何基于Otter搭建一个完整的集群配置,包括其原理、所需工具、部署过程以及具体步骤。 #### 二、...
Otter采用了分布式架构,可以处理复杂的数据库同步任务,支持多种数据库类型,如MySQL、Oracle、SQL Server等。此外,Otter还具备良好的扩展性,能够随着业务的增长而进行水平扩展。 二、工作原理 Otter主要由四个...
1. **Otter介绍**:Otter是由阿里巴巴开源的一个项目,最初设计用于解决跨IDC(Internet Data Center)数据库的实时同步问题。它支持MySQL到MySQL、MySQL到PostgreSQL等多种数据库之间的双向同步,能够应对复杂的...
3. 数据库环境:准备至少两个MySQL数据库,用于实现主主同步。 三、Otter组件详解 1. Manager:管理节点,负责整体配置、任务调度和状态监控。 2. Node:工作节点,负责实际的数据同步任务,每个数据库实例对应一个...
### 深入理解Otter:一种高效的数据库同步解决方案 #### 一、中美同步需求 在面对中美两地数据中心之间的同步需求时,Otter被设计成能够有效应对跨国网络延迟及带宽限制等挑战的一种工具。它不仅实现了数据的双向...