我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特肖 > 访问局部性 >

让Raft变快100倍 - Dragonboat的写优化

归档日期:05-27       文本归类:访问局部性      文章编辑:爱尚语录

  Dragonboat是近期开源的Go实现的多组Raft库,16字节荷载的写可以持续在900万次每秒,9:1高读写比下可以持续在超千万次每秒。

  详细的benchmark信息可参考github项目首页,同时也烦请大家点Star鼓励:

  Dragonboat的性能是持续优化改进的结果,它从2017年年中时候的每秒10万次写,一路走来,经过数十项优化以后最终成为当前开源版本所能具备的1000万次写每秒的性能。对于同样的吞吐需求,更高效的实现意味着库本身消耗的资源将更少,能为用户应用留出的资源更多。Dragonboat在2.8GHz志强上,对于16字节荷载,平均每个CPU核心能承担超过每秒40万次写,且在测试中线万次写,属于当前最高效多组Raft实现。

  这里从Raft协议的实现优化角度展开,从数十项已应用的优化中,介绍几个写请求的处理中的性能优化实例。

  当用户提交一个写请求(称为Propose,即提议)后,从性能考虑一般它并不是被立刻处理,而需要暂存。Go实现中,首先想到的多半是用channel来暂存,并通过channel将待提议的请求传递给负责处理的部分。etcd的实现正是如此:

  这样做的性能问题显而易见,每次只能从channel中取出一个请求后逐一处理。而channel是个功能丰富的内建类型,比如协程的特性决定对channel的操作甚至可以带来协程的调度。

  在Dragonboat中,在处理单个请求的地方,均避免使用channel做任何数据的传递。在处理待提议请求上,使用的是由两个slice来回切换而构成的一个可以整体访问的queue,每次取出当前slice中的所有待提议请求,一次合并(batching)地完成提议。

  Raft要求被commit的entry至少在过半数的机器上完成了落盘的保存,这确保只要quorum存活,磁盘上必然有所有已commit的entry。当每秒面对千万规模的Log Entry的写入,因为基数巨大,任何冗余的数据的写入都浪费磁盘空间与带宽,进而拖累延迟与吞吐性能。

  Key和Value里均含有大量低信息量的值,如上述Index字段,正常情况下它应该是连续递增的

  每个 entry被设定为一个Key-Value store的记录,可被独立地读写访问。但对共识库而言,磁盘上entry的访问具有很强的访问局部性,某entry被读写以后,它下一条Log Entry很可能是接着马上要被访问。

  对上述简单的设计,试想一下如需每秒1000万次写,则每秒需添加1000万条记录,内含1000万个值完全重复的ClusterID与Term记录,这必然是低效的。

  Dragonboat中,Log Entry的存储避免上述归纳的三个问题。在Leader不变,从而Term不变Index连续递增的通常情况下,Log Entry被安排为如下形式后保存,大幅降低了空间的浪费和写入带宽的需求,对延迟的改善也很明显。

  上一部分介绍了磁盘上存储Raft Log Entry,与内存内存放的Log Entry一起,根据具体哪些Log Entry被存放在内存那,哪些被存放在磁盘上,这样一个划分方法构成了Log Entry的具体存储模型。

  通常的实现,比如etcd,是简单将所有Log Entry分为已落盘保存和仅在内存内两部分,如下图:

  这种简单的划分最主要是根据Raft协议对Log Entry存储方式的要求,也就是Entry被多数节点保存至磁盘以后才可以被Commit并后续被执行。在这种简单设计中,一个Entry的存储方式随时间和状态的变迁如下:

  问题也很明显:Entry被执行的时候,已经不在内存中了,需要从磁盘上读取,从而大幅度影响效率。etcd的用户,比如CockroachDB特地为此增加了一个LRU的cache层,以试图减小这样的读盘开销。但随之带来的,是庞大的维护这个LRU cache的性能成本支出。

  Dragonboat不采用etcd式的两级Log Entry模型,而是采用一个三级的设计,确保近期马上会使用的Entry始终在内存里,且无需额外维护一个cache层,甚至无需额外的内存拷贝。

  16GBytes ECC REG内存售价略高于100美元,折合一线软件工程师一小时工资

  同时,如果需要,通过简单的限制最大允许内存使用量,便可避免因内存中存有太多Log Entry而使得内存使用过量的问题。待提议请求与收到的复制Log Entry的消息根据异步网络假设,均可随意丢弃,以确保限制内存用量。

  因为是Go语言的实现,Dragonboat最初使用Google全家桶来做很多组件的实现。比如节点间通讯最初用gRPC,而数据序列化则顺理成章的使用Protobuf。显而易见的,这种选择必定是和高性能无缘了。

  先从表面上看,Protobuf是一种特别慢的序列化方案,gogo protobuf在它的基础上有所改良,但依旧是很慢的。Dragonboat目前采用的是Protobuf加Colfer的混合方案,对性能敏感的类型,比如Raft的Log Entry,使用Colfer做序列化以取得更好的性能。详细的性能对比,可以参考这里。

  然后,上述序列化的表面问题,归根结底依旧是技术实现细节。真正的优化,必须贴合协议、算法,从原理上考虑。在一个Raft库里,序列化的最大问题是反复多次的序列化:

  Leader上的Log Entry在落盘写的时候被序列化一次,在网络发送的时候,至少被序列化一次,甚至因为发送目标的不同,而被序列化多次。

  Follower收到Leader发来的已经序列化了的Log Entry的内容,首先是将它们反序列化操作,然后落盘写的时候却又再次序列化它们。

  开源一个千万级多组Raft库-Dragonboat优势功能与使用设计与实现测试与正确性检查性能分析向大家介绍Dragonboat,一个开源的Go实现的多组Raft库,项目已Apache2协议下开源。欢...博文来自:weixin_44534991的博客

  我们chrome插件网在之前有介绍过一篇文章:还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!里面有介绍过一些百度云盘下载工具和chrome插件解决百度云盘下载限速的问题。时间久了有些...博文来自:TheBeauty2016的博客

  2019最好用的百度云破解版,下载不限速。废话不多说,直接上链接:链接:密码:ckkv使用说明:下载后解压...博文来自:ljx1528的博客

  前言:百度网盘故意限速,带宽几十M,下载速度却不足100KB,下载了大半天一个1.3G的office2016都没下下来,中间失败重试就得从头来,很是恼火,傍晚时分,我决定破解它。破解百度网盘限速的思路...博文来自:xuyang844175181的博客

  1.百度搜索下载“PanDownload1.3.5”软件2.打开“PanDownload1.3.5”,后输入百度网盘账号登录。3.点选需要下载的目录或文件 原文转载地址:博文来自:爱谁谁博客

  一招让你的百度云资源下载速度快10倍!2016-08-1420:15软件帮哥哥的百度云里有好多小视频(很正经的小视频),都是从大公无私的网友们分享的资源里保存到自己账号的。每当哥想选择一集下载下来慢慢...博文来自:Kevinvcc200的博客

  百度网盘下载速度慢怎么办?小编为大家带来了BaiduNetdiskPluginforMac,这是一款适用于Mac平台的百度网盘限速破解vip自动提速补丁。百度网盘vip破解版mac为您破解了百度网盘的...博文来自:的博客

  本文是持续更新的哦。多种方法必有一种属于你。笔者自己实战体验过~大家有什么疑问可以问我由于百度云本身也在发现这些钻空子的技巧,不断的修复自己的bug,所以大家还是且用且珍惜(最新的chrome已经不支...博文来自:大唐锦绣的博客

  要说国内百度当前最好用的工具,只剩下百度云了,但是百度云现在下载简直是龟速。今天就给大家解决这个龟速下载问题。简单介绍一下我们的工具1.油猴脚本管理器油猴脚本管理器(Tampermonkey)是一款免...博文来自:dazhong2012的专栏

  百度云加速下载资源:密码:7qgb下载解压,登陆即可百度云全速下载,资源来自网友@奔跑中的奶酪...博文来自:YuChen

  应该有很多小伙伴平时的文件、资源都会放到百度网盘上面,或者从别人网盘上找到各种资源,但是当你下载的时候你就发现百度云是以这种速度龟速下载。对,每秒几十KB,小的文件还好,如果稍微大点的软件,就得先去玩...博文来自:志哥的博客

  全网最简单的百度网盘提速方法!!PanDownload百度网盘是一个比较常用的软件啦,不管是看剧还是下文件基本上都离不开百度网盘,但是每次想要下文件的时候因为太穷冲不起会员所以速度超级慢!!!在网上也...博文来自:深藏的是波光粼粼

  1.下载安装包下载地址:点击下载密码:u61b2.打开谷歌浏览器,输入chrome://extensions/单击回车,进入拓展程序界面3.拖放刚刚的tampermonkey安装包里的文件,松开鼠标,...博文来自:litdaijiaqi的博客

  下载速度快。现在破解版的百度云真的是各式各样了,无意间发现一款破解版的百度云,好的工具在这里一定要和大家分享了。咱们先来看看下载速度,我这里应该是10M的带宽,稳定之后基本保持在2MB/s的下载速度。...博文来自:2号博客

  背景:Mac上的百度云盘下载速度堪忧,本人用的Chrome浏览器。以下也是以Chrome为例。解决办法:1、安装arua2gui,下载Aria2GUI-vx.x.x.zip这个压缩包,并解压将Aria...博文来自:十万个逗的博客

  转发自:相信大家都比较困惑,百度网盘客户端限速后一般只有几十K的下载速度,Wind...博文来自:梦想与她。

  转载请注明出处:问题百度云非会员用户会被限速,以我遇到的为例,一个资源下载速度只有40kb/s,体验会员加速能达到6mb/s,也是醉了。于是寻找了下相关解决方案,找到了一个十分好用的工具Proxyee...博文来自:小白成神路

  百度云下载大文件很慢。这时候可以获取下载连接后用迅雷下载。获取下载链接的方法找一个Linux的系统中的浏览器。打开共享链接,然后点击下载,之后就可以直接在浏览器中下载了。以小强系统为例。我们可以先vn...博文来自:bluewhalerobot的博客

  连接失效还需要的加群568245593加入免申请链接:提取码:5xtf放在这里,供大家用。...博文来自:somdip的博客

  百度云破解版不限速百度网盘破解版不限速2019最新可用,吾爱搬运的,担心软件不好使特意测试了一下破解版使用有风险是否有后门什么之类的我也不懂如果速度不能达到最大化,可以暂时关闭杀软,或者加入360安...博文来自:zzz19的博客

  之前写过一篇如何把百度网盘下载速度提高100倍,我推荐这个下载工具,用到的工具是proxyee-down,地址是博文来自:志哥的博客

  对于大多数人来说(有钱人除外),每次在百度网盘下载东西的时候总会被限速,很是苦恼,如果不想被限速就要充值百度网盘的SVIP,有可能充值了,下载速度还是依旧很慢,为此,我在网上搜寻了很久,也下载了很多垃...博文来自:未来先生的博客

  Pandownload软件关停公告大家好,我是PanDownload的作者。很遗憾的告诉大家,由于个别黑心商家将本免费软件有偿售卖,现决定即日起暂停软件使用。本软件自去年2月9号首次发布以来,一直坚持...博文来自:NCUCoder

  用百度云下载总是没速度,家里网速50MB,下载速度确实200KB左右,非常的不爽,从网上找到一种解决方法,试了一下确实可行,保存一下已备后用。1、彻底退出百度云客户端2、打开Windows/syste...博文来自:felixour的博客

  我只是共享解决方案,并不是恶意攻击百度公司。第一步,下载工具。我这里提供的是windows版本,下载后进行解压缩。下载地址:博文来自:tian154731的博客

  分享一个用mac破解百度网盘限速的教程。普通会员还不能解除限速,超级会员才会解除限速,360一年,太贵 下载地址:mac百度云下载限速破解软件 一、下载dmg文件里面有这两个文件:一个是aria2,一...博文

  一、工具准备百度网盘不限速破解,需要准备三个工具插件:Tampermonkey俗称油猴百度网盘直接下载助手internetdownloadmanager即IDM插件下载地址:博文来自:跟我学C/C++的博客

  这是一款通过算法来提速的高速下载器,支持Windows和Mac。低调使用.下载地址:百度云下载地址:链接:博文来自:u010523267的专栏

  前言现在网上各种百度云破解版的,不限速的各种各样,但是很多不知道有没有后门,不安全,或者不好用的百度云下载器,博主基本尝试了很多网上给出的破解版,很多是有使用条件的,比如只能使用QQ登陆,或者版本更新...博文来自:pshxws888的博客

  composer安装特别慢的解决方案在项目开发的时候有许多新的依赖要按照就需要用到composer但是由于国内安装下载速度贼慢(国外的网站连接速度太慢,并且随时可能被墙)安装一个excel扩展(com...博文来自:派煌篇的博客

  破解百度网盘下载速度限制背景方法一油猴插件加IDM方法二baidupcs替代迅雷(姑且算半个吧)背景bdyun和xl是常见的传播和下载资源的两款软件,但他们都有一个共同的特点,流氓啊!!!!那有没有不...博文来自:cynthrial的博客

  之所以会接触到这个加速下载的插件,主要是因为我当时在下载一个文件的时候下载速度实在太慢了,所以就去网上查了有没有插件可以把百度云的限速给破解了。首先找到的是这个网页:博文来自:MaoChuangAn的博客

  不知道从什么时候开始,用百度云的客户端下载资源变得如此的慢,我没用会员,不知道会员的速度是多少,我只知道学校的图书馆里安装上客户端,下载的速度并没有比用浏览器下载快多少。而且还有限制,对文件夹的下载(...博文来自:Guo wenqiang 廊坊师范学院

  用记事本打开hosts文件后,并在hosts文件中添加如下文字: 然...博文来自:快乐de馒头

  1.       “离线可用”功能可建立文件夹举例:如果有2个文件夹,里面的各存放200张图片,且文件名相同,如果都加到离线下载,那么在离线下载里就疯掉了,很难分清哪张是哪张。 2.      建议离...博文来自:ISAMU的专栏

  在iPad上用百度云离线i的视频,播放不流畅,总是卡,请问大家都是这样的现象吗?我觉得不是网速的问题啊。论坛

  注意:所有方法都需要配合新号使用,18年十月份就针对ID限速了,自己注册或是联系小编维信China0NB获取小号。 360网盘关闭后,百度云似乎要成为国内网盘的唯一选择,然而百度云下载速度太慢,显然是...博文来自:的博客

  对象的内存分配从大方向上将,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB(转换后援...博文来自:小小本科生成长之路

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  前面既然写了中缀转后缀的,那么现在说下中缀转前缀的,至于后缀(前缀)转中缀,可以根据相关的转换规则自行转换。目的将中缀表达式(即标准的表达式)转换为前缀表达式例如:1+2*3+(4*5+6)7 转换成...博文来自:Xefvan的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  网上查了一下工业视觉标定板,少则几百大洋,多则几千大洋,就想在A4纸上山寨打印一个标定图,就是黑白方格相间的那种。A4纸的标准大小为210*297mm。搞了个把小时,其实想明白了之后很简单。从每...博文来自:eric_e的博客

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...博文来自:知识小屋

  一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托...博文来自:小小本科生成长之路

  用CSS写背景图片,background-image:url(1.jpg); 但是一直都不显示图片,只有原本写好的div的边框。 一般不显示都是路径写错的问题,(图片的相对路径是指相对于写这条c...博文来自:yovven的博客

本文链接:http://shawntierney.com/fangwenjubuxing/399.html