作者:Alexey Vanin

任何计算机系统都有监控操作,可能会发送心跳信息、校验和查询及哈希请求等。这些操作在本文中都被统称为任务。在中心化系统中,通常会有一个受认证的节点或节点群组来完成任务。而去中心化系统可以将任务下发给各个节点,从而灵活拓展,因此效率也显然更高,但这也就导致了相应的问题——到底如何在所选节点间分配任务。我们可以通过以下两种方式解决这个问题:

• 节点随机选择要做的任务
• 节点使用dBFT之类的共识算法分配任务

本文将探讨第二种方法。

拜占庭容错任务分配

假设有v个任务和n个可随时在系统中工作的节点。每个任务和节点都有一个独一无二的标识符。因此每个节点都可以使用HRW [2]选择任务,使用预先设定的算法来执行任务。任务分配共识实际上确认了所有任务都是在未发生技术故障的前提下完成的。

使用dBFT算法,即使网络[1]中高达1/3的节点做出妥协也可以达成共识。举个例子,若某系统n=v=3:

该系统有3个任务和3个节点,其中有一个节点有欺诈行为。

这些任务统一在各节点中进行分配:如果每个节点承担一个任务,在最坏的情况下会有一个任务可能无法被执行。因此我们使用了冗余来确保所有任务都能被执行。v任务须被n/3+1个节点执行。在此情况下,节点任务池的大小可通过以下公式算出。

在此案例中,P(3,3) = 2

不管哪个节点做出了妥协,所有任务都仍能被正确执行。


图1 不同任务数前提下任务池大小的最大值

图1标明,该公式的值趋向于v/3,意味着在任何情况下各节点任务池中的任务都占所有任务的1/3。在负载增加的情况下系统可能不能正常拓展。

减小任务池大小

若系统的n=3 v=4,任务池大小即为P(3,4) = 2.3 ≈ 3。各节点的任务池大小就可减至2:

因此,各任务被执行的几率就都达到了66%。因此任务池大小可以缩减,只要确保一定的精度就可以了。
出于研究的目的,我们建立了一个模拟模型进行实验,参数为v=1000。我们尝试在不同n的情况下找到能使任务无法执行的可能性小于0.00001的任务池大小。该模型已开源在github[3]。结果如图2所示:


图2 v=1000时的任务池容量实验

上图显示,该模型的实验数据实际上处于任务池容量的最大和最小值的区间里。因此当n增加时,任务池所需容量会减小。任务池容量的最大值与实验值之间的差额可以使用R(x)(位于y1轴上,取0-1之间的任意值)公式求得一个近似值。然后任务池容量就可通过以下公式求得。

深入研究

本文并未考虑网络节点发生故障的可能性,而且所有实验均在最坏假设下进行,做出妥协的节点数也带入了最大值。显然,100个节点中出现33个妥协节点的比例也比3个节点中出现1个妥协节点的几率小。因此可以将“妥协几率”的方程定义为Q(x),而后计算出任务池的大小为P(n,v)⋅R(n)⋅Q(n)。而当妥协节点的数量小于n/3时,R(x)的的行为还需要深入研究。

参考文献

1.张铮文,区块链拜占庭容错算法:
https://docs.neo.org/en-us/ba...
2.一致性哈希(最高随机权值):
https://en.wikipedia.org/wiki...
3.模拟模型库:
https://github.com/AlexVanin/...

原文翻译自:https://medium.com/@neospcc/t...

