左耳听风_030_29_推荐阅读分布式数据调度相关论文

你好,我是陈浩网名猪耳朵house.在课程之前呢,我先给你提醒一下,这节课呢会出现很多的图片啊,为了方便你更好的理解我讲的内容,建议你打开文稿,听我讲解。

而且本节课呢我会推荐大量的英文文章啊,看着文稿也能让你更容易理解和对应。

好了,正式开始我们今天的课程,我们在之前的系列文章分布式系统架构的本质中说过,分布式系统的一个关键技术是数据调度。

因为我们需要扩充节点,提高系统的高可用性,所以呢必须要冗余数据节点。

那建立数据节点的覆盖看上去容易,但是其中最大的难点啊就是分布式一致性的问题。

那下面呢我会和你聊一聊数据调度世界中的一些技术点和相关的技术论文。

那对于分布式的一致性问题呢,相信你在前面啊看过好几次文中的这张图。

从图中呢我们可以看出pixel算法的重要程度。参考资料:https://51gx.top/detail/259

还有人说啊分布式下真正的一致性算法只有pixel.那pixel算法呢是莱斯利兰伯特在一九九零年提出来的一种基于消息传递,并且呢具有高度容错特性的一致性算法。

但是这个算法太过于晦涩了啊,所以一直以来呢都属于理论上的论文性质的东西。

那它进入工程圈的源头呢,是google的一个分布式锁服务。

Travel lock啊用在了big table里面,直到google发布了这两篇论文啊,pixoas才进入到工程界的试验中来。

那第一篇呢是big table, a distributed story system for structure data.那第二篇呢是the travel lock service for loosely coupled distributing systems.那google与big table相起名的还有另外两篇论文啊,分别是在google file system,还有MAREDCE simplified data processing on large clusters.不过呢这一篇论文中啊并没有讲太多的pixel算法细节上的内容,反而在论文pixel smith life和nature narrow perspective.啊,这里面提到了很多功能实践的细节,如google实现python的时候呢,遇到的各种问题和解决方案,讲述了从理论到实际应用,这两者之间啊巨大的鸿沟,尤其是在满地都是坑的分布式系统领域。

那这篇论文啊没有过多的讨论拍克算法本身,而是在讨论如何将理论应用到实践,如何弥补理论在实践中的不足啊,如何取舍,如何测试。

那这些在实践中的各种问题啊,才是工程的魅力。

所以建议啊你也读一读pixel算法的原版论文啊,我在这里就不贴了,因为一来啊比较晦涩,二来呢也不易懂。

那这里呢我推荐一篇比较容易读的neoggorims ms actuals.那这篇文章啊还有一些小动画帮你读懂。

那还有一篇可以帮助你理解的文章呢,叫做pixils by examples.那如果你要自己实现pixel算法啊,这里也有几篇文章供你参考。

那第一篇呢是pixel s made coat,作者是马克罗普迪米,它实现了一个pixel的开源库live pixels.这第二篇呢是pixel for system builders.他从一个系统实现者的角度啊,讨论了实现pacels的一些具体问题,比如leader选举数据和消息类型,还有流控等等。

那第三篇呢是pixel made moderately complex.那这篇文章啊比较新是二零一一年才发表的。

文中介绍了很多实现的细节,并且啊提供了很多伪代码,一方面呢可以帮助你理解pixels,那另一方面呢也可以据此啊实现一个pixels.最后第四篇呢是paxel made practical,那这篇文章主要介绍如何采用paxel来实现replication.那除了马克罗普利米的那个开源实限之外呢,到github上去找一下,你还会看到一些其他的项目啊,分别是playing paxels、 implementations、 python and java,还有a go implementation of the paxels algorithm.那zookeeper呢有和paxels非常相似的一些特征,比如领导、选举、填号等等。

但是它本质上不是paxels协议,比是自己发明了zp协议。

那有兴趣的话可以读一下这篇论文,叫做zap high performance broadcast for primarily backup systems.那前面讲的google file system MAFREDS和big table啊并称为古三篇。

那基本上来说呢,整个世界的工程系统啊,因为这三篇文章才开始向分布式系统演化。

而云计算中的很多关键技术也是因为这三篇文章才得以成熟。

后来呢雅虎公司啊也基于这三篇论文啊,开发了一个开源软件叫hadoop.因为python的算法太过于晦涩了,而且在实际的实践上有太多的坑,而且呢不太容易写。

对,所以呢有人搞出来另外一个一致性的算法叫raft.那它的原始论文呢是in search of the understandable consensus algorithm extended version.那翻译成中文就是寻找一种易于理解的raft算法。

那这篇论文的译文啊,在info q上啊叫做raft一致性算法论文译文啊,推荐你读一读。

那raf算法和pixel啊在性能和功能上是一样的,但是它和paxel算法的结构不一样。

那这就使得raf算法更容易理解啊,并且更容易实现。

那么raft是怎么做到的呢?是这样的,raft把这个一致性的算法呢分解成了几个部分。

那一个呢是领导选举,一个是日志复制,那一个呢是安全性啊,还有一个啊是成员变化。

那对于一般人来说呢,raf的协议比pencils学习曲线更低,也更平滑。

那rap协议中呢有一个状态机,每个节点呢会有三个状态,分别是leader、 candidate和follower.那follower呢只响应其他服务器的请求。

那如果没有收到任何信息啊,它就会成为一个candidate啊,并且开始进行选举。

那收到大多数人同意选票的人呢就会成为新的leader.那一旦选举出了一个leader,他呢就会开始服务客户端的请求。

每一个客户端的请求呢,都会包含一个要复制到状态机执行的指令。

那leader呢首先要把这个指令追加到log中啊,形成一个新的entry.然后通过panda entries RPC并行的把这个entry发给其他的服务器。

那如果其他服务器没有发现问题,那复制成功之后呢,会给leader一个表示成功的ACK.那leader受到大多数ACK之后呢,应用这个日志啊,返回客户端执行的结果。

那如果follower崩溃或者丢包leader呢会不断重试pand entries RPC.那这里呢我推荐了几个不错的raf s算法的动画演示,并且啊在文中附上了链接。

那后面呢业内又搞出来了一些工程上的东西啊,比如amazon dyamal DB.那他的论文dynamo amazon higher available key value store的影响力啊也很大。

那这篇论文中呢讲述了amazon的dynamo DB是如何满足系统的高可用、高扩展和高可靠要求的那其中呢还展示了系统架构是如何做到数据分布和数据一致性的那GFS采用的是查表式的数据分布,而dynamo DB呢采用的是计算式的啊,也是一个改进版的,通过虚拟节点减少增加节点带来数据迁移的一致性哈希。

那另外呢这篇论文还讲述了一个NRW模式,用于让用户可以灵活的在CAP系统中选取其中两项。

那这里呢用到了vector clock啊,也就是向量时钟来检测相应的数据冲突。

那最后呢还介绍了使用hand off的机制,对可用性的提升。

那这篇文章中呢有几个关键的概念,一个呢是vector clock,那另一个呢是gossip协议。

那提到向量时钟呢,就需要提一下逻辑时钟。

所谓逻辑时间呢,也就是在分布式系统中呢为了解决消息有序的问题。

由于在不同的记忆上有不同的本地时间,那这些本地时间的同步啊很难搞,会导致消息乱序。

那于是呢派xel算法的发明人兰伯特就搞了一个向降时钟。

每个系统啊都维护一个本地的接数器。

那这个呢就是所谓的逻辑时钟,那每执行一个事件啊,都对这个计数器做加一的操作。

当跨系统的时候呢,在消息体上附着本地计算器。

当接收端收到消息的时候呢,更新自己的计收器啊,也就是调整自己的时钟。

那逻辑时钟呢就可以保证如果事件a先于事件b那么事件a的时钟呢一定小于事件b的时钟,但是反过来则无法保证啊,因为反过来没有因果关系,所以向量史中呢就解释了因果关系。

向量时钟啊维护了一个数据更新的一组版本号。

版本号呢其实就是使用逻辑时钟。

那假如一个数据需要存在三个节点ABC上,那么这个向量维度啊就是三在初始化的时候呢,所有节点对于这个数据的向量版本就是a零、b零c零a一b零、c零。

然后呢向其他节点复制这个版本。

那它在语义上表示为我当前的数据是由a的结果更新的。

而在逻辑上呢,就可以根据分布式系统中的数据更新的顺序,找到相关的因果关系。

那这其中的逻辑关系呢,你可以看一下马萨诸塞大学的课程,distributed operating system中的第十节clock cicrereanization这篇讲义。

关于vector clock,你可以看一下why vector clocks are easy,还有why vector clocks are hard啊,这两篇文章。

那另外呢dynamo DB中啊使用到了gossip协议啊来做数据同步。

那这个协议的原始论文呢叫做efficient recogciation and flow control for antiecrophy protocols.那gossip算法也是cosandra使用的数据复制协议。

