iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >开源分布式数据库RadonDB的核心技术与实现是怎样的
  • 780
分享到

开源分布式数据库RadonDB的核心技术与实现是怎样的

2024-04-02 19:04:59 780人浏览 泡泡鱼
摘要

开源分布式数据库RadonDB的核心技术与实现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。RadonDB是一款将分布

开源分布式数据库RadonDB的核心技术与实现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

RadonDB是一款将分布式一致性协议Raft与Mysql相结合的新一代分布式关系型数据库,兼具Newsqlmysql两类数据库的优点。下面将从架构、执行、高可用等角度,结合开源代码为大家深度解析RadonDB的核心技术与实现。

RadonDB是一个开源的分布式数据库。为什么叫RadonDB呢?RadonDB中的Radon出自元素周期表,是一种惰性气体,名字叫做氡。因其化学性质比较稳定,所以我们就以此来命名了这款数据库产品。

RadonDB包含两个部分Radon和Xenon,并不是一个简单的数据库中间件。其中,Radon类似于一个数据库中间件,而Xenon是一个高可用的MySQL管理集群工具

开源分布式数据库RadonDB的核心技术与实现是怎样的

上图是RadonDB的整个架构图,其中最上面一层是Radon,一个分布式的SQL层,负责SQL的解析和转发。这一层就是大家说的数据库中间件,它会根据用户请求将SQL语句生成分布式执行计划,并推到下面的存储层。

下面这一层是Xenon,一个高可用的MySQL管理工具。在这一层的每个虚线框里都是一“主”两“从”的MySQL,都通过Xenon进行管理。Xenon其实是一个无中心化的管理工具,当主节点挂了之后,会使用Raft协议进行选主,选出新的“主”之后,再根据MySQL Binlog这些机制进行数据同步,从而使新的主节点继续对外服务。

开源分布式数据库RadonDB的核心技术与实现是怎样的

下面咱们聊一聊RadonDB的一些技术细节。RadonDB的主要功能是对用户SQL生成分布式计划以及执行器并行执行,当执行器下发到存储层以后,进行ORDER BY、LIMIT、GROUP BY等二次运算。

Radon支持集群模式,所以基本上是无状态的。当其中一个节点挂了之后,其他节点可以很快的迁移过去,保证Radon这一层的高可用。

开源分布式数据库RadonDB的核心技术与实现是怎样的

如果从代码层面来看Radon的具体工作流程,用户SQL到达Radon之后, query.Go文件会对SQL进行语法树的生成,生成之后根据SQL的类型进行处理。

开源分布式数据库RadonDB的核心技术与实现是怎样的

首先,根据语法树生成分布式的执行计划。分布式的执行计划是根据路由表查找每个具体的数据分布在哪些后端,然后生成具体的子句。

开源分布式数据库RadonDB的核心技术与实现是怎样的

分布式执行计划生成之后,就运行Insert executor文件,并下发到相应节点去执行。

以上,就是RadonDB 中Radon这一层的基本工作机制。

开源分布式数据库RadonDB的核心技术与实现是怎样的

Radon这一层还有一个比较重要的功能——分布式事务。Radon分布式事务是基于MySQL原生事务——XA事务来进行的。MySQL的XA事务在执行时可分为五个阶段:第一个阶段是XA START,第二个阶段是SQL执行,第三个阶段是XA END,第四个阶段是XA PREPARE,这个阶段其实数据已经通过Binlog传到了备库,即使主库挂了,重建之后事务仍然处于XA PREPARE状态,我们可以认为数据不会丢失。最后一个阶段是XA COMMIT。

RadonDB对这五个阶段进行了分工,共分成begin、execute、commit三个阶段。

开源分布式数据库RadonDB的核心技术与实现是怎样的

RadonDB实现了SI隔离级别的分布式事务。Radon里有一个Commit Lock,如果不加这个是实现不了这种隔离级别的。那么什么是SI隔离级别呢?SI是SNAPSHOT ISOLATioN的缩写,它的作用是未提交的不可见,例如有三个分区,当它们都没有XA commit时,其它事务读的时候是看不到未提交事务的数据。另一个作用是部分提交不可见,还是有三个分区,第一个分区XA commit了,其他两个分区正准备commit,这时候如果有其他的客户端读数据也是不可见的。

开源分布式数据库RadonDB的核心技术与实现是怎样的

为了检测XA的隔离级别,我们研发了一个开源工具,它的思路比较简单,就是一个更新线程不停地去更新,16个扫表线程不停地扫表。如果分布式事务满足不了SI隔离级别,那么16个扫表线程就有可能看到更新线程的部分数据。

