随着系统业务量的不断扩大,都会使用分布式的方式,同时会有非常多的中间件,如redis、消息队列、大数据存储等,但是实际核心的数据存储依然是存储在数据库,多个数据库之前就会存在数据实时同步的问题,为了解决这个问题,需要采用一些数据实时同步中间件来解决问题。
Canal简介
Canal
是阿里开源的一款基于 Mysql
数据库 binlog
的增量订阅和消费组件,通过它可以订阅数据库的 binlog
日志,然后进行一些数据消费,如数据镜像、数据异构、数据索引、缓存更新等。相对于消息队列,通过这种机制可以实现数据的有序化和一致性。
设计背景
早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。
目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析。
基于日志增量订阅&消费支持的业务:
- 数据库镜像
- 数据库实时备份
- 多级索引 (卖家和买家各自分库索引)
- search build
- 业务cache刷新
- 价格变化等重要业务消息
工作原理
mysql主备复制实现
从上层来看,复制分成三步:
master
将改变记录到二进制日志(binary log
)中(这些记录叫做二进制日志事件,binary log events
,可以通过show binlog events
进行查看);slave
将master
的binary log events
拷贝到它的中继日志(relay log
);slave
重做中继日志中的事件,将改变反映它自己的数据。
canal的工作原理
</