80

一款低延迟的分布式数据库同步系统--databus - 静儿1986

 6 years ago
source link: http://www.cnblogs.com/xiexj/p/7652386.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一款低延迟的分布式数据库同步系统--databus

  每次看到马路对面摩托罗拉的大牌子,都想起谷歌125亿美元收购摩托罗拉移动,后来又以29亿美元卖给联想的事情。谷歌所做的决策都比较考虑长远利益,在这串交易中,谷歌获得了摩托罗拉最有价值的几千项专利,稳健了Android的生态。谷歌曾经在美国一个地区占用巨大的面积建立了太阳能发电站,人称“烤鸟”项目。因为鸟儿从此地飞过会因为太热而从天上掉下来变成熟鸟。而产生的电能仅够一个小村庄使用。但是正是这种愿意去尝试才推动了科技的发展。让谷歌这么多年屹立不倒。

  Databus是LinkedIn开源的一款低延迟的分布式数据库同步系统(a source-agnostic distributed change data capture system),它提供可靠的数据捕获、流转和数据处理功能。

应用场景:

    主要应用场景:跨部门之间或者跨机房之间进行数据库的数据订阅。同类产品有阿里的canal。支持Oracle和Mysql数据库。

      Databus和canal一样,数据都是基于数据库日志挖掘来做的。我之前的博客也提到了,当今的数据处理大致可以分为两类:联机事务处理OLTP(OnLine Transaction Processing)和联机分析处理OLAP(OnLine Analytical Processing)。

  OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。但是平常所说的OLTP是集成到SQL Server中的数据库引擎组件,因为微软有个白皮书《SQL Server In-Memory OLTP Internals Overview》。但是OLTP实际上可以称之为:面向交易的实时处理系统。性能指标是TPS。

  OLAP是快速响应多维分析的一种解决方案。面向的数据源是数据仓库。支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

  再回来说Databus,Databus最重要的特点是其无限回溯功能。当消费者完整数据拷贝,或者消费者的已有数据和主OLTP数据库相差很大时能够低延时的进行同步。

核心组件:

  Databus的核心组件是Databus Relay。主要负责两个工作:

  1>从Databus源数据库中读取变化行,并序列化为事件流保存至内存中。

  2>接受客户端的请求,并将数据变化事件流返回给客户端。

实现原理:

  databus使用了open-replocator作为获取数据库变更事件的组件。功能是实时获取mysql的binlog日志,并封装成Event对象,然后调用已注册的listener进行处理。

技术架构:

  • Event Producer:用来读取数据库的变化事件,转化为AVRO类型并存储至内存中。

  下面说说AVRO. Apache Avro是一个独立于编程语言的数据序列化系统,该项目由Hadoop之父牵头创建。它可以提供:丰富的数据结构类型,快速可压缩的二进制数据形式,存储持久数据的文件容器,远程过程调用,同动态语言的简单集成。读写数据文件和使用RPC协议都不需要生成代码,而代码生成作为一种可选的优化只值得在静态类型语言中实现。

  • Circular Buffer:Relay有一个或多个环形的缓冲池用来保存按递增的系统变化号(SCN)为顺序的变化事件。

  细心的读者会发现每个中间件都有自己比较独特的缓冲策略,这种缓冲策略很大成熟决定了此中间件的好坏。

  • SCN Writer/Reader:用来读取和吸入SCN号至硬盘。
  • RESTFUL interface:它暴露一个restful接口,用来推送数据变化事件至客户端。

源码:

  Databus是用java开发的。github地址是:https://github.com/linkedin/databus。  

跑题时间:

  自从毕业后上班开始就时不时自己能够感觉到一些问题。比如:比较着急的时候我眉头是紧锁着的,说话客气不起来了。再比如我说话的方式也是技巧不足的。这些看起来不是核心的问题现在却是我的第一要务。因为之前有问题没关系,我不做管理,我就管我自己。那么这些小毛病顶多影响我自己。现在我的很多决定都直接影响到我们团队。

  所以,在实际影响范围可控的情况下,我反而会将问题更明显出来,自己制造些小矛盾。为什么这么做呢,因为我从来不做“大家都说这样做是对的”的事情。我只做自己心里完全接受的事情。  

  之前认识我的人都知道我嗓门很大。现在好一点了,虽然也有时会忘了降低嗓门。我娘家在我们镇上最繁华的地段,后面是菜市场。每天早上3点就很吵了。我屋的窗户正好对着市场。所以我从小练就了“再吵和我没关系”的本事,所以我对噪音很不敏感。所以我是花了很大力气才让自己心里完全接受了“这样会打扰别人,最好的音量是不要太大,震到别人耳朵,也不要太小,别人听不清”

  我现在需要让自己了解到自己的问题会产生什么样的后果,确实是有问题的。但是这样做确实是很笨的方法。聪明人是自己完全可以预见到的,人生会走很多弯路。

  我工作十年,实质性的提高是没有的。刚毕业的时候,我的学历差不多就是目前所在这个级别的公司。人人,乐视,新美大。并没有级别上的提升,反而职级上比同届的要低。

  跟别人相比,可能我一年过了日语1级,去过日本。后来去过美国硅谷。也有上百个专利。我在想这些为什么都没能给我带来实实在在的好处。

  我学语言能力确实很强,但是我单纯只想做技术。自己的任性是要有代价的。代价就是语言能力没有用武之地。

  去过日本和硅谷,这是工作机遇,并不是什么能力。应该给我带来的是气质,谈吐。但是我的气质和谈吐并没有上去。也就是我白去了,去了没学到东西。素养没提高。

  专利是要真正给公司带来利益才有价值的,和数量没有关系。我并没有哪个专利特别好,发挥了特牛逼的作用。

  总的来看,我是一个非常普通,还有1个半月就过31岁生日的老技术。完全没有优势。并且,我还有点浮躁。

  去乐视之前,我的每一次努力都发生在不得不努力的时候。升学前,因为担心,考不上怎么办呀,于是努力成绩上去了。危机没了又回到原来。上班有任务压我,我就努力干。因为干不完怎么办呀,这是我的责任。然后基本就是忙一个月两个月闲个半年。

  去乐视的时候,我有个好开头。为什么呢,因为去乐视之前,我自己趟了趟浑水,当然不是工作上的。但是我在乐视的时间自己都很郁闷。直到最后我在自己脸上身上刻了好几个疤,近1年才好,这段时间我都在郁闷自己身上的疤,原来因为什么事情郁闷完全都不记得了。所以这是我最不浮躁的一段时间。不过,我觉得和别人相比,也挺浮躁的。

  现在来说,我觉得起点是很低的。突然觉得自己一无所有。但是好歹各个阶段该做的事情都做了,该试的错也实实在在试过了。我得到了我真正想得到的东西。放弃的,都是自己觉得不值得。就剩一件事了,我想在工作上达到我应该达到的高度。因为IT行业对年龄和女孩子都是很残酷的。我不图名,不图利,不爱权利,但是我想工作。

  现在的公司,大家都有我很多我值得学习的地方。不跟着别人学,自身的成长也需要很多的提高。方法论方面,架构方面。我还不能拖的时间很长来适应,我需要尽快能够有一些时间,每天写点代码,根本的东西不想放下。

  一直以来都不喜欢被别人叫老。也一直以来都没成熟大方得体。有时候头发很乱,有时候不经考虑。这是年轻,希望别人喜欢自己原本的样子。现在,越来越多的考虑怎么把事情做好。静儿的文章哪有不秀恩爱的。今天我只想说谢谢男神在我还年轻的时候遇到我,一心做事情的人恐怕不会再爱上谁。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK