一款低延迟的分布式数据库同步系统--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的主要内容,如果未能解决你的问题,请参考以下文章