社区 wiki 主页: https://github.com/linkedin/Databus/wiki
背景
一个大型分布式系统往往存在多种的存储系统,mysql,tair,redis,memcache,hbase 等等.一些重要的或者需要事务支持的数据操作,通常都会放到 mysql 处理.但是,为了满足高性能的访问需求或者做一些服务定制化的查询,业务上通常又会把 mysql 的数据再写到 tair 或者 redis 等外部存储中一份.
以业务将 tair 作为 mysql 的高速缓存为例,通常业务在代码中会有这么一段逻辑,读取 tair,数据不存在,从 mysql 读取数据,然后写入 tair.用户变更 mysql,然后会同时刷新 tair,或者将 tair 数据删除.为了降低客户端复杂度并且防止缓存穿透,常会引入 MQ 进行异步同步,如下图所示:
image.png
但是无论客户端同步方式还是 MQ 方式,其实都会存在数据一致性问题,这些场景,如果没有一个强一致协议(比如两阶段提交,paxos 等)是很难解决掉的.
现在,有了 Databus,上面提到的这些一致性问题就都没有了,并且,那些冗长的双写逻辑也可以去掉了.
功能介绍
Databus 是一个实时的,可靠的,支持事务的,保持一致性的数据变更抓取系统. 2011 年在 LinkedIn 正式进入生产系统,2013 年开源.
Databus 通过挖掘数据库日志的方式,将数据库变更实时,可靠的从数据库拉取出来,业务可以通过定制化 client 实时获取变更.
Databus 的传输层端到端延迟是微秒级的,每台服务器每秒可以处理数千次数据吞吐变更事件,同时还支持无限回溯能力和丰富的变更订阅功能.
功能 & 特性
来源独立:Databus 支持多种数据来源的变更抓取,包括 Oracle 和 MySQL.
可扩展,高度可用:Databus 能扩展到支持数千消费者和事务数据来源,同时保持高度可用性.
事务按序提交:Databus 能保持来源数据库中的事务完整性,并按照事务分组和来源的提交顺寻交付变更事件.
低延迟,支持多种订阅机制:数据源变更完成后,Databus 能在微秒级内将事务提交给消费者.同时,消费者使用 Databus 中的服务器端过滤功能,可以只获取自己需要的特定数据.
无限回溯:这是 Databus 最具创新性的组件之一,对消费者支持无限回溯能力.当消费者需要产生数据的完整拷贝时(比如新的搜索索引),它不会对数据库产生任何额外负担,就可以达成目的.当消费者的数据大大落后于来源数据库时,也可以使用该功能.
设计
架构设计
Databus 概要结构:
image.png
图中显示:Search Index 和 Read Replicas 等系统是 Databus 的消费者.当主数据库发生写操作时,连接其上的中继系统会将数据拉到中继中.签入在 Search Index 或是缓存中的 Databus 消费者客户端,就会从中继中拉出数据,并更新索引或缓存.
系统结构设计
image.png
上图中介绍了 Databus 系统的构成,包括中继 Relay,bootstrap 服务和客户端库.Bootstrap 服务中包括 Bootstrap Producer 和 Bootstrap Server.快速变化的消费者直接从 Relay 中取事件.如果一个消费者的数据更新大幅落后,它要的数据就不在 Relay 的日志中,而是在 Bootstrap Producer 里面,提交给它的,将会是自消费者上次处理变更之后的所有数据变更快照.
Databus Relay 中继的功能主要包括:
从 Databus 来源读取变更行,并在内存缓存内将其序列化为 Databus 变更事件
监听来自 Databus 客户端(包括 Bootstrap Producer)的请求,并传输新的 Databus 数据变更事件
Databus 客户端的功能主要包括:
检查 Relay 上新的数据变更事件,并执行特定业务逻辑的回调
如果落后 Relay 太多,向 Bootstrap Server 发起查询
新 Databus 客户端会向 Bootstrap Server 发起 bootstrap 启动查询,然后切换到向中继发起查询,以完成最新的数据变更事件
单一客户端可以处理整个 Databus 数据流,或者可以成为消费者集群的一部分,其中每个消费者只处理一部分流数据
Databus Bootstrap Producer 的功能有:
检查中继上的新数据变更事件
将变更存储在 MySQL 数据库中
MySQL 数据库供 Bootstrap 和客户端使用
Databus Bootstrap Server 的主要功能,监听来自 Databus 客户端的请求,并返回长期回溯数据变更事件.
业务应用
Databus 在 linkedin
在 LinkedIn,Databus 支持的系统有:
社会化图谱索引(Social Graph Index),服务 LinkedIn 所有图谱查询
人员搜索索引(People Search Index),支持搜索所有 LinkedIn 用户
用户档案数据(Member Profile)多个冗余的读取查询
来源: http://www.jianshu.com/p/5dba22e3430a