Predis Multi-Zone

A Data Flow Framework with High Throughput and Low Latency for Permissioned Blockchains

联盟链的吞吐瓶颈由共识层和网络层的数据分发过程共同决定。
Predis 协议利用了共识节点的空闲带宽,提前分发区块中的内容即bundle,减少了共识区块中的内容,每个共识区块中能够包含更多的交易,从而提高了吞吐。将数据分发和共识过程解耦,冗余遇到数据可用性(data avaliability)的问题. 也就说如果一个区块要被添加到区块链上,但是区块中的内容还没有被广泛传播,许多的节点还无法访问区块中的内容。
在之前的工作中,面对数据可用性的问题,采用可靠广播解决,例如保证至少 nc-f 个节点收到了预分发的数据。但是在predis的设计中,并不依靠可靠广播RBC。Predis的mempool设计成多条链的形式,有点累计确认的思想在里面。

Multi-zone 中共识节点利用EC编码将bundle分成若干strips。将网络拓扑分成多个zone,每个zone中有relay 节点负责转发 stripes 从而减少每个节点的带宽压力。

PREDIS

在predis 中交易被打包成 bundle然后广播给其他的共识节点,bundle是类似于区块的结构,也包含了指向前一个bundle的hash。同一个节点打包的bundle会穿成一条链。如果一个bundle被共识节点接收并认为是有效的,那么他的前一个bundle也一定被该节点接收并验证是有效的。

tip 指明了当前各个链中的有效bundle的高度。

如果有恶意节点发送冲突的bundle,会被检测到并将恶意节点加入ban list。

请添加图片描述

每个bundle中还指明了node产生bundle时,当前node的mempool中各个链的有效bundle的高度。这可以用来说明每个node当前已知哪些bundle。

当共识的时候leader 要产生 predis block,其中指明了要将哪些bundle中的交易包含进去。关键是确定在每条链的那个高度 cut下来一段bundle。
leader 会根据mempool中的各个链最新的bundle( tip )中的tip list 确定,至少有 nc-f 个节点所拥有的高度。
图中的情景,链 bdl 3 就选取了高度4,因为 5 3 5 4 中有3个节点已经收到了bdl3的高度为4的bundle。

predis 将leader 的带宽消耗从O(nc x ntx) 降到了 O(nc)

MULTI-ZONE

在星形拓普网络中,随着共识节点数量的增加,共识的带宽开销也会增加。
muiti-zone 将网络拓扑划分成多个zone,可以根据节点的地理位置和连通性进行划分。

我们将全节点分成三类,共识节点、relayer nodes、普通全节点。

共识节点收到bundle之后使用erasure code 将bundle 划分成 nc 个strips,nc 是共识节点的数量,第 i 个共识节点负责转发第i个strips给relayer,relayer负责将其订阅的strips转发给同一个zone的其他节点。这样就减少了共识节点分发bundle的带宽压力。

本文中还有比部分逻辑是用来叙述如何确定 relayer,以及relayer如何调整其对应订阅的strips。每个新加入zone的节点,查询当前的relyaer,只订阅每个relayer一半的stripes。如果新节点还有strips没有订阅,则自身称为relayer,从共识节点接收转发剩余的stripes。我认为这样设计能够使得尽可能多的节点称为relayer。
当relayer退出的时候,relayer也要和普通节点做好交接,将relayer的身份传递出去。

Predis有两个优点:
(1)Predis的mempool采用单链结构,以更低的消息复杂度开销实现与可靠广播相同的效果; (2)Predis避免了区块大小随着其包含的交易数量线性增加的问题。这意味着随着交易量的增加,Predis 中的提案(称为 Predis 区块)的大小保持稳定,这与对应模型中的线性增长不同。
请添加图片描述

相关推荐

  1. How to view the high-tech zone atmospheric project

    2024-02-22 11:38:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 11:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 11:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 11:38:02       82 阅读
  4. Python语言-面向对象

    2024-02-22 11:38:02       91 阅读

热门阅读

  1. 什么是AI、AIGC、PGC、AGI

    2024-02-22 11:38:02       45 阅读
  2. 备战蓝桥杯 Day9(背包dp)

    2024-02-22 11:38:02       48 阅读
  3. Qt多线程调用python并接收调用数据

    2024-02-22 11:38:02       43 阅读
  4. 编程笔记 Golang基础 015 数据类型:布尔类型

    2024-02-22 11:38:02       51 阅读
  5. Go 1.22 对 net/http 包的路由增强功能详解

    2024-02-22 11:38:02       45 阅读
  6. go语言内存泄漏检查工具

    2024-02-22 11:38:02       47 阅读
  7. 无人值守称重系统是如何提取车辆数据的

    2024-02-22 11:38:02       47 阅读
  8. 嵌入式Linux下的多线程编程

    2024-02-22 11:38:02       40 阅读
  9. Spring Boot

    2024-02-22 11:38:02       46 阅读
  10. Redis 数据结构详解:底层实现与高效使用场景

    2024-02-22 11:38:02       48 阅读