如何在NEO共识节点间分配任务相关推荐

  1. NEO共识节点推荐搭建步骤

    目录 共识节点推荐搭建步骤 远程访问 硬件 密码 SSH认证密钥 服务供应商具体配置 Linux服务器配置 使用su时 以管理员身份登录时 防火墙 自动安全更新 fail2ban 双因素认证 监控 登 ...

  2. ZooKeeper实战(一):ZooKeeper原理,详细安装步骤,基本命令,节点间通信原理

    回顾Redis 用redis实现分布式锁比较复杂,使用zookeeper会比较简单. 一.ZooKeeper介绍 官网 https://zookeeper.apache.org/ 概览文档 https ...

  3. numa节点间CPU利用率不均衡 - wakeup affinity

    最近遇到服务器numa节点间cpu利用率不均衡,清除sched_domain的flags中的AFFINE_WAKEUPS标志位是一个优化方法.但是如果直接将AFFINE_WAKEUPS关闭,将无法充分 ...

  4. P2P网络节点间如何互访——详解STUN方式NAT穿透

    P2P网络节点间如何互访--详解STUN方式NAT穿透 转载请注明出处:https://www.jzgwind.com/?p=973  by joey 一.背景 P2P网络的核心原理,是将分布在网络上 ...

  5. 【IT笔试面试题整理】 二叉树任意两个节点间最大距离

    求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数, 比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度. 一种是:经过根节点,此时只 ...

  6. ssh suse 配置_SUSE+linux+配置节点间的SSH信任关系

    配置节点间的SSH信任关系 (1)在节点1上 oracle@node1:~ > pwd /home/oracle oracle@node1:~ > mkdir .ssh oracle@no ...

  7. 二叉树节点间的最大距离问题

    二叉树节点间的最大距离问题 从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路 径上的节点数叫作 A 到 B 的距离.求整棵树上节点间的最大距离. 如果二叉 ...

  8. 3.产品成本在完工和在制产品间分配

    摩天,用友旗下社会化的企业数智化学习认证社区,提供数智营销.智慧医疗.数智金融.智能制造.项目管理等精品课程,数智化人才上摩天!https://mot.yonyou.com/ 当产品期间存在完工数量时 ...

  9. 集群节点间的延迟问题

    集群节点间的延迟问题 mongoDB 一个弱点,就是最终一致性,这也是所有NoSQL 的一个问题. 在CAP 理论中,数据库在 (C)onsistency.(A)vailability和(P)arti ...

最新文章

  1. 自然语言处理的现实应用
  2. Forefront Security For Exchange文件传送限制测试
  3. ArrayList的sublist注意
  4. ios:CGContextRef 渲染中文问题
  5. Windows mosek
  6. 通过xrdp实现远程桌面连接Windows Azure linux虚拟机
  7. 中国HBase技术社区第五届MeetUp ——HBase技术解析及应用实践(深圳站)
  8. 深度技术Win11 64位最新旗舰版镜像V2021.08
  9. 在容器服务kubernetes上配置https
  10. c++卸载工具_卸载软件同时清除软件注册表里面的信息,也许这款软件能够帮助你...
  11. 【读书笔记】--少有人走的路①:心智成熟的旅程
  12. 键盘上哪个键是ESCAPE键?
  13. win32 python查找文字指定格式 win32com 定位word开始结束 相当于发送快捷键
  14. weblogic打补丁详细步骤(linux)
  15. 阿里云OSS 分块上传的代码整理
  16. Xilinx zynq USB开发
  17. Ptcms在php7.2.10下的调试,each等方法
  18. bitlife设置中文_生活模拟器BitLife
  19. 无处不在的开源 五十个开源存储软件
  20. Linux 下如何转换文件编码格式

热门文章

  1. java使用类似ini文件IniProperties的类
  2. 指针数组,数组指针,指针函数,函数指针,二级指针详解
  3. 通用异步 Windows Socket TCP 客户端组件的设计与实现
  4. C 判断 —— switch语句(多个switch值与一组语句联系起来、case顺序是可任意的,default不一定是最后一个case)
  5. JAVA构造MAP并初始化MAP
  6. 事务的传播行为和隔离级别[transaction behavior and isolated level]
  7. Java内存数据库-H2介绍及实例(SpringBoot)
  8. Android新手系列教程(申明:来源于网络)
  9. YTU 2610: A改错题--体检情况分析
  10. python多进程断点续传分片下载器