Databus简介「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • wxPython的基础教程

    wxPython的基础教程写在前面的话:上个假期学习了Python,发现它真的是一门很有趣的语言,所以这学期想学一些python的可视化编程,于是选择了wxPython。但是我在网上找中文教程找了好久都没有找到中文的教程(额,也许是我方法不对),无奈只好看英文的啦。于是在这个网站上看完了wxPython的基础教程,但是为了方便广大网友所以决定将这个网页中的内容翻译过来。花费了3个晚上的时间,终于把它翻译完了。但是我只是一个

    2022年5月21日
    28
  • 菜鸟的数学建模之路(四):BP神经网络

    个人理解BP神经网络属于人工智能范畴,在我看来它更多的是一个用于预测的工具,尽管它的用处还不仅于此。在数学建模上,很多时候,题目提供了很多历史数据,我经常用这些历史数据,用BP神经网络训练它,利用训练好的BP神经网络,来预测接下来的未知的值。BP神经网络关于该神经网络的繁多的理论这里就不去深究了,百度一查一大把,一堆的理论反正我是看不下去的,所以这里只是讲如何把BP神经网络当成一个工具来用,…

    2022年4月9日
    60
  • java extjs 教程_EXTJS入门教程及其框架搭建

    java extjs 教程_EXTJS入门教程及其框架搭建EXTJS是一个兼容AJAX的前台WEBUI的框架,在普通的HTML文件的BODY元素中无须写任何HTML代码,就能产生相应的表格等元素。首先是为每一个页面定义一个类,再以EXTJS的规范格式增加所需的元素,可以使用所见所得的工具:extbuilder来操作,这个类将以XXXXX.js的文件名保存,最后在相应的HTML页面中引入相关的JS和CSS文件:并在BODY中加入下面这段JAVAS…

    2022年6月18日
    28
  • 如何反编译dll文件

    如何反编译dll文件DLL DynamicLinkL 文件为动态链接库文件 又称 应用程序拓展 是软件文件类型 下载并解压 NETReflector 下面下载为绿色 7 3 0 18 版本 注 此为英文版 百度有汉化版下载 链接 https pan baidu com s 1eoWFe62wA uOdn3wTQ7e w 密码 gt87

    2025年11月13日
    2
  • 海思Hi3798MV300_Hi3798MV300H_Datasheet-系统[通俗易懂]

    海思Hi3798MV300_Hi3798MV300H_Datasheet-系统[通俗易懂]Hi3798MV300/Hi3798MV300H处理器子系统Hi3798MV300/Hi3798MV300H采用ARMCortex-A53MPCore四核处理器,Cortex-A53MPCore具有以下特点:处理器集成了256KBL2cache。支持ARMv8-A架构。支持DVFS自动调频调压和AVS自适应调压。安全子系统具有以下特性:…

    2022年6月29日
    198
  • c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法「建议收藏」

    c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法「建议收藏」AfxGetMainWndAfxGetMainWnd获取自身窗口句柄HWNDhWnd=AfxGetMainWnd()->m_hWnd;GetTopWindow函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。函数原型:HWNDGetTopWindow(HWNDhWnd);参数:hWnd:被查序的父窗口的句柄。如果该…

    2022年7月21日
    9

发表回复

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

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