论坛首页 Java企业应用论坛

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

浏览 54897 次
精华帖 (5) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-02-13  
vlinux 写道
agapple 写道
1. metaq的事我也不太清楚,其实走开源这条路需要考虑内外两个系统环境的差异性,所以从一开始在架构设计上就需要考虑差。我有考虑和metaq的整合,但只会考虑使用文件存储这块,因为canal自己已经包含网络协议和集群HA机制
2. 精卫自身并不复杂,主要是一个基于web管理的HA调度机制,其核心的主要还是依赖dbsync/metaq(内部版本),自身并不是一个完整的产品架构


what ever,我永远敬重敢于自己创造轮子的同学~~~正在clone代码~~~看到用了dbsync

binlog事件目前我看到最大的缺陷就在于缺少业务基础。




可以看到中间红色的部分其实是大家没想好的,用什么来衔接DB事件和业务事件呢?也许是一个二方包?也许是另外一个业务系统?

目前还在思考中...

早期canal依赖binlog解析是来自于b2b的erosa(canal产品的孵化也是在b2b),后来合并到淘宝后,替换为dbsync的binlog解析(精卫也是基于此)
db事件和业务事件的转化,目前是得由第三方的业务系统,现在canal分为server和client,提供socket服务的方式方便业务接入(典型的b2b风格),而精卫主要是二方库的方式,整个binlog解析都运行在业务系统
0 请登录后投票
   发表时间:2013-02-13   最后修改:2013-02-13
vlinux 写道


what ever,我永远敬重敢于自己创造轮子的同学~~~正在clone代码~~~看到用了dbsync

binlog事件目前我看到最大的缺陷就在于缺少业务基础。在事件驱动的业务中,业务事件往往包含的信息比binlog丰富多,而如果仅仅依靠binlog想驱动整个业务似乎在目前的业务场景下是不可能的,这也限制了这一类工具在线上的运用场景。




可以看到中间红色的部分其实是大家没想好的,用什么来衔接DB事件和业务事件呢?也许是一个二方包?也许是另外一个业务系统?

目前还在思考中...

vlinux指出了一个此类产品的共有问题,很多时候是个平衡,但有个基本原则是尽量在让业务系统(业务开发团队)无感觉(透明)的情况下,通过此类产品向外提供更多灵活、方便的功能。所以,如果当不得不让业务系统提供更多数据时(透明性就损失了),在这种情况下,canal的价值就并不比metaq等显示调用更有优势了。个人观点,欢迎讨论。
0 请登录后投票
   发表时间:2013-02-13  
netcomm 写道
vlinux 写道


what ever,我永远敬重敢于自己创造轮子的同学~~~正在clone代码~~~看到用了dbsync

binlog事件目前我看到最大的缺陷就在于缺少业务基础。在事件驱动的业务中,业务事件往往包含的信息比binlog丰富多,而如果仅仅依靠binlog想驱动整个业务似乎在目前的业务场景下是不可能的,这也限制了这一类工具在线上的运用场景。




可以看到中间红色的部分其实是大家没想好的,用什么来衔接DB事件和业务事件呢?也许是一个二方包?也许是另外一个业务系统?

目前还在思考中...

vlinux指出了一个此类产品的共有问题,很多时候是个平衡,但有个基本原则是尽量在让业务系统(业务开发团队)无感觉(透明)的情况下,通过此类产品向外提供更多灵活、方便的功能。所以,如果当不得不让业务系统提供更多数据时(透明性就损失了),在这种情况下,canal的价值就并不比metaq等显示调用更有优势了。个人观点,欢迎讨论。

metaq的数据存储主要也是byte流,可以添加header信息,canal的数据主要是binlog,格式相对固定。基于byte流可以方便利用工具序列化,同样针对binlog对象你也可以构建序列化工具。
canal的定位本身就和metaq有差别,有点扯远了,vlinux的提到metaq主要是想利用其文件存储的功能
0 请登录后投票
   发表时间:2013-02-13   最后修改:2013-02-13
agapple 写道
netcomm 写道
vlinux 写道


what ever,我永远敬重敢于自己创造轮子的同学~~~正在clone代码~~~看到用了dbsync

binlog事件目前我看到最大的缺陷就在于缺少业务基础。在事件驱动的业务中,业务事件往往包含的信息比binlog丰富多,而如果仅仅依靠binlog想驱动整个业务似乎在目前的业务场景下是不可能的,这也限制了这一类工具在线上的运用场景。




可以看到中间红色的部分其实是大家没想好的,用什么来衔接DB事件和业务事件呢?也许是一个二方包?也许是另外一个业务系统?

目前还在思考中...

vlinux指出了一个此类产品的共有问题,很多时候是个平衡,但有个基本原则是尽量在让业务系统(业务开发团队)无感觉(透明)的情况下,通过此类产品向外提供更多灵活、方便的功能。所以,如果当不得不让业务系统提供更多数据时(透明性就损失了),在这种情况下,canal的价值就并不比metaq等显示调用更有优势了。个人观点,欢迎讨论。

