Databus简介「建议收藏」

Databus简介「建议收藏」1.背景在互联网架构中,数据系统通常分为真实数据(source-of-truth)系统,作为基础数据库,存储用户产生的写操作;以及衍生数据库或索引,提供读取和其他复杂查询操作。后者常常衍生自主数据存储,会对其中的数据做转换,有时还要包括复杂的业务逻辑处理。缓存中的数据也来自主数据存储,当主数据存储发生变化,缓存中的数据就需要刷新,或是转为无效。这样架构自然而然的一个问题就是如何保障基础数


Jetbrains全系列IDE稳定放心使用

1.背景
在互联网架构中,数据系统通常分为真实数据(source-of-truth)系统,作为基础数据库,存储用户产生的写操作;以及衍生数据库或索引,提供读取和其他复杂查询操作。后者常常衍生自主数据存储,会对其中的数据做转换,有时还要包括复杂的业务逻辑处理。缓存中的数据也来自主数据存储,当主数据存储发生变化,缓存中的数据就需要刷新,或是转为无效。这样架构自然而然的一个问题就是如何保障基础数据库和其它数据存储方的数据一致性。一个想法是双写,在有数据进来的时候就同时更新基础数据库和衍生数据库(或缓存),但这种方式如果没有很强的协议来保证,就还是会有一致性问题,比如说主数据库写入成功但是衍生数据库(或缓存)写入失败。另外的一个方案就是只写基础数据库,其它衍生数据库(缓存)通过监听基础数据库的变化来进行数据变更,这个方案要求能有一个工具能监听基础数据库的变更并且能够及时的通知衍生数据库(缓存)具体的变化,而Databus就是这样的一个系统。

2.简介
Databus是一个实时的低延时数据抓取系统。它将数据库作为唯一真实数据来源,并将变更从事务或提交日志中提取出来,然后通知相关的衍生数据库或缓存。
Databus传输层端到端的延迟是微秒级别的,这意味着每台服务器每秒可以处理数千次数据吞吐变更事件,同时还支持无限回溯能力和丰富的变更订阅功能,目前从实践中来看,单个DB写入QPS达到1.5k就要进行拆库,而到达2k就会出现比较明显的主从延迟,而relay虽然要串行解析单个库的binlog,但是也可以扛到2.2k。下面的图是大概的结构:
这里写图片描述
上图展示Search Index、Read Replicas系统是Databus的消费者。当Primary 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 Server。快速变化的消费者从relay中拉取数据,但如果一个消费者的数据大幅度落后,relay就不能提供它要的数据,转而由Bootstrap Producer提供给它自上次处理后变更的所有数据快照。下面来具体的介绍下这几个模块的主要功能:
Databus Relay中继主要功能:

  1. 从Databus来源读取变更行,并在内存缓存中将其序列化为DataBus事件。
  2. 监听来着Databus客户端(包括Bootstrap)的请求,并传输新的Databus变更事件

Databus客户端的功能主要包括:

  1. 检查Relay上新的数据事件的变更,并执行特定业务逻辑的回调
  2. 如果落后Relay太多,则向BootStrap Server发起查询
  3. 新的DataBus客户端会先向BootStrap Server发起bootstrap查询,然后再切换到向中继发起查询,以完成最新的数据变更
  4. 单一客户端可以处理整个Databus数据流,或者可以成为消费者集群的一部分,其中每个消费者只处理一部分流数据

Bootstrap Server可以看成一种特定的Databus客户端,它的功能有:

  1. 监听中继数据变革
  2. 将变更存储到mysql数据库中
  3. mysql数据库供Bootstrap和客户端使用

Databus Bootstrap Server的主要功能,就是监听来自Databus客户端的请求,并返回长期回溯数据变更事件。
目前databus的主要应用:1.是主数据库和衍生数据库的同步,一般是为了对主数据库数据按另外维度进行组织,提供给查询使用 2.是用来将数据库数据同步到缓存中,这样主要是为了减轻数据库读压力。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181048.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被激活成功教程。[通俗易懂]

    选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被激活成功教程。[通俗易懂]做嵌入式产品,最头痛的事情就是害怕自己的代码给别人读出来,不需要通过自己,人家直接拿去生产了。所以要保护自己的最好方式就是使用硬加密IC的方式。当然有句话说的好“这世上没有激活成功教程不了的加密算法”。每一个加密芯片都有它的不足和优势,今天我不说如果激活成功教程加密IC,我拿几个产品来对比,只讲它的优点和缺点。     ATSHA204:使用SHA-256算法进行加密操作,内置16*32字节的slot(E

    2022年6月25日
  • 基于chromium for android开发Android浏览器

    基于chromium for android开发Android浏览器在上一篇文章<>中谈到了Google已经完全开源了ChromiumforAndroid,这样我们就完全可以开发与ChromeforAndroid媲美的Android浏览器了。通常浏览器的一些新特性和新功能会先出现在ChromiumforAndroid上,稳定后才会出现在ChromeforAndroid上,如果我们基于Chromiu

    2022年5月15日
  • vector>初始化_电脑初始化出现问题

    vector>初始化_电脑初始化出现问题1、默认初始化,vector为空,size为0,未开辟空间,可通过push_back()添加元素。vector&lt;int&gt;v;v.push_back(10);2、默认初始化,指定vector大小,元素初始值默认为0,元素增多时,同样可以通过push_back()来改变vector大小以增加元素。vector&lt;int&gt;v(5)3、指定初始化元素值为2…

    2022年9月18日
  • 常见函数的泰勒公式展开_基本泰勒公式展开表

    常见函数的泰勒公式展开_基本泰勒公式展开表笔记

    2022年10月29日
  • Java 分布式解决方案

    Java 分布式解决方案文章目录一、基础知识1.CAP理论2.BASE理论一、基础知识1.CAP理论CAP是Consistency、Availability、Partitiontolerance三个词语的缩写,分别表示一致性、可用性、分区容忍性Consistency一致性一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态。Availability可用性可用性是指任何事务操作都可以得到响应结果,且不会出现响应超时或响应错误。Partitio

    2022年5月28日
  • 关于access字段名,下面叙述错误的是_accepted是什么意思

    关于access字段名,下面叙述错误的是_accepted是什么意思最基础的IOCP例子,没有使用扩展函数AcceptEx:IOCP模型*关于iocp的核心就一点:GetQueuedCompletionStatus将携带返回2个重要的参数,一个lpCompletionKey,一个lpOverlapped.lpCompletionKey:是CreateIoCompletionPort((HANDLE)clientSocket,…

    2022年9月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号