我们进行了100多亿次操作和检测的测试,并且过程是随机的。我们会把存储层的主节点宕掉来做“主从”切换。在大量的测试中,目前还没有发现读取到部分数据的情况。

开源分布式数据库RadonDB的核心技术与实现是怎样的

下面介绍一下RadonDB的另一个组件——Xenon,一个高可用的MySQL管理工具。假设一个节点有一“主”两“从”,三个MySQL,那么它们之间的高可用怎么来实现呢?

开源分布式数据库RadonDB的核心技术与实现是怎样的

Xenon的工作机制是和MySQL配合,通过MySQL链接不停地去ping MySQL,并拿到MySQL的信息。一个MySQL对应一个Xenon,并部署在一个container里,一“主”两“从”分布在不同的container里面。当Master不可服务时,其他的Xenon会检测不到Master发来的心跳,这时由Xenon发起的心跳会发起选主操作,进而其他的从节点会被选为新的主节点。

开源分布式数据库RadonDB的核心技术与实现是怎样的

接下来,我们讲一下Xenon如何发起选主操作、如何选择新的主节点以及选完之后如何保证数据不丢失?

对于一“主”多“从”的MySQL集群想要做到高可用有几个挑战:第一是如何选“主”;第二是选“主”之后,数据怎么跟原先的Master进行同步,保证数据不丢失;第三是如何尽快选“主”,当原来的“主”挂了之后,新的主节点如何尽快应用数据,并对外提供服务。

我们把MySQL的GTID和Raft的选主结合了起来。Xenon主要实现了Raft选主功能,结合MySQL GTID实现高可用。了解Raft算法的朋友可能都知道,Raft主要做两件事,第一件就是选“主”。第二个就是log同步。Xenon选“主”使用了Raft选主协议,选“主”之后会结合MySQL GTID进行数据同步。

如果是一“主”两“从”的节点,那么这两个从节点哪个被选为新的主?这里结合了MySQL的GTID和semi-sync。当我们把semi-sync的vote_timeout设置为无限长,基本上就可以认为是“主”。写完之后,至少有一个“从”会收到,然后返回给“主”,“主”再返回给cluster,这样保证至少有一个“从”和“主”的数据是完全同步的。当“主”挂了之后,和主节点数据完全同步的从节点会被选为新的主节点,之后根据MySQL的并行复制,快速回放,并对外进行提供服务。

开源分布式数据库RadonDB的核心技术与实现是怎样的

介绍完Radon和Xenon,我们看一下,数据在RadonDB里面是怎么分布的?RadonDB的底层存储基于MySQL,也就是说由Xenon管理的一主两从是一个节点,整个存储层是由多个这样的节点组成的。

开源分布式数据库RadonDB的核心技术与实现是怎样的

用户创建一个表的时候需要指定一个分区键,RadonDB会根据分区键把整个大表分成32个小表。分配规则是这样的,整个表有4096个槽位,其中每个小表是128个槽位,共有32个小表。

RadonDB的最小单位就是小表,命名为T1_0000到T1_0031,每个小表都是占128个槽位,例如第一个小表是从0到127。这样当用户在做Insert时,就可以依据此判断数据会落在哪个小表里。

开源分布式数据库RadonDB的核心技术与实现是怎样的

RadonDB如何做扩容呢?RadonDB最小单位是一个小表,但4096和128这两个数字是可以配置的。在扩容上,RadonDB可以让小表在不同的机器间动态漂移。因为是MySQL表,所以把小表从一个MySQL实例上飘到另外一个MySQL实例比较简单。首先是做一个全量迁移,记下当时迁移的位点,然后再对增量进行追加。这种以小表为迁移的方式不但不影响读写操作,而且操作方便,既可以扩容,还可以缩容。

开源分布式数据库RadonDB的核心技术与实现是怎样的

RadonDB还支持Binlog,为什么?因为RadonDB是一个分布式数据库,如果有别的数据库或数据想订阅RadonDB数据,那么就可以订阅RadonDB Binlog。连上RadonDB之后,执行SHOW BINLOG EVENTS,指定从哪个GTID开始,同时还可以指定订阅多少条。这样就可以把RadonDB数据实时的导入到异构的数据库里。

开源分布式数据库RadonDB的核心技术与实现是怎样的

如果RadonDB收到了比较复杂的AP操作,例如JOIN,它的机制又是怎么样的呢?RadonDB还有一个计算节点,当用户SQL上来之后,RadonDB如果发现里面有比较复杂的JOIN等AP操作,会自动的把这个请求路由到计算节点上。