metaq的数据存储主要也是byte流,可以添加header信息,canal的数据主要是binlog,格式相对固定。基于byte流可以方便利用工具序列化,同样针对binlog对象你也可以构建序列化工具。
canal的定位本身就和metaq有差别,有点扯远了,vlinux的提到metaq主要是想利用其文件存储的功能

 

 用metaq当MQ来用能非常优异的实现业务事件驱动,是直接发MQ消息驱动业务还是通过Binlog来驱动业务?自然是MQ的消息来驱动业务更合适了。netcomm估计是这个意思。

是偶的错,不应该将一个纯技术帖歪掉,业务场景千变万化,随着天时地利人和各种条件因素,Canal驱动业务也不一定比MQ驱动业务差。我们还是关注下具体的实现吧。

 

mark之,以后有需要解析mysql-binlog的时候翻出来看看,如何写的酷

目前在看另外一个项目的代码,先吐槽下Canal对RingBuffer的生搬硬套,贱人就是矫情。。嘿嘿

0 请登录后投票
   发表时间:2013-02-14  
哈哈,内部版本我有基于disruptor的Ringbuffer使用,但存在一个比较大的问题,要求get操作是个独立的线程,多了很多线程之间的数据交换,未必适合canal场景。

1:因为大部分业务消息处理速度要小于业务产生速度,所以get batch是最合适的
2:因为存在事务投递,需要保证其事务可见性,所以需要支持put batch
3:不同业务场景对于get方式有所不同,目前按照batch size和timeout进行,后续考虑融合disruptor的推送功能(注册一个消费者,推送模式,推数据到客户端)

所以,就取巧借用了ringbuffer的sequence设计,揉合一些自己的需求,经过几个版本迭代,就成目前这样了,也可以说活学活用,而非生搬硬套,是吧?
0 请登录后投票
   发表时间:2013-02-27  
LinkedIn的Databus这个功能
Infinite lookback: One of the most innovative components of Databus is the ability to support infinite lookback for consumers. When a consumer needs to generate a downstream copy of the entire data (for example a new search index), it can do so without putting any additional load on the primary OLTP database. This also helps consumers when they fall significantly behind the source database.
Canal是不是整好到metaq上就具备了?
0 请登录后投票
   发表时间:2013-02-27  
netcomm 写道
LinkedIn的Databus这个功能
Infinite lookback: One of the most innovative components of Databus is the ability to support infinite lookback for consumers. When a consumer needs to generate a downstream copy of the entire data (for example a new search index), it can do so without putting any additional load on the primary OLTP database. This also helps consumers when they fall significantly behind the source database.
Canal是不是整好到metaq上就具备了?


按照我的理解,DataBus应该实现了一份binlog解析数据的持久化,数据保存有几个要求:
a. 有序性。 数据读取时需要严格按照当时写入的顺序读取
b. 大容量。 需要引入分布式存储,单机存储的架构无法满足容量扩展的需求
c. 可靠性。 需要考虑备份,考虑硬盘,操作系统crash的情况

目前metaq的设计,只能保证单机单partition有序,无法满足大容量锁需要的分布式架构,而可靠性目前通过客户端写多份来保证,所以从理论上来说无法达到所描述的那样的功能.

其实大容量,可扩展的存储架构也不会太难,之前看过bookeeper和hedwig的相关实现.
bookeeper的一些实现:
a. 有序性: 依赖zookeeper的PERSISTENT_SEQUENTIAL机制来保证
b. 大容量: 每次qurom的机器列表变更都会有版本记录,也就是你可以根据一个long id,结合qurom集群的变更版本,反推出当时写入数据的机器列表。
c. 可靠性: 一样是写多份,不过一台机器出现硬盘crash后,数据的恢复和搬迁需要手工干预.

bookeeper的缺点:
1. 效率问题:写多分,单条读取等
2. 缺少管理系统,和zookeeper一样都是独立软件式,没有强大的后台管理系统,解决动态扩展的问题。
0 请登录后投票
   发表时间:2013-02-27  
忘记说了,还有一种有序的保证就是写入关系型数据库的一张表,比如oracle,利用oracle的小型机+TB的硬盘存储,基本上可以保存很长一段时间的数据了.

这也是最简单,最快速的解决方案,我们也有用这种机制存储过binlog解析结果,哈哈
0 请登录后投票
   发表时间:2013-03-12  
实际应用中碰到一个问题:当client关掉时,再次期间内的增量数据,在client重新启动后,这些增量数据不会通知到client?
0 请登录后投票
   发表时间:2013-03-13  
kongshanxuelin 写道
实际应用中碰到一个问题:当client关掉时,再次期间内的增量数据,在client重新启动后,这些增量数据不会通知到client?


当然会重新通知,不会丢失,除非你下次重连的时间超过了binlog的保存时间 (因为我的增量数据来源都是源自binlog,只要它不删除,你就可以得到你离线过程的增量数据)

马上会发布canal 1.0.1版本,这个版本修复了不少小问题,canal 1.0.1版本已经正式在阿里巴巴100多个同步业务中进行了部署,相对稳定了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics