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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一款低延迟的分布式数据库同步系统--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行业对年龄和女孩子都是很残酷的。我不图名,不图利,不爱权利,但是我想工作。

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

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

以上是关于一款低延迟的分布式数据库同步系统--databus的主要内容,如果未能解决你的问题,请参考以下文章

消息队列中间件Kafka 入门指南

Windows安装RocketMQ

Windows安装RocketMQ

1 RocketMQ简介

Flume概述

RocketMQ分布式消息队列