那这个协议呢就像八卦和谣言传播一样啊,可以一传十十传百的传播开。

那这个协议看似简单,细节上呢就非常麻烦。

那根据这篇论文呢节点之间啊存在三种通信方式。

那第一种呢是push方式a节点啊,将数据的key value version和对应的版本化推送给b节点。

那b节点呢更新a中比自己新的数据。

那第二种呢是曝房式a只将数据key和version推送给b那b啊把本地比a新的数据key value version推送给AA呢在更新本地。

那第三种呢是push push方式,那与铺呢类似只多了一步a呢再将本地一笔b新的数据推送给DB呢,再更新本地。

如果把两个节点数据同步一次定义为一个周期,那么在一个周期内呢,铺是需要通信一次,铺呢需要两次,铺是铺啊,则需要三次。

从效果上来讲呢,铺是铺肯定是最好。

那理论上呢在一个周期内啊就可以使两个节点完全一致。

那直观感觉上呢也是push铺的收敛速度最快。

那另外呢每个节点上又需要一个协调机制,也就是如何交换数据能达到最快的一致性啊,也就是消除节点的不一致性。

那刚刚所讲的是瀑等等等,是通信方式,而协调呢是在通信方式下的数据交换机制。

那协调所面临的最大的问题啊,就是一方面需要找到一个经济的方式,因为不可能每次啊都把一个节点上的数据啊发送给另外一个节点。

那另一方面呢,还需要考虑相关的容错方式,也就是因为网络问题不可答的时候怎么办?那一般来说呢有两种机制,那一种呢是以固定概率传播的NTI androy机制。

那另一种呢是仅传播新到达数据的rumor mondering机制。

那前者呢有完备的容错性,但是需要更多的网络和CPU资源。

而后者呢则反过来不耗资源,但是在容错上难以保证。

那antiantrophy的机制呢又分为精确协调和整体协调这两种。

那精确协调希望的是在每次通信周期里啊都非常精确的消除双方的不一致性。

那具体表现呢就是互发对方需要更新的数据,因为每个节点都可以读写,所以这就需要每个数据啊都要独立维护自己的版本号。

而整体协调和精确协调不同,整体协调呢不是为每个数据都维护单独的版本号,而是每个节点上的数据啊统一维护一个版本号啊,也就是一个一致的全局版本。

那这样与其他结果交换数据的时候呢,就只需要比较节点版本。

而不是数据个体的版本啊,那这样呢会比较精细一些。

那如果版本不一样,则需要做精确协调。

因为篇幅问题啊,这里就不多说了。

你呢可以看一看原始的论文,还可以去看一看cassandra中的源码,或者呢到gata上搜一下其他人的实现。

那多说一句,cassandra的实现呢是基于整体协调的push pool模式。

那关于gossip的一些图示化的东西呢,你可以打开文中的链接啊,看一下动画gossip、 visualization.那以上呢讲的都是一些基本概念相关的东西。

那下面呢我们来谈一谈数据库方面的一些论文。

那第一篇论文呢讲的是AWS, arura叫做amazon aura design considerations for high output clounitive relation data vises.那aura呢是AWS,像mysql的计算和存储分离之后啊,计算节点scale up存储节点scale out.并且呢把它的redo log独立设计成一个存储服务,把分布式的数据方面的东西啊全部甩给了底层存储系统,从而提高了整体的吞吐量和水平的扩展能力。

那oora呢要写六份拷贝,但是它只需要把一个corome中的日志写成功啊就可以了。

那从文中的这张图啊可以看到它把存储符啊做成了一个跨数据中心的服务,从而提高数据库的容灾,降低性能的影响。

那对于存储服务的设计呢,核心的原理啊就是latency一定要低。

毕竟写六个copy啊,是一件开销很大的事儿。

所以基本上来说呢,orura用的是异步模型,然后拼命的做并行处理,其中用到的也是高c的协议。

我在文中呢给你展示了一张图,从这个图中呢我们可以看到完成前两步啊就可以ACK给调用方。

也就是说呢,只要数据在本地落地了就可以返回成功了。

然后呢,对于六个副本,那这个log会同时发送到六个存储节点。

只需要有大于四个成功的ACK啊,就算写成功了。

在第四步呢,我们可以看到用的是gossip协议。

然后第五步啊产生cathe页便行查询。

第六步呢在s三做snapshot啊,类似于checkpoint.那第二篇比较有代表性的论文呢是google的spanner googles globally distributed database.那spanner呢是google的全球分布式数据库。