计算节点是插件式的,它可以是其他比较强大的AP分析型数据库,计算节点把结果计算完之后,RadonDB会自动的反馈给客户端,在这种情况下,客户端是无法感知到这些操作的。

这样做的好处是事务型和计算型是资源隔离的,但缺点是存储需要两份。如何克服缺点呢?其实目前我们也没有很好的办法,只是通过压缩暂时的解决了这个问题。

开源分布式数据库RadonDB的核心技术与实现是怎样的

RadonDB还实现了审计日志功能,当用户的请求到达RadonDB之后,RadonDB把用户请求记录到本地磁盘上。我们可以通过上图中的多个维度进行审计,同时还可以查询慢操作。当日志请求量比较大时,RadonDB会定期进行清理。同时RadonDB还支持多种审计模式,例如只读审计、只写审计、读写审计等等。

开源分布式数据库RadonDB的核心技术与实现是怎样的

大家可能会比较担心分布式数据库灌进了大量数据就很难导出来了。针对这种情况,RadonDB提供了导入和导出的工具,这些工具是并行式的,导入/导出的速度比MySQL原生的Mydumper还快。

开源分布式数据库RadonDB的核心技术与实现是怎样的

RadonDB提供了全链路的监控,如果分布式数据库是一个黑盒,那么出了问题就很不容易排查。RadonDB从前往后做了三层监控,第一层就是show processlist,这层是监控用户到RadonDB的连接,跟MySQL是一样的。其中RadonDB实现了一个序列表,这一层的作用就是可以看到cluster到RadonDB执行的SQL语句。第二层是监控RadonDB内部峰值事务执行到哪个阶段,大家可以通过show txnz命令进行监控;最后一层就是show queryz,这个命令可以看到具体的子句在哪些后端执行。

通过这三层监控就可以很快的定位到具体问题,比如一个慢MySQL,它到底是慢在哪些地方。

开源分布式数据库RadonDB的核心技术与实现是怎样的

上图是性能对比表,上面的RadonDB是四个存储节点,下面是单机MySQL。大家可以看到,RadonDB的性能基本上是单机的三倍,而延迟基本上是1/3。为什么会出现这种情况呢?这就是分布式的威力。假设我们有一个1TB的表,如果使用单机数据库,那么Btree会比较高,而且每次请求的IO深度路径也会比较长。而RadonDB会把1TB的数据分成四个节点,假设平均每个节点是250G,每个节点还有细分每个小表。当用户请求时,我们只需请求小表,而且RadonDB对所有的请求都是并行执行的,时间完全取决于最慢的小表。所以在这种设计中,RadonDB的性能基本上会是单机的三倍,而延迟是1/3。

最后说一下RadonDB的展望,大家都了解类似于Google Spanner这种NewSQL会是一个大趋势,而且很多公司也都在完全自主研发NewSQL。有人都认为传统的基于MySQL分库分表的方式已经过时了,而我们提出了一个新的概念——MyNewSQL,就是MySQL和NewSQL相结合。

其实RadonDB就是一个MyNewSQL,它把NewSQL领域里常用的算法都拿到了MySQL里,从而实现了MyNewSQL。RadonDB 最后实现的功能和NewSQL基本无异,但它是基于MySQL进行存储,表、数据结构都可以是异构的,性能上也有很大的提升。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 开源分布式数据库RadonDB的核心技术与实现是怎样的

本文链接: https://www.lsjlt.com/news/69994.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 开源分布式数据库RadonDB的核心技术与实现是怎样的
    开源分布式数据库RadonDB的核心技术与实现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。RadonDB是一款将分布...
    99+
    2024-04-02
  • 怎么解析RadonDB分布式数据库核心技术与实现
    怎么解析RadonDB分布式数据库核心技术与实现,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。摘要:随着数据规模的逐步扩大,存储和运维成本逐渐...
    99+
    2024-04-02
  • 分布式锁中的数据库、缓存、Zookeeper实现是怎样的
    分布式锁中的数据库、缓存、Zookeeper实现是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分布式锁的几种实现方式目前几乎很多大型网站及应用都是分布式部署的,分布...
    99+
    2023-06-05
  • Kafka内核中的分布式机制实现是怎样的
    Kafka内核中的分布式机制实现是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一个Topic中的所有数据分布式的存储在kafka集群的所有机器(broker)上,以分区...
    99+
    2023-06-04
  • 分布式数据库原理和PostgreSQL 分布式架构是怎样的
    分布式数据库原理和PostgreSQL 分布式架构是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一、 什么是分布式数据库分...
    99+
    2024-04-02
  • 分布式系统的核心技术:Python和LeetCode学习笔记是必须的吗?
    在当今互联网高速发展的时代,分布式系统已经成为了很多企业必不可少的技术。它的好处是显而易见的:高可用、高性能、高扩展性等等。然而,要想掌握分布式系统的核心技术,需要学习很多不同的编程语言和算法。Python和LeetCode是其中的两个重...
    99+
    2023-08-28
    leetcode 学习笔记 分布式
  • 深入浅出ASP Master页与页面布局的实现:掌握网站开发的核心技术
    一、ASP Master页简介 ASP Master页是ASP.NET中的一项重要技术,它允许开发者定义一个公共的模板页面,然后将其他页面作为子页面嵌入到这个模板页面中。这样,所有子页面就可以共享模板页面的布局和样式,从而简化了网页的开发...
    99+
    2024-02-04
    ASP Master页 页面布局 网站开发 前端技术 HTML CSS JavaScript
  • 分布式数据集SparkRDD的依赖与缓存是怎样的
    这篇文章将为大家详细讲解有关分布式数据集SparkRDD的依赖与缓存是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。RDD简介RDD(Resilien...
    99+
    2024-04-02
  • 数据类型的秘密:Python文件开发技术的核心要素是什么?
    在Python中,数据类型是一个非常重要的概念。它决定了你能够处理什么样的数据,以及如何处理这些数据。在本文中,我们将探讨Python文件开发技术中数据类型的重要性以及其核心要素。 Python中的数据类型 在Python中,常见的数据类...
    99+
    2023-09-17
    文件 开发技术 数据类型
  • 数据库分布式事务的实现原理!
    事务是数据库系统中非常有趣也非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全不执行;在 SOA 与微服务架构大行其道的今天,在分布式的多个服...
    99+
    2024-04-02
  • 怎么实现分布式图数据库Nebula Graph 的Index实践
    这篇文章将为大家详细讲解有关怎么实现分布式图数据库Nebula Graph 的Index实践,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导读索引是数据库系...
    99+
    2024-04-02
  • 分布式图数据库 Nebula Graph 中的集群快照实践是怎样进行的
    今天就跟大家聊聊有关分布式图数据库 Nebula Graph 中的集群快照实践是怎样进行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.1 需求...
    99+
    2024-04-02
  • PHP与数据库分布式集成的方法是什么
    这篇“PHP与数据库分布式集成的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP与数据库分布式集成的方法是什么...
    99+
    2023-07-06
  • Golang技术中实现分布式系统的最佳实践是什么?
    实现分布式 golang 系统的最佳实践包括:采用微服务架构、使用分布式消息传递、实现负载均衡、采用容错机制、实施分布式一致性以及使用分布式缓存。通过应用这些最佳实践,可以创建可靠、可扩...
    99+
    2024-05-08
    golang 分布式系统 redis nginx 高可扩展性
  • 分布式大数据缓存的必备工具:ASP 技术是否是首选?
    在当今大数据时代,数据量的急剧增长已经成为一种趋势。大数据的出现,为企业的发展带来了更多的机会和挑战。但是,在海量数据的处理过程中,如何提高数据的读写速度,成为了企业需要解决的重要问题。这时候,分布式大数据缓存技术便应运而生。在众多的分布...
    99+
    2023-08-16
    分布式 大数据 缓存
  • MySQL数据库分布式事务XA的实现原理分析
      1 原理   关于MySQL数据库的分布式事务XA,分布式事务实现的原理,可见[3];关于MySQL XA的说明,可见[1][2]。   MySQL XA分为两类,内部XA与外部XA;内部XA用于同一...
    99+
    2024-04-02
  • ASP技术在大数据分布式路径规划中的优势与挑战
    随着大数据技术的不断发展和应用,越来越多的领域开始使用大数据技术来处理海量数据。分布式路径规划是其中一个重要的应用领域,它可以应用于交通、物流、旅游等各个领域。ASP技术是一种逻辑编程语言,它可以用于大规模的数据处理和计算。在大数据分布式...
    99+
    2023-10-18
    大数据 path 分布式
  • 分布式缓存系统memcached简介与实践是怎样的
    这篇文章给大家介绍分布式缓存系统memcached简介与实践是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。memcached是什么memcached是由Danga Intera...
    99+
    2024-04-02
  • OLTP场景下的数据分布式设计原则是怎样的
    本篇文章给大家分享的是有关OLTP场景下的数据分布式设计原则是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言最近几年做分布式项目,很...
    99+
    2024-04-02
  • MySQL数据库优化的方案与实践是怎样的
    这篇文章给大家介绍MySQL数据库优化的方案与实践是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近一段时间,我们整理了一些关于Percona,Linux,Flashcache...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作