1 .背景
在互联网架构中,数据系统通常分为实数据(source-of-truth )系统,作为存储用户编写的写操作的基础数据库。 派生数据库或索引以提供读取和其他复杂的查询操作。 后者常常派生自主的数据存储器,转换其中的数据,有时还包括复杂的业务逻辑处理。 缓存中的数据也来自主数据存储库,并且如果主数据存储库发生更改,则必须更新或禁用缓存中的数据。 这种架构的一个自然问题是确保底层数据库和其他数据库的数据一致性。 一个想法是双写入,在数据进入时同时更新基础数据库和派生数据库(或高速缓存),但这种方式如果没有强大的协议来保证,仍然存在一致性问题。 例如,主数据库写入成功,但派生数据库(或高速缓存)写入失败。 另一种方案是只写基础数据库,其他派生数据库(缓存)截获基础数据库的更改进行数据更改。 该方案需要能够监听基础数据库的变更,并及时通知派生数据库(高速缓存)的具体变更的工具,Databus就是这样的系统。
2 .前言
Databus是一种实时低延迟数据捕获系统。 将数据库作为唯一的真正数据源,从事务或提交日志中提取更改,并通知相关的派生数据库或缓存。
Databus传输层的端到端延迟是微秒级别的。 这意味着一台服务器每秒可以处理数千次数据吞吐量更改事件。 它还支持无限的回溯能力和丰富的更改订阅功能。 目前,在实践中,如果一个DB写入QPS达到1.5k,则分解数据库,如果达到2k,主从延迟就会明显发生。 另一方面,relay串行分析一个库的binlog,但也可以用2.2来承担,下图是大致的结构:
上图显示了Search Index,Read Replicas系统是Databus的消费者。 如果在主db上发生数据更改,则与其连接的中继系统会将数据提升到中继。 嵌入在Search Index或高速缓存中的Databus消费者客户端从中继中提取数据并更新高速缓存或数据库。
DataBus提供以下功能:
源独立性: Databus为各种数据源(如mysql和oracle )提供更改捕获。 oracle适配器是开源版本提供的,mysql适配器将在以后提供。 提高可扩展性和可用性Databus可以扩展以支持数千个消费者和事务数据源,并保持高可用性。 顺序提交事务: Databus会维护源数据库中事务的完整性,并按事务分组和提交源的顺序提交更改事件。 低延迟,支持多种订阅机制:数据源更改完成后,Databus可以在微秒级别将事务发送给消费者。 此外,消费者可以使用Databus的服务器端筛选功能只检索所需的特定数据。 无限回溯:这是Databus最具创新性的组件之一,为消费者提供无限的回溯能力支持。 如果消费者需要创建数据的完整副本(如新的搜索索引),则可以实现此目的,而不会给主OLTP数据库增加额外的负担。 如果消费者数据严重落后于源数据库,也可以使用此功能。 3 .简化的体系结构
大致说来,databus的主要模块有两个,一个是relay,从mysql/oracle引出变更事件,存储在本地内存buffer中的一个是client,从relay引出变更事件,进行业务
上图是Databus的大致架构,可以看到中继Relay、Bootstrap服务、客户端库三个模块,其中Bootstrap包括BootStrap Producer和bootstrap service 快速变化的消费者会从relay中提取数据,但如果消费者的数据大幅延迟,relay将无法提供所需的数据,而Bootstrap Producer将提供自上次处理以来更改的所有数据快照。 下面具体介绍这些模块的主要功能。
Databus Relay继电器的主要功能:
从Databus源读取更改行,并在内存高速缓存中将其序列化为Databus事件。 以下主要功能用于接收来自包含Bootstrap的Databus客户端的请求并转发新的Databus更改事件Databus客户端:
如果回调Relay检查Relay上新数据事件的更改并执行特定业务逻辑太多,则新的DataBus客户端将查询BootStrap Server 为了进行最新的数据更改,一个客户端可以处理整个Databus数据流,也可以成为消费者群集的一部分。 每个消费者只处理部分流数据的Bootstrap Server可以被认为是具有以下功能的特定Databus客户端:
接收到元数据更改时,Bootstrap和客户端将更改存储在mysql数据库中的mysql数据库以使用Databus Bootstrap Server。 主要功能是接收来自Databus客户端的请求,并返回长期的回溯数据更改事件。
目前,databus的主要应用是:1.主数据库与派生数据库的同步,一般用于将主数据库中的数据提供给查询以供其他维度组织;2 .用于缓存数据库中的数据,主要用于数据