那它的扩展性呢达到了令人咋舌的全球级可以扩展到数百万台机器数以百计的数据中心,还有上万亿的行。

那更给力的是,除了夸张的扩展性之外呢,它还能同时通过同步复制和多版本来满足外部的一致性。

那可用性呢也是很好的。

我在文中呢给你放了一张span server的架构图,我们可以看到每个数据中心呢都会有一套closers.那这是第二代的GFS.每个机器呢有一百到一千个tablet,也就是相当于数据库表中的行级。

那物理存储呢就是数据文件,比如一张表呢有两千行,然后有二十个tablet.那么每个tablet分别有一百行数据。

在tablet的上层呢通过pixelas协议进行分布式跨数据中心的一致性数据同步。

那pixel呢会选出一个replicica做leader,那这个leader的寿命啊默认是十秒,十秒之后重选。

那leader呢就相当于复制数据的master.那其他的rapdly card数据呢,都是从他那里复制的,读请求啊,可以走任意的rapuid卡。

但是写请求呢只有缺leader,那这些rapiid卡统称为一个pacforce group,那group之间呢也有数据交互的传输。

那google定义了最小传输复制单元,directory是一些有共同前缀的key记录。

那这些key呢也有相同的raplid卡配置属性。

那文中这里呢同样有一张示意图,方便你理解。

那目前呢基spanner论文的开源实现有两个,那一个呢是google自己的人出来做的,coco o是DB.那另一个呢是国人做的太DB.正如我在之前的分布式系统的本质,文章里所说到的,分布式服务的调度啊,需要一个分布式的存储系统来支持服务的数据调度。

而我们可以看到各大公司都在分布式的数据库上做各种各样的创新。

啊,他们呢都在使用底层的分布式文件系统来做数据引擎,把存储啊和计算分离开来。

然后呢使用分布式一致性的数据同步协议的算法来在上层啊提供高可用、高扩展的支持。

啊,这一点来看啊,可以预见到过去的分库分表,并通过一个数据访问的代理服务的玩法,应该在不久后就会过时啊,就会成为历史。

那真正的现代化的分布式数据存储啊,就是oura和spanner这样的方式。

那通过上面的这些论文呢,还有相关的工程实践和开源项目。

相信啊可以让你在细节方面对分布式中最难的数据调度方面有更多的认识。

那文末呢有分布式系统架构本质系列文章的目录啊,方便你查找自己关注的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/366653.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

试用笔记之-汇通来电显示软件

首先汇通来电显示软件下载 http://www.htsoft.com.cn/download/httelephone.rar

IP白名单及其作用解析

在网络安全领域,IP白名单是一项至关重要的策略,它允许特定的IP地址或地址范围访问网络资源,从而确保只有受信任的终端能够连接。下面,我们将深入探讨IP白名单的定义、作用以及实施时的关键考虑因素。 一、IP白名单的定义 IP白名单…

深度学习21-30

1.池化层作用(筛选、过滤、压缩) h和w变为原来的1/2,64是特征图个数保持不变。 每个位置把最大的数字取出来 用滑动窗口把最大的数值拿出来,把44变成22 2.卷积神经网络 (1)conv:卷积进行特征…

stm32学习笔记---USART串口协议(理论部分)

目录 通信 通信的目的 通信协议 STM32的通信协议 各种协议的通信引脚介绍 通信空间和时间 时钟特性 电平特性 设备特性 串口通信 硬件电路 电平标准 串口参数及时序 时序 串口的参数 串口通信的实际波形 声明:本专栏是本人跟着B站江科大的视频的学习…

Vue 项目部署为 HTTPS 站点

🧑‍🎓 个人主页:爱蹦跶的大A阿 🔥当前正在更新专栏:《JavaScript保姆级教程》、《VUE》、《Krpano》 ✨ 前言 在将 Vue 项目部署为 HTTPS 站点时,你需要配置 HTTPS 证书和服务器。以下是一个基本的步骤和…

深入解析 androidx.databinding.BaseObservable

在现代 Android 开发中,数据绑定 (Data Binding) 是一个重要的技术,它简化了 UI 和数据之间的交互。在数据绑定框架中,androidx.databinding.BaseObservable 是一个关键类,用于实现可观察的数据模型。本文将详细介绍 BaseObservab…

java 代码块

Java中的代码块主要有三种类型:普通代码块、静态代码块、构造代码块。它们的用途和执行时机各不相同。 普通代码块:在方法内部定义,使用一对大括号{}包围的代码片段。它的作用域限定在大括号内,每当程序执行到该代码块时就会执行其…

Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例

目录 获取下载链接 修改链接 重新构造链接 拓展 不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求…

初识Java(复习版)

一. 什么是Java Java是一种面向对象的编程语言,和C语言有所不同,C语言是一门面向过程的语言。偏底层实现,比较注重底层的逻辑实现。不能一味的说某一种语言特别好,每一种语言都是在特定的情况下有自己的优势。 二.Java语言发展史…

Docker Compose 一键快速部署 RocketMQ

Apache RocketMQ是一个开源的分布式消息中间件系统,最初由阿里巴巴开发并贡献给Apache软件基金会。RocketMQ提供了高性能、高可靠性、高扩展性和低延迟的消息传递服务,适用于构建大规模分布式系统中的消息通信和数据同步。 RocketMQ支持多种消息模型&am…

武汉星起航:无锡跨境电商加速“出海”,物流升级助品牌全球布局

随着全球化的不断深入,跨境电商作为数字外贸的新业态,正逐渐成为无锡企业拓展海外市场的重要渠道。武汉星起航关注到,近年来,无锡市通过积极推进国际物流枢纽建设,完善海外仓布局,以及各特色产业带的积极参…

JavaMySQL 学习(基础)

目录 Java CMD Java发展 计算机存储规则 Java学习 switch新用法(可以当做if来使用) 数组定义 随机数 Java内存分配 MySQL MySQL概述 启动和停止 客户端连接 数据模型 关系型数据库 SQL SQL通用语法 SQL分类 DDL--数据定义语言 数据库…

Intellij Idea显示回退和前进按钮的方法

方法1 使用快捷键&#xff1a; 回到上一步 ctrl alt <-&#xff08;左方向键&#xff09;回到下一步 ctrl alt ->&#xff08;右方向键&#xff09; 方法2&#xff1a; Preferences -> Appearance & Behavior -> Menus and Toolbars -> Navigation B…

SEO与AI的结合:如何用ChatGPT生成符合搜索引擎优化的内容

在当今数字时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已成为每个网站和内容创作者都必须掌握的一项技能。SEO的主要目标是通过优化内容&#xff0c;使其在搜索引擎结果页面&#xff08;SERP&#xff09;中排名更高&#xff0c;从而吸引更多的流量。然而&#xf…

如何养成爱自己的习惯:吸引世间美好,改变命运

在这个快节奏、高压力的时代&#xff0c;我们常常被各种事务所困扰&#xff0c;内心难以得到真正的宁静。然而&#xff0c;古老的智慧告诉我们&#xff0c;“静”是宇宙万物的根源&#xff0c;是生命恢复的根本。本文将探讨如何养成“静”的习惯&#xff0c;从而吸引世间美好&a…

springboot项目jar包修改数据库配置运行时异常

一、背景 我将软件成功打好jar包了&#xff0c;到部署的时候发现jar包中数据库配置写的有问题&#xff0c;不想再重新打包了&#xff0c;打算直接修改配置文件&#xff0c;结果修改配置后&#xff0c;再通过java -jar运行时就报错了。 二、问题描述 本地项目是springBoot项目…

Efuse介绍及安全启动浅析

Efuse是什么 eFuse(electronic fuse): 电子保险丝&#xff0c;熔丝性的一种器件&#xff0c;属于一次性可编程存储器。 之所以称为eFuse&#xff0c;因为其原理像电子保险丝一样&#xff0c;CPU出厂后&#xff0c;这片eFuse控件内所有比特全为1&#xff0c;如果向一位bit写入…

Windows编程上

Windows编程[上] 一、Windows API1.控制台大小设置1.1 GetStdHandle1.2 SetConsoleWindowInfo1.3 SetConsoleScreenBufferSize1.4 SetConsoleTitle1.5 封装为Innks 2.控制台字体设置以及光标调整2.1 GetConsoleCursorInfo2.2 SetConsoleCursorPosition2.3 GetCurrentConsoleFon…

python本学期所有代码!

第一单元 ----------------------------------------------------------------------- #圆面积的计算 radius 25 area 3.1415 * radius * radius print(area) print("{:.2f}".format(area)) --------------------------------------------------------------------…

AI图生视频工具测试

环境&#xff1a; 即梦 pika LUMA 可灵 问题描述&#xff1a; AI图生视频工具测试下面是原图 解决方案&#xff1a; 1.即梦 效果 2.pika 生成效果 3.LUMA 生成效果还行 4.可灵 生成